家里使用桥接+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
2
tag:proxy,3,192.168.11.10
tag:proxy,6,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
2
RULE-SET,https://raw.githubusercontent.com/svcvit/sr-rule/main/shadowrocket/DirectDomain.list,DIRECT
RULE-SET,https://raw.githubusercontent.com/svcvit/sr-rule/main/shadowrocket/DirectIP.list,DIRECT