OpenWrt做主路由,Apple TV做旁路由,自动DHCP下发网关和DNS
条评论家里使用桥接+OpenWrt 很长时间,用过各种科学上网工具,PassWall、HomeProxy、SSR-Plus、OpenClash、PassWall 2 。每个工具,基于 Luci 做配置,需要学习的信息太多了,对于普通用户真的是太难,不看个三五个教程,根本无从开始,即使配置完,能科学上网了,也能分流了,各种 DNS 泄露、分流规则维护、负载均衡也很麻烦。特别是 OpenClash 这种复杂度的工具,完全谈不上好用,看一眼都头大。
需求
我的需求其实很简单:
- 需要科学上网的设备很少:电脑,手机,大概少数几台日常使用的设备,不超过 5 台。
- 不需要科学上网的设备很多:小米各种开关插头全家桶、电视盒子、NAS、自建相册、 PT 下载
- 有公网 IP:自己搭建一些外网访问的服务。
- 需要 IPV6:有基于 IPV6 的网络电视需求。
然而原来用 OpenWrt 做主路由经常遇到的问题:
- 分流规则用网上的,但是有些个人的网站还要手工配置
- DNS 泄露,导致 GPT 等一些服务,时好时坏
- 修改规则,主路由会重新配置防火墙,所有的设备可能都会中断一下
- 如果 Luci 插件不稳定,因为配置翻墙导致 OpenWrt 挂掉,全家都不能上网
- CF 这种白嫖的 vless 服务,如果配置了负载均衡,更新麻烦,因为 CF 优选 IP 会经常变动
- 很多代理插件,开启 IPV6 就会有莫名其妙的问题
方案
最近,调整家庭网络方案,最终选择 Apple TV 旁路由解决所有网络问题。这个方案的优点:
- 主路由只做拨号、端口转发、DHCP ,基本一年配置 1 次,基本永远不需要重启
- AppleTV 做旁路由,使用 Shadowrocket 做代理,通过 iCloud 同步服务器、代理、规则、分组等等所有数据,这个界面比任何 Luci 插件体验好太多太多,还有 Surge,QX 可选
- 只有手机和电脑走代理流量,NAS 等服务完全不走代理,杜绝了 PT 下载分流的问题。
- 即使 NAS 有不同的服务,也可以通过 macvlan 的方式,单独分配网关。例如 Nas 上的 qBittorrent 直连,Nas 上的虚拟机走代理
- 按标签配置 DHCP 规则,所有新入网设备也可以自动分配网关,无需手动调整
- 修改科学上网规则和服务器,不会影响任何正常上网的设备。
- 即使 Shadowrocket 关闭了,所有设备还是可以正常上国内网站。毕竟 AppleTV 当网关,也不影响国内上网。
综合看下来,这个方案只有优点,毫无缺点,最终网络结构如下:
配置
OpenWrt
从 https://openwrt.ai/ 下载对应个固件,自行编译一个纯净版,配置好自己的拨号账号和密码,这样刷完少一个设置,基本通电就可以正常上网了,我添加了一个 ttyd 终端,去掉了一个风扇管理。
参考 上海联通改完桥接后配置Openwrt的拨号,开启IPV6 进行拨号、IPV6 相关配置。最终获得这样的网络环境,有公网 IP,每个设备有独立的 IPV6 地址。
修改 DHCP 相关配置,为 AppleTV 绑定一个固定 IP,例如:192.168.11.10,方便其它设备配置网关。同时为其它需要科学上网的设备,添加标签,例如:proxy。结果如下图,我因为需要科学上网的设备少,所以这么配,如果不要代理的少,可以只配 Direct 的标签。
修改 LAN 口的 DHCP 设置,高级选项中,添加自动分配的规则。意思是把标签为 proxy 的设备,网关和 DNS 设置为 AppleTV 的 IP 地址。3 表示网关,6 表示 DNS,设备断开重连,即可更新网关和 DNS 信息。
1 | tag:proxy,3,192.168.11.10 |
(备注:tag: !proxy, 3,192.168.11.10 ,表示给没有 proxy 的标签,配置网关)
配置 AppleTV
在 AppleTV 上安装 Shadowrocket,开始代理服务,即可开始科学上网,Shadowrocket 防止 DNS 泄漏的方法参考: 跟着不良林,处理DNS泄露问题,原则就是国区网站和 IP 都直连,最终不确定的,全部走代理。
自定义规则
Shadowrocket 配置一些分组规则、自动回退、再加自动更新,基本可以免维护翻墙了,即使白嫖 CF 这种频繁换 IP 的问题也不怕了,反正会自动更新,选择区域可以使用正则方式,配置好基本也一劳永逸。
网络上能找到的规则,无法包含自己所有的需求,可以开一个 github 的项目,更新自己的一些特殊规则。制作自己的规则集,例如:https://github.com/svcvit/sr-rule
我自己的 Shadowrocket 配置信息,这样保证一些不在标准规则集以外的内容,也可以同步更新。
1 | https://raw.githubusercontent.com/svcvit/sr-rule/main/shadowrocket/nodnsleak-pk.ini |
规则集中添加 2 个 RULE-SET,用于标记需要走直连的规则,全部加到配置文件中,这样就可以通过 git 的方式,自行维护自己的规则集了。
1 | RULE-SET,https://raw.githubusercontent.com/svcvit/sr-rule/main/shadowrocket/DirectDomain.list,DIRECT |