银鞍照白马, 飒沓如流星

翻墙方案

    network

  1. 方案评估
  2. 最终方案
  3. 网络拓扑

升级完家里路由发现一个坑点,选择设备的时候没有考虑翻墙的问题,之前 OpenWRT 的时候,翻墙非常简单,直接安装一个插件就可以了。但是 ROS 并没有一个简单的翻墙方案。早知应该选一个 X86 的硬路由,方便安装插件。

方案评估

然后就开始寻找各种解决方案,网上比较多的方案都是旁路由方案。再建一个虚拟机,部署翻墙软件,然后调整网络流向将需要翻墙的请求转发到翻墙软件上。
转发方案有几种:

  1. 将需要翻墙的设备的网关设置为虚拟机的 IP,然后在虚拟机中设置默认路由为真实路由器的 IP。
  2. 配置 ROS dhcp options,通过 dhcp 将需要翻墙的设备的网关设置为虚拟机的 IP。
  3. 配置路由表,将需要翻墙的目的 IP 转发到虚拟机。

方案一需要手动配置翻墙设备,如果翻墙故障时还得手动修改回默认网关才能正常上网,适合只有少量设备翻墙。

方案二只需要在 ROS 进行配置,但修改配置时需要清除 dhcp 缓存,并重新连接网络才能生效,翻墙时只需要一次配置,但故障时需要一条条修改,比较麻烦。

方案三路由表配置,ROS 配置比较烦琐,作为业余网工实在是能力有限,同时对路由器性能要求较高。

最终方案

  • 选用 clash 作为翻墙方案,并部署为 tun 模式,所有流量都被虚拟网卡接管。
  • smart-dns 作为 dns 方案,被墙域名和黑名单域名使用 clash 作为上游,并配置为 fake-ip 模式,所有被墙域名都会被解析为 fake-ip。
  • 使用 bird 运行 ospf 协议,将被墙 ip 和 fake-ip 进行路由通告,指定下一跳为 clash 的虚拟网卡。
  • ROS dns 设置为 smart-dns 的 IP,所有 dns 请求都会被 smart-dns 接管,同时配置网络检测,当 smart-dns 不可用时,使用默认 dns。

这套方案虽然看起来比较复杂,但是优点就是不需要设备手动设置网管,也不需要在 ROS 配置 ip set、路由规则等。ospf 协议会自动通告,效率比较高。同时当 clash、ospf 机器不可用时,通告路由会自动失效,不会影响正常上网。配置的 dns 服务也可以很好的更新被墙域名列表,还支持广告域名屏蔽。
如果代理服务器流量充足,可以考虑 ospf 通告所有境外 ip,代理更好的访问体验。因为我的小机流量比较少,所有只通告了被墙的 ip。

网络拓扑

访问被墙网站

page PV:  ・  site PV:  ・  site UV: