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

10

Я использую Debian 8 на vServer. После установки докера и включения IPv6 я заметил кое-что странное. Я не знаю, имеет ли docker какое-либо отношение к этому, просто я заметил эту проблему после установки.

Мой маршрут по умолчанию настроен на истечение после ок. 1800secs. Я на самом деле исчезает после этого тайм-аута. Это когда я (очевидно) теряю связь 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 с? Где я могу настроить это?

[edit 2016-05-14 16:08]

Добавление маршрута по умолчанию вручную, кажется, работает просто отлично. Это остается на месте. Но мне нужно иметь не истекающий маршрут после загрузки.

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

вирт-что говорит:

root@wopr:~# virt-what
kvm

[edit 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
lajuette
источник
За исключением докера, на этой машине не так много других приложений.
Лаюетт

Ответы:

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

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

lajuette
источник
Наконец-то я получил решение!
schnawel007
4

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

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

Эта настройка является странной бесполезной настройкой Cisco. Маршрутизатор должен либо отправлять 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?
Лаюетт
1
Да, в этом случае он не использует RA. Возможно, он уже принял один, прежде чем accept_ra=0будет установлен.
Сандер Штеффанн
0

На самом деле, помеченный ответ неверен. Проблема в том, что docker включает переадресацию на интерфейс (ы), и это заставляет ядро ​​Linux игнорировать RA на этом конкретном интерфейсе, см .: https://www.mattb.net.nz/blog/2011/05/12/linux-ignores -ipv6-маршрутизатор-объявления-когда-экспедиторская-в-включен /

Таким образом, правильное решение в данном случае заключается в набор 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

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

oerdnj
источник
Я добавил это, тем не менее хост, на котором работает докер, не получает маршрут по умолчанию. Другой хост, не имеющий докера, получает маршрут по умолчанию.
Ленн