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