坑爹的ipv6 =。=#

坑爹的ipv6 =。=#

因为老司机的墙外服务器快到期了(用的亚马逊首年免费的云服务器,真心感谢),所以找小布要了一台国外的vps,打算用来做老司机代理的墙外服务器。

昨晚把新服务器的环境都配好了,今天上线的时候发现翻墙速度超慢,但并不是所有网站都慢,比如用代理访问baidu这些倒没事,但一访问google、youtube这些墙外大厂就比蜗牛还慢。一开始我还以为是不是新服务器上stunnel或者squid的配置问题,但后来在新服务器上直接使用curl命令获取www.google.com也是超慢而curl www.hawu.me就没问题,这样推断一定是服务器本身问题。然后无意中使用wget www.google.com时,发现打印出来的输出有ipv6信息,心里打个激灵,卧槽难道是因为ipv6搞得鬼?使用curl -4 www.google.com发现果然网速正常了。然后检查ifconfig发现果然开启了ipv6。

使用wget(以及curl、squid)获取一个url地址,首先会对目标url进行域名解析,对于google这种大厂来说,域名解析会返回ipv6与ipv4地址,baidu的话,只返回ipv4地址。而由于本机系统开启了ipv6,那么wget这些程序默认会优先使用ipv6来与目标地址进行连接。但不幸的是通常我们服务器所处的网络环境(服务器到目标地址之间的路由环境)不支持ipv6,所以就会卡在这个ipv6连接上,直到超时后才会重新使用ipv4去建立连接。

屏幕快照 2016-08-25 下午10.21.24

既然猜到了故障原因,解决起来就很快了,要禁用ipv6,在/etc/sysctl.conf中添加如下两行:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

然后重启系统即可。

Leave a Reply

Your email address will not be published. Required fields are marked *