本文是又一篇记录我在处理家庭网络问题时的文章,如果这篇文章对你有用,可以使用下面一行我的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该域名/IP时,可以看到AT&T使用的对中国网络线路为AS4134
而问题的关键是在192.205.32.34
这个AT&T的网关上,在高峰期时,数据包在经过该网关时会丢包,进而导致用户无法连接到目标服务器。我们无法获取到AT&T所拥有的数据,所以无法知道这个网关上究竟发生了什么导致了丢包,因此只能推测网关所拥有的对中国方向带宽不足,导致了夜间对中国网络访问性能不佳的问题。
解决问题
既然我们已经知道了问题出现在了美国运营商这一侧,那么解决思路就很简单了,让对中国服务器的请求从代理网络发出以避开AT&T的网络线路即可。这个代理甚至不需要使用国内的服务器,只需要选择一个到中国网络正常的美国代理即可,这样既不会让我们的IP在全球到处乱飞,也可以显著地降低代理成本。解决步骤包括三步:中国IP的判断、代理网络设置、修改对中国方向网络路由。在这里,我通过在本地路由器的OPNsense系统上进行处理来完成这些步骤。
GeoIP
- 首先,我们需要注册一个 MaxMind 帐号以访问其提供的免费 GeoIP 数据库
- 在帐号后台,我们进入
Manage License 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数量此时开始也将会逐渐增加
- 点击并进入
Aliases
标签页,点击右下角的增加按钮 在别名编辑窗口:
- 为别名设置一个名称,此处我们命名为
China-list-rule
Type
选择为GeoIP
- 在
Content
中的亚洲分类中选中中国 - 点击保存
- 为别名设置一个名称,此处我们命名为
- 至此,我们就设置了一个过滤中国IP的别名规则
设置代理
- 在这里,我选择NordVPN作为代理,因为它们对OPNsense有不错的支持
- 根据 NordVPN 的官方文档,在你的OPNsense上连接到其VPN节点
- 完成NordVPN在OPNsense上的配置后,在
VPN --> OpenVPN --> Connection Status
菜单中,你应该看到所连接的NordVPN服务器状态为up
- 你的路由器上将增加一个NordVPN所属的Interface,以及一个其所属的Gateway
- 为了防止NordVPN侧出现网络问题(掉线之类的情况),我们要为其在路由器上的网关设置一个故障转移规则
在OPNsense网页管理页面上,从侧栏进入
System --> Gateways --> Single
菜单- 在NordVPN和AT&T网关上分别设置一个
Monitor IP
以启用对网关的监控
- 在NordVPN和AT&T网关上分别设置一个
- 在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原有的路由
转载请标注来源