I am LAZY bones? AN ancient AND boring SITE

2011年 02月 10日 的归档

IPv6路由错误引起的怪异问题

我那Ubuntu源服务器(u.srt.cn),最近出现了一些很诡异的错误。
比如:之前设置的crontab同步linux.deepin.org的iso镜像,已经有一段时间没有成功过了,手工执行rsync,却发现连的似乎是自己,因为banner都出来“Thanks for using SRT ubuntu mirror.”了,但是ping linux.deepin.org 却又能得到正确的结果。
再比如之前我设置了用公钥可以ssh登录另外一台机器,但是现在却提示我输入密码。
排查了许久之后,发现了一个问题,很多(但不是全部)公网的域名虽然ping的时候对应了正确的ip,但是正在使用(比如上面的rsync或ssh)的时候,好像都指到本地了。
再后来,无意之中,发现用ping6 去ping那些有问题的域名,返回的都是 localhost(::1),于是终于知道怎么回事了:系统用IPv6去访问那些域名了,而那些域名的IPv6解析不正确。
为了验证这点,只需要把系统的IPv6彻底禁用再试试就成了,但是服务器也是ubuntu,而ubuntu最新的版本都已经把IPv6编译进内核了,不能通过rmmod来禁用IPv6了,要完全禁用需要修改grub的配置,给内核传参数才行(方法见这里)。
这显然太麻烦了,其实暂时禁用一下还是有方便的办法的,就是这样:

echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6

执行完以后,可以执行

ip a | grep inet6

来确认已经禁用成功了,如果这命令没有输出就OK了。
然后现在再用ping6的话,会提示connect: Network is unreachable
再去试试之前的rsync和ssh,果然都正常了。

现在我担心的是:IPv4地址不都已经枯竭了吗?接下来该怎么办呢?