Назад | Перейти на главную страницу

Можно ли заставить Linux соблюдать предпочтения IPv6 Route Advertising?

Итог: я не могу заставить Linux-сервер получать RA для использования RFC4191 Значение «Default Router Preference» для предпочтения маршрутов с более высоким приоритетом. Вместо этого, тот маршрут по умолчанию, который он изучил первым, является тем, что он использует, во вред всем. Мне не хватает параметра конфигурации или обновления ядра, или я просто обреченный на все времена?

Длинная версия:

У меня есть сеть со шлюзом по умолчанию HA (VRRP / keepalived). Интернет-провайдер восходящего потока направляет / 48 к шлюзу, а затем я вырезаю блоки / 64 для назначения машинам в моей инфраструктуре (чтобы они могли назначать глобально маршрутизируемые адреса контейнерам, которые они запускают). Затем каждая машина объявляет свой контейнер / 64 остальной части сети через radvd (с AdvDefaultLifetime 0 чтобы показать, что у него нет маршрута по умолчанию). Коробки шлюза также у них запущены контейнеры, поэтому у них есть собственный / 64 и он рекламируется, но с AdvDefaultLifetime 30 потому что шлюзы делать иметь маршрут по умолчанию.

Я хочу иметь возможность использовать межсетевой экран с отслеживанием состояния на шлюзе, поэтому весь трафик в обоих направлениях должен проходить через одного и того же члена пары шлюзов высокой доступности. Ничего страшного, я могу это сделать - один keepalived имеет более высокий приоритет, я просто говорю radvd на этой машине также анонсировать свой маршрут по умолчанию с более высоким приоритетом. Таким образом, если «основная» машина упадет с места, все будет перенаправлено на другую машину, и все будет в порядке.

Кроме ... Linux, похоже, не делать что-нибудь со значением предпочтения маршрутизатора. Я пресмыкался в исходниках ядра, и хотя он тщательно сохраняет значение в флагах маршрута, и rt6_score_route даже выглядит так что-то с предпочтением, поведение, которое я наблюдал в производственной среде (Ubuntu 14.04 с ядром 3.13), заключается в том, что любой маршрут по умолчанию, который был изучен первым, является тем, который используется, независимо от того, какой из них имеет более высокое предпочтение.

Помимо взлома keepalived для изменения файлов конфигурации radvd (один с AdvDefaultLifetime 30, когда MASTERи еще один с AdvDefaultLifetime 0 когда BACKUP) и перезагружая radvd всякий раз, когда keepalived повышает / понижает роль, что я могу сделать, чтобы обеспечить предпочтение маршрутам с более высоким приоритетом в RA?

В последних ядрах Linux есть функция, о которой вы просите. Если вы настраиваете ядро, установите CONFIG_IPV6_ROUTER_PREF, видеть Networking support -> Networking options -> The IPv6 protocol -> Router Preference (RFC 4191) support. Вам может потребоваться перекомпилировать ядро, если в вашем дистрибутиве по умолчанию эта функция отключена.