使用 Clash + AdGuard Home 在树莓派软路由上搭建广告屏蔽与透明代理服务器

之前 【补档】树莓派折腾记录 中也记录过了相关内容,但是一年过来有些地方有些变动与改进,故单开一篇重新记录并长期更新。

配置 Clash 进行透明代理

TODO

配置 AdGuard Home 进行广告屏蔽

TODO

防火墙

作为一个挂在公网下 7×24h 运行的网关服务器,进行一定的防火墙配置是必不可少的。这里主要通过 iptables 和 ip6tables 实现。

由于使用了 iptables-persistent 进行 iptables 规则可持久化,方便起见下面就直接把保存的规则文件贴上来了。

IPv4

/etc/iptables/rules.v4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
*filter
# INPUT 和 FORWARD 链上默认 DROP 掉
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# 防止外网使用内网 IP 欺骗
-A INPUT -i eth0 -s 192.168.0.0/16 -j DROP

# 允许本机、内网以及已建立的连接通过和转发
-A INPUT -i lo -j ACCEPT
-A INPUT -i docker0 -j ACCEPT
-A INPUT -i wlx1cbfceb110dc -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -i docker0 -j ACCEPT
-A FORWARD -i wlx1cbfceb110dc -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# 开放外网 SSH, HTTP, HTTPS 连接
-A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT

COMMIT


*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# 新建 clash 链
:clash - [0:0]

# 内网 TCP 请求转发给 clash 链
-A PREROUTING -s 192.168.0.0/16 -p tcp -j clash

# 将转发后的包源地址修改为本机地址
-A POSTROUTING -s 192.168.0.0/16 -o eth0 -j MASQUERADE

# 访问本机和内网不经过 clash
-A clash -d 10.0.0.0/8 -j RETURN
-A clash -d 127.0.0.0/8 -j RETURN
-A clash -d 169.254.0.0/16 -j RETURN
-A clash -d 172.16.0.0/12 -j RETURN
-A clash -d 192.168.0.0/16 -j RETURN
-A clash -d 224.0.0.0/4 -j RETURN
-A clash -d 240.0.0.0/4 -j RETURN

# 访问校园网不经过 clash
-A clash -d 59.66.0.0/16 -j RETURN
-A clash -d 101.5.0.0/16 -j RETURN
-A clash -d 101.6.0.0/16 -j RETURN
-A clash -d 118.229.0.0/19 -j RETURN
-A clash -d 166.111.0.0/16 -j RETURN
-A clash -d 183.172.0.0/15 -j RETURN
-A clash -d 202.112.39.2/32 -j RETURN
-A clash -d 219.223.168.0/21 -j RETURN
-A clash -d 219.223.176.0/20 -j RETURN

# 其余请求重定向至 clash 端口
-A clash -p tcp -j REDIRECT --to-ports 7891

COMMIT

IPv6

参考:https://www.sixxs.net/wiki/IPv6_Firewalling

关于为何 DHCPv6 相比 DHCPv4 要额外设置,参考:https://unix.stackexchange.com/questions/452880/what-are-the-essential-iptables-rules-for-ipv6-to-work-properly

RFC 4890 给出了针对 ICMPv6 的防火墙配置建议,由于时间有限未能细读与实现。

RFC 5095 废除了 Type 0 Routing Headers,防火墙中给予了实现。

Updated 2023-05-08: 在之前配置完 IPv6 NAT 网络后,并没有为 IPv6 配置代理。随着 IPv6 的不断推广,部分被墙网站出现了使用本地代理可以访问,透明代理无法访问的情况,包括但不限于 v2ex.com,Youtube 的视频播放等,于是也为 IPv6 配置了代理。原本使用的 Clash Premium 2022.08.26 版本的 IPv6 代理似乎有 bug,需要进行升级。由于想继续使用 AdGuardHome 统计 DNS 查询信息,故需要依赖 Clash 的 redir-host 功能(该功能在 Premium 2023.02.16 版本被弃用),因此选用 Clash Premium 2023.01.29 版本。巧合的是,Premium 2023.01.29 版本将核心版本升级到了 1.13.0,该版本添加了对 IPv6 REDIRECT 的支持(#2473),这让 IPv6 的代理成为了可能。相关改动已同步到下方规则文件中。

/etc/iptables/rules.v6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# Filter all packets that have RH0 headers. Refer to RFC 5095
-A INPUT -m rt --rt-type 0 -j DROP
-A FORWARD -m rt --rt-type 0 -j DROP
-A OUTPUT -m rt --rt-type 0 -j DROP

# Allow trusted link to INPUT and FORWARD
-A INPUT -i lo -j ACCEPT
-A INPUT -i docker0 -j ACCEPT
-A INPUT -i wlx1cbfceb110dc -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -i docker0 -j ACCEPT
-A FORWARD -i wlx1cbfceb110dc -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow DHCPv6
-A INPUT -p udp --dport 546 -d fe80::/10 -j ACCEPT

# Allow ICMPv6
-A INPUT -p icmpv6 -j ACCEPT

# Allow some server port
-A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT

COMMIT


*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:clash - [0:0]

# 内网 TCP 请求转发给 clash 链
-A PREROUTING -s fd22:41b7:e060::/64 -p tcp -j clash

# 将转发后的包源地址修改为本机地址
-A POSTROUTING -s fd22:41b7:e060::/64 -o eth0 -j MASQUERADE

# 访问内网和校园网不经过 clash
-A clash -d fd22:41b7:e060::/64 -j RETURN
-A clash -d 2402:f000::/32 -j RETURN

# 其余请求重定向至 clash 端口
-A clash -p tcp -j REDIRECT --to-ports 17891

COMMIT

使用 Clash + AdGuard Home 在树莓派软路由上搭建广告屏蔽与透明代理服务器

https://blog.centaurus99.top/2022/09/02/使用-Clash-AdGuard-Home-在树莓派软路由上搭建广告屏蔽与透明代理服务器/

作者

Centaurus99

发布于

2022-09-02

更新于

2023-05-08


评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×