Linux

使用 radvd 通告子網路由

  • October 12, 2012

我們已經建立了一個小型 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.

引用自:https://serverfault.com/questions/437271