点击关注我的Telegram群组和微信公众号

MENU

使用OPNsense在路由器上解决AT&T夜间高峰期对中国方向网络不可用的问题

2022 年 09 月 09 日 • 阅读: 220 • 网络,教程

本文是又一篇记录我在处理家庭网络问题时的文章,如果这篇文章对你有用,可以使用下面一行我的NordVPN推荐链接注册以支持我
NordVPN: https://ref.nordvpn.com/ibIHHgVsFBQ

前言

近期搬了一次家,摆脱了Comcast那个逆天的1200Mbps下行35Mbps上行的套餐,换到了AT&T 1Gbps上下对等的网络。然而就和网络上所有人都说的一样,AT&T对中国方向的网络并不好,很多国内常用的服务都难以使用,尤其是在夜间高峰时期。因为以前家中IP被墙的时候网络情况和AT&T这一问题的表现一致,所以一开始我以为是AT&T的IP段被墙,但后来的测试发现AT&T网络问题的来源并非如此。
一次很糟糕的经历是当我要修改某个开源项目在国内的云端部署时,腾讯云控制台中的所有操作都因无法连接到服务器而失败,腾讯云所有的API我也都无法在本地进行操作。这次经历也让我发现了一个用于测试的域名 ping.cloud.tencent.com,其会被解析到腾讯云的一个固定的广东IP上,在高峰期网络不正常时该IP是无法访问的。
网络不正常的tracert
而在一般时段时,通过tracert该域名/IP时,可以看到AT&T使用的对中国网络线路为AS4134
网络不正常的tracert
而问题的关键是在192.205.32.34这个AT&T的网关上,在高峰期时,数据包在经过该网关时会丢包,进而导致用户无法连接到目标服务器。我们无法获取到AT&T所拥有的数据,所以无法知道这个网关上究竟发生了什么导致了丢包,因此只能推测网关所拥有的对中国方向带宽不足,导致了夜间对中国网络访问性能不佳的问题。

解决问题

既然我们已经知道了问题出现在了美国运营商这一侧,那么解决思路就很简单了,让对中国服务器的请求从代理网络发出以避开AT&T的网络线路即可。这个代理甚至不需要使用国内的服务器,只需要选择一个到中国网络正常的美国代理即可,这样既不会让我们的IP在全球到处乱飞,也可以显著地降低代理成本。解决步骤包括三步:中国IP的判断、代理网络设置、修改对中国方向网络路由。在这里,我通过在本地路由器的OPNsense系统上进行处理来完成这些步骤。

GeoIP

  • 首先,我们需要注册一个 MaxMind 帐号以访问其提供的免费 GeoIP 数据库
  • 在帐号后台,我们进入Manage License Keys菜单
    Manage Licnese Keys 菜单
  • 在授权码页面,我们点击 Generate new lincense key以创建一个授权码
    创建授权码
  • 这样我们就获取到了这个授权码,复制并保存它
    获取授权码
  • 回到OPNsense的网页管理界面,我们从侧栏进入Firewall内的Aliases菜单
  • 点击并切换到GeoIP settings标签页

    • Url一栏中我们填入https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country-CSV&license_key=YOUR_LICENSE_KEY&suffix=zip
    • 其中,你需要将YOUR_LICENSE_KEY部分修改为你刚刚获取到的授权码
    • 这个Url也可以在 MaxMind 帐号后台Download Files菜单中通过点击GeoLite2 Country: CSV Format数据库一栏中的Get Permalinks按钮获得
  • 点击Apply按钮,保存你的OPNsense GeoIP设置。右上角的Table Entries数量此时开始也将会逐渐增加
    保存GeoIP设置
  • 点击并进入Aliases标签页,点击右下角的增加按钮
  • 在别名编辑窗口:

    • 为别名设置一个名称,此处我们命名为China-list-rule
    • Type选择为GeoIP
    • Content中的亚洲分类中选中中国
    • 点击保存
      别名设置
  • 至此,我们就设置了一个过滤中国IP的别名规则

设置代理

  • 在这里,我选择NordVPN作为代理,因为它们对OPNsense有不错的支持
  • 根据 NordVPN 的官方文档,在你的OPNsense上连接到其VPN节点
  • 完成NordVPN在OPNsense上的配置后,在VPN --> OpenVPN --> Connection Status菜单中,你应该看到所连接的NordVPN服务器状态为up
    NordVPN连接成功
  • 你的路由器上将增加一个NordVPN所属的Interface,以及一个其所属的Gateway
    NordVPN设置
  • 为了防止NordVPN侧出现网络问题(掉线之类的情况),我们要为其在路由器上的网关设置一个故障转移规则
  • 在OPNsense网页管理页面上,从侧栏进入System --> Gateways --> Single菜单

    • 在NordVPN和AT&T网关上分别设置一个Monitor IP以启用对网关的监控
  • 在OPNsense网页管理页面上,从侧栏进入System --> Gateways --> Groups菜单
  • 点击加号以创建一个新的组合网关

    • 我们将其命名为NordVPN_Failover
    • 我们将NordVPN所属网关设置为 Tier 1
    • 将AT&T的网关设置为 Tier 2
    • Trigger level选择设置为Member Down
    • 填写一个合适的描述,随后保存
      创建组合网关

修改中国方向路由

  • 至此,我们在路由器上拥有了一个中国GeoIP规则库以及一个NordVPN网关,接下来我们只需要让对中国服务器的请求由NordVPN网关处理即可解决问题
  • 在OPNsense侧栏中进入Firewall --> Rules --> LAN菜单
  • 点击加号按钮以创建一个新的规则

    • 保持Apply the action immediately on match被勾选
    • Direction设置为out
    • Protocol保持设置为any
    • Source设置为LAN net
    • Destination设置为你刚刚创建的中国GeoIP别名,即China_list_rule
    • 勾选log
    • Gateway上选择你刚刚创建的NordVPN故障转移组合网关,即NordVPN_Failover

      • 如果你没有执行上述创建故障转移网关的步骤,这里选择 NordVPN IPv4 Interface 即可
    • 点击保存以创建该路由规则
  • 创建另一个规则,和前一个规则内容完全一样,除了将Direction设置为in
  • 点击修改默认的,使用WAN_DHCP网关的路由规则

    • 点击以取消勾选 Apply the action immediately on match
    • 保存该规则
  • 至此,你的路由该如下图所示,在该路由配置下:

    • 当目标服务器IP在中国GeoIP列表中时,数据包将由NordVPN网关处理
    • 当目标服务器IP不在中国GeoIP列表中时,数据包由默认的AT&T网关处理
    • 当NordVPN网关掉线时,即使是中国IP,数据包也将由AT&T网关处理

路由表

效果

此时,我们再次进行tracert测试,可以发现对中国的路由已经开始由NordVPN处理了;在高峰期,国内的服务器可以正常访问了。
对中国的路由
对亚洲其他地区的访问则仍然使用的是AT&T原有的路由
对日本Lindo的路由

返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码