Рейтинг:1

Как правильно реализовать DHCPv6-PD на нисходящем маршрутизаторе с Linux?

флаг sa

Я пытаюсь настроить маршрутизатор / брандмауэр IPv6 на базе Linux DIY, чтобы сделать следующее:

  • Получите префикс /56 от интернет-провайдера на интерфейсе "wan0"
  • Предоставьте адреса /64 хостам на "lan1"
  • Предоставьте подсеть /60 нисходящему маршрутизатору на "lan2"

Мой первоначальный выбор программного обеспечения для этого был systemd-networkd, с которым первые два пункта были легкими, но третий не поддерживается (видимо, поправьте меня, если я ошибаюсь).

Я перешел на комбинацию dhcpcd, ISC-DHCP и радвд (через пакеты, поставляемые в Arch Linux, но я полагаю, что не должно быть никаких значимых отличий от исходного программного обеспечения).

dhcpcd настроен на получение этого /56 и назначение адресов:

дуид
настойчивый
вендорклассид
вариант имя_домена_серверы, имя_домена, поиск_домена
опция classless_static_routes
опция interface_mtu
опция host_name
опция rapid_commit
требуется dhcp_server_identifier
слаак частный
noipv4ll
подождите 6
подождите 4
интерфейс wan0
    ipv6rs
    ia_na 1
    ia_pd 1/::/56 lan1/0/64 lan2/2/60
интерфейс lan1
    noipv6rs
    статический ip_address=172.21.0.1
интерфейс lan2
    статический ip_address=172.22.0.1

Это приводит к тому, что интерфейсы получают адреса на основе конфигурации интернет-провайдера, и это кажется правильным.

DHCP настроен для дальнейшего объявления нисходящих адресов и подсетей:

время аренды по умолчанию 2592000;
предпочтительный срок службы 604800;
опция dhcp-renewal-time 3600;
опция dhcp-rebinding-time 7200;
разрешить запрос аренды;
dhcpv6-lease-file-name "/var/lib/dhcp/dhcpd6.leases";

подсеть6 2XXX:ГГГГ:ZZZZ:dd00::/64 {
  диапазон6 2XXX:ГГГГ:ZZZZ:dd00::2 2XXX:ГГГГ:ZZZZ:dd00:ffff:ffff:ffff:ffff;
}
подсеть6 2XXX:ГГГГ:ZZZZ:dd20::/60 {
  prefix6 2XXX:YYYY:ZZZZ:dd20:: 2XXX:YYYY:ZZZZ:dd20:: /60;
  диапазон6 2XXX:ГГГГ:ZZZZ:dd20::2 2XXX:ГГГГ:ZZZZ:dd20::ffff;
}

Это также кажется правильным, поскольку эти диапазоны и подсети в конечном итоге используются нижестоящими хостами в «lan1» и нижестоящим маршрутизатором в «lan2».

Первоначально указанная выше информация рекламировалась через следующую конфигурацию radvd:

интерфейс lan1 {
    AdvManagedFlag выключен;
    Флаг AdvOtherConfig отключен;
    AdvSendAdvert включен;
    AdvDefaultPreference высокий;
    префикс ::/64 {
        AdvOnLink включен;
        AdvAutonomous включен;
    };
};

интерфейс lan2 {
    AdvManagedFlag выключен;
    Флаг AdvOtherConfig выключен;
    AdvSendAdvert включен;
    AdvDefaultPreference высокий;
    маршрут ::/60 {
    };
};

Затем я заменил последнюю строфу интерфейса на более простую: интерфейс lan2 {}; который, я думаю, работал лучше (или, может быть, так же, но в любом случае намного короче).

Это также кажется правильным в том смысле, что хостам и маршрутизаторам необходимо настраивать свои интерфейсы.

Однако, вся эта конфигурация не позволяет сделать одну важную вещь: маршруты настроены неправильно. На этом самодельном роутере маршруты выглядят так:

$ ип -6 р
::1 dev lo proto kernel metric 256 pref medium
2XXX:YYYY:ZZZZ:dd00::/64 dev lan1 proto dhcp metric 1003 pref medium
2XXX:YYYY:ZZZZ:dd20::/60 dev lan2 proto dhcp metric 1004 pref medium
недоступен 2XXX:YYYY:ZZZZ:dd00::/56 dev lo proto dhcp metric 1001 pref medium
fe80::/64 dev lan2 proto kernel metric 256 pref средний
fe80::/64 dev wan0 proto kernel metric 256 pref средний
fe80::/64 dev lan1 proto kernel metric 256 pref средний
по умолчанию через fe80::AAAA:BBBB:CCCC:DDDD dev wan0 proto ra metric 1002 mtu 1500 pref medium

Если я вручную добавлю (с меньшей метрикой) или заменю маршрут, относящийся к подсети /60, например так: ip -6 r заменить 2XXX:YYYY:ZZZZ:dd20::/60 через fe80::DOWN:STRE:AMRO:UTER dev lan2 и наоборот на нисходящем маршрутизаторе, с локальным адресом ссылки маршрутизатора DIY, все начинает работать.

Мои вопросы:

  1. Как мне настроить маршрутизатор DIY, чтобы этот последний шаг выполнялся автоматически? (Я пытался указать разные значения в accept_ra, accept_ra_defrtr и router_solicitations в sysctl net.ipv6.conf под все и отдельные части интерфейсов, но не заметил разницы в поведении.)
  2. Могу ли я использовать какое-либо другое (с открытым исходным кодом) программное обеспечение в Linux, чтобы достичь того, чего я хочу, более простым способом? Я имею в виду, что когда мой интернет-провайдер выделяет мне другой префикс /56, мне нужно будет изменить файл конфигурации DHCP, чтобы использовать его вместо этого. Я могу (и сделаю) написать сценарий для решения этой проблемы, если нет программного обеспечения для поддержки моего варианта использования, но необходимость сделать это кажется довольно хрупкой.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.