
私は vServer で Debian 8 を実行しています。docker をインストールして IPv6 を有効にした後、奇妙なことに気付きました。docker がこれに関係しているかどうかはわかりませんが、インストール後にこの問題に気付いただけです。
私のデフォルト ルートは、約 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-what はこう言っています:
root@wopr:~# virt-what
kvm
[編集 2016-05-14 15:34]
1 に設定されていることを見逃していたようです。net.ipv6.conf.default.autoconf
起動時にこれを抑制するために、/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
答え1
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
これで、起動時に期限切れにならないデフォルトのルートを取得できました。問題は解決しました。正しい方向を示してくれてありがとう、Sander。
答え2
1800 秒は、ルーター広告のデフォルトのタイムアウトのようです。
私の最初の推測は、ネットワーク上にインターフェイスで設定された Cisco ルータがあるということですipv6 nd ra suppress
。そのモードでは、ホストが RS で RA を要求するとルータは RA を送信しますが、定期的に更新しません。ホストはインターフェイスを起動するときに RS を送信します。これが、起動後にデフォルト ルートを取得する理由です。
この設定は、奇妙で役に立たない Cisco 設定です。ルータは、要求されたときに 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_ra
に設定することです2
。
# 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
ルート検出を完全に無効にする代わりに。