Debian / IPv6:默认路由在1800秒后过期,失去了连接能力


10

我在vServer上运行Debian 8。安装docker并启用IPv6后,我注意到了一些奇怪的地方。我不知道Docker是否与此有关,只是我在安装它后才注意到此问题。

我的默认路由配置为在ca之后失效。1800秒 超时后,我实际上消失了。这是我(显然)松开IPv6连接的时候。

root@wopr:~#  ip -6 route
xxxx:yyyy:zzz:xxxx::/64 dev eth0  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256
fe80::/64 dev br-5c1ce68ea951  proto kernel  metric 256
fe80::/64 dev br-61f6bbfdbe87  proto kernel  metric 256
[a lot more routed for my docker containers]
default via fe80::1 dev eth0  proto ra  metric 1024  expires 1259sec hoplimit 64

为什么将溃败配置为在1800 s后过期?我在哪里可以配置?

[编辑2016-05-14 16:08]

手动添加默认路由似乎可以正常工作。它保持不变。但是我需要在启动后有一个非到期的路由。

[编辑2016-05-14 16:13]

机器正在由netcup.de托管的KVM主机上运行。按照我的提供商的建议,它正在使用virtio驱动程序。

root@wopr:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback
iface lo inet6 loopback

auto eth0
iface eth0 inet dhcp

iface eth0 inet6 static
       address xxxx:yyyy:zzz:xxxx::1
       netmask 64
       gateway fe80::1

病毒说什么:

root@wopr:~# virt-what
kvm

[edit 2016-05-14 15:34] 好像我错过了net.ipv6.conf.default.autoconf设置为1的内容。

root@wopr:~# cat /etc/sysctl.d/ipv6.conf
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.default.autoconf=0
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.eth0.accept_ra=0
net.ipv6.conf.eth0.autoconf=0

除了docker之外,这台机器上没有其他运行的应用程序。
lajuette

Answers:


8

看来我错过了net.ipv6.conf.default.autoconf设置为1的问题。在/etc/sysctl.d中添加文件以在启动时取消此操作为我解决了问题:

root@wopr:~# cat /etc/sysctl.d/ipv6.conf
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.default.autoconf=0
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.eth0.accept_ra=0
net.ipv6.conf.eth0.autoconf=0

现在,我得到了一条在启动时不会失效的默认路线。问题解决了。桑德,感谢您为我指明了正确的方向。


终于我找到了解决方案!
schnawel007

4

1800秒听起来像是路由器广告的默认超时。

我的第一个猜测是在网络上配置了ipv6 nd ra suppress该接口的Cisco路由器。在这种模式下,当主机请求带有RS的路由器时,路由器将发出RA,但不会定期刷新它。主机在启动接口时发送RS,这将解释为什么引导后它会获得默认路由。

该设置是一个奇怪而无用的思科设置。路由器应按要求定期发送RA,这是Cisco的默认设置),或者根本不发送(ipv6 nd ra suppress all)。中途设置ipv6 nd ra suppress会导致类似这样的怪异行为,因此不应使用。


root @ wopr:〜#cat / proc / sys / net / ipv6 / conf / eth0 / accept_ra产生0。我想这意味着eth0忽略了RA?
lajuette

1
是的,在这种情况下,它不使用RA。可能已经accept_ra=0设置了一个。
桑德·斯特凡

0

实际上,标记的答案是错误的。问题在于,泊坞窗启用了接口上的转发功能,并使Linux内核忽略该特定接口上的RA,请参阅:https : //www.mattb.net.nz/blog/2011/05/12/linux-ignores -ipv6-路由器广告-启用转发时/

因此,在这种情况下,正确的解决方案是设置accept_ra2

# cat /etc/sysctl.d/ipv6.conf
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.eth0.accept_ra=2

而不是完全禁用路由发现。


我添加了此内容,但仍在运行docker的主机未获得默认路由另一个非docker主机却获得了默认路由。
Lenne
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.