Debian / IPv6:預設路由在 1800 秒後過期,失去連接

Debian / IPv6:預設路由在 1800 秒後過期,失去連接

我在虛擬伺服器上運行 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秒後過期?我可以在哪裡配置這個?

[編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

virt-什麼說:

root@wopr:~# virt-what
kvm

[編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

答案1

看起來我錯過了 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

現在我得到了一條預設路由,該路由在啟動時不會過期。問題解決了。感謝您為我指明了正確的方向,桑德。

答案2

1800 秒聽起來像是路由器通告的預設逾時。

我的第一個猜測是網路上有一個 Cisco 路由器ipv6 nd ra suppress在介面上設定了。在該模式下,當主機要求帶有 RS 的 RA 時,路由器將發送 RA,但不會定期刷新它。主機在啟動介面時會發送 RS,這可以解釋為什麼它在啟動後會獲得預設路由。

該設定是一個奇怪的無用的思科設定。路由器應該在被詢問時+定期發送 RA(Cisco 上的預設設定),或完全不發送 ( ipv6 nd ra suppress all)。中途設定ipv6 nd ra suppress會導致像這樣的奇怪行為,不應該使用。

答案3

事實上,標記的答案是錯誤的。問題是 docker 啟用了介面上的轉發,這使得 Linux 核心忽略該特定介面上的 RA,請參閱:https://www.mattb.net.nz/blog/2011/05/12/linux-ignores-ipv6-router-advertisements-when-forwarding-is-enabled/

因此,在這種情況下正確的解決方案是設定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

而不是完全禁用路由發現。

相關內容