Linux
使用 radvd 通告子網路由
我們已經建立了一個小型 IPv6 測試網路。設置如下所示:
::/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
任何的想法?
我發現了問題。
預設情況下,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.