翻墙后墙外网站间歇性不能访问的问题解决
梯子没问题,但是打开需要翻墙的网站,有时连的上有时却连不上的解决方法。
症状
路由器上使用了科学上网工具,本应该流畅的上网冲浪,但是实际在访问墙外网站过程中,总是有部分网站有时可以打得开,有时又打不开了,间歇性的无法访问让人十分困扰。排除梯子本身的原因,其实是IPV6地址在捣乱。
原因
当用户输入域名后,浏览器会根据电脑的网络设置向DNS服务器请求域名的IP地址,很多墙外网站和一些套了Cloudflare等CDN的网站都同时有A记录(IPv4)和AAAA记录(IPv6)。得到解析后然后再向该IP发送服务请求命令。正常来讲通过路由器科学上网,我们电脑或手机等操作终端的DNS服务器都指向路由器的DNS服务端。由路由器下发解析的IP地址,客户端再进行缓存。

我们使用的梯子,一般是不同时支持IPV4和IPV6的,要么无法通过IPV4翻墙,要么无法通过IPV6翻墙。
在现代Windows、Android等操作系统中,默认IPV6优先于IPV4,一个网站域名同时有A和AAAA记录的话,那么操作系统会自动选择IPV6协议通信。由于绝大部分梯子、机场不支持IPV6,为了能稳定的科学上网,我们一般在路由器中 DHCP/DNS
会设置 过滤IPV6 AAAA记录
,也就是不返回解析的IPV6 IP地址。
Openwrt中负责DNS解析的是Dnsmasq,如果Dnsmasq支持AAAA记录,但是发现域名没有对应的IPv6地址,那么会立即返回空的AAAA记录的;如果DNSmasq不支持AAAA记录,不去处理IPv6的解析,那么就不会返回AAAA记录,并且会超时。
目前Dnsmasq的版本都是支持AAAA记录的。如果DNS服务器没有返回AAAA记录,而A记录正常解析先到达,那么浏览器会等待AAAA记录到达,如果没有等到AAAA记录,并且没有收到回复并且超时,才会去使用A记录的IPv4去访问,给人直观印象就是卡顿或不能访问。由于上述原因,我们打开需要翻墙的网站就时灵时不灵。
所以我们需要关闭终端操作系统或路由器的IPV6支持,Windows操作系统关闭IPV6好办,Android系统关闭IPV6就不好办了,所以我们我们需要关闭路由器的IPV6支持,让终端操作系统认为网络没有IPV6环境。
解决
1、关闭ipv6
我们客户端都是通过路由器LAN口和路由器通讯的,所以只要关闭路由器LAN口IPV6支持就行。只使用IPV4就能解决墙外网站间隙性不能访问的问题。
打开路由器网络
—接口
— LAN
后面的编辑
,点击高级设置
,把IPV6分配长度
设置为“已禁用”。

然后点击DHCP服务器
—IPV6设置
, 将RA服务、DHCPV6服务、NDP代理 均设置为“已禁用”。

修改后保存
,再点保存并应用
,完成设置,这样我们家庭的整个网络环境即不再有IPV6,也就解决了访问要翻墙的网站时灵时不灵的问题了。
2、劫持所有DNS解析到路由器
lean的路由器固件默认已经劫持了局域网内dns解析至路由器。对于官方Openwrt则需要劫持DNS解析至路由器。新版Openwrt的固件由于使用了nftables,直接输入iptables命令并不好使。如果是自己编译路由器固件,可以参考建立自己的Openwrt专用脚本来解决。也可以用下列方法解决。
打开网络
—防火墙
—端口转发
,添加
自定义规则。常规设置如下图所示:

在高级设置处,排除本路由器被劫持,源 IP 地址设为!192.168.1.1
,否则它自己的流量将被重定向回它自己。使用该!符号将否定模式匹配。在源ip地址下拉框自定义处输入!192.168.1.1
回车并选中。192.168.1.1为本例中路由器地址。
最后在添加一个NAT规则
,让DNS响应路由器,而不是被认为为意外来源的DNS。点击NAT规则
并添加
。如图所示:

保存后我们就完成了全部DNS劫持。
3、加入smartdns解决
以上方法如果都不见效,可以见官方openwrt软路由可以完美IPV6启用国内国外ipv6分离彻底解决这个问题。
4、修改Chrome设置
Chrome内置的安全DNS也是导致这个问题出现的原因之一,见Chrome访问网站概率出现err_connection_closed的解决方法。
技术不断升级,请注意文章时效性。
本站文章,欢迎转发。转载请注明出处:https://www.bandwh.com/net/1149.html