Advertise a subnet route with radvd
we have set up a small IPv6 Testing network. Настройка выглядит следующим образом:
::/0
+----------+
| Firewall | Router to the public net
+----------+
| 2001:...::/106
| +----------+
+-------| SIT GW | sit Tunnel gatway to the some test users
| +----------+
|
+----------+
| Test Sys | Testsystem
+----------+
Идея состоит в том, чтобы объявить маршрут по умолчанию от брандмауэра и маршрут для подсетей SIT от сидячего шлюза. Конфигурации для Radvd:
# Firewall
interface eth0
{
AdvSendAdvert on;
route ::/0
{
};
};
# SIT Gatway
interface eth0
{
AdvSendAdvert on;
route 2001:...::/106
{
};
};
Мы захватили адв. пакеты с tcpdump и пакеты выглядят хорошо. Мы видим маршрут по умолчанию от fw, и маршрут подсети от прохода SIT.
Но если мы посмотрим на тестовую систему, то через оба шлюза будет два маршрута по умолчанию. Нет маршрута подсети. Маршрутизация не работает, конечно. Вот маршруты, которые мы получаем:
2001:.....::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 4294967295
default via fe80::baac:6fff:fe8e:XXXX dev eth0 proto kernel metric 1024 expires 0sec mtu 1500 advmss 1440 hoplimit 64
default via fe80::e415:aeff:fe12:XXXX dev eth0 proto kernel metric 1024 expires 0sec mtu 1500 advmss 1440 hoplimit 64
Любая идея?
1 ответ
Я нашел проблему.
По умолчанию ядро Linux принимает маршруты по умолчанию только через параметры объявления маршрутизатора в icmpv6.
Чтобы это исправить, должен быть установлен правильный параметр ядра:
net.ipv6.conf.all.accept_ra_rt_info_max_plen = 128
Из документов ядра:
accept_ra_rt_info_max_plen - INTEGER Максимальная длина префикса информации о маршруте в RA.
Route Information w/ prefix larger than or equal to this variable shall be ignored. Functional default: 0 if accept_ra_rtr_pref is enabled. -1 if accept_ra_rtr_pref is disabled.