Debian / IPv6: Маршрут по умолчанию истекает через 1800 секунд, теряется соединение

Debian / IPv6: Маршрут по умолчанию истекает через 1800 секунд, теряется соединение

Я использую Debian 8 на vServer. После установки 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]

Машина работает на хосте KVM, размещенном netcup.de. Она использует драйвер 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] Похоже, я пропустил 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

решение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

Теперь я получаю маршрут по умолчанию, который не истекает во время загрузки. Проблема решена. Спасибо, что указал мне правильное направление, Сандер.

решение2

1800 секунд — это похоже на тайм-аут по умолчанию для объявления маршрутизатора.

Моя первая догадка заключается в том, что в сети есть маршрутизатор Cisco, настроенный ipv6 nd ra suppressна интерфейсе. В этом режиме маршрутизатор будет отправлять RA, когда хост запрашивает его с RS, но не обновляет его регулярно. Хост отправляет 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

вместо того, чтобы полностью отключить обнаружение маршрута.

Связанный контент