Routing

如何配置 BIRD 路由器以與不同子網上的鄰居通信?

  • July 25, 2016

介紹

我正在嘗試在執行BIRD routing daemon 的兩台主機之間建立使用 RIPv2 協議的基本通信。

我有一個有地址Host A的介面。 我有另一台主機,其介面具有 address 。這些介面通過電纜直接連接。如果我在兩台機器上添加靜態路由,我可以在兩台機器之間 ping 通。enp0``10.0.1.50/24
Host B``enp1``10.1.1.25/24

配置文件

我有以下bird.conf內容Host A

protocol kernel {
       learn;                  # Learn all alien routes from the kernel
       persist;                # Don't remove routes on bird shutdown
       scan time 20;           # Scan kernel routing table every 20 seconds
       export all;             # Default is export none
}

protocol device {
   scan time 10;           # Scan interfaces every 10 seconds
}

protocol direct {
       interface "enp0"
}

protocol rip MyRIP {    
   export all;
   import all;
   interface "enp0" { mode multicast;};
}

bird.confonHost B是相同的,除了替換enp0enp1

初步結果

在兩台主機上啟動鳥守護程序後,我可以做一個tcpdump -ni enp0 -vv

13:21:41.943537 IP (tos 0xc0, ttl 1, id 4933, offset 0, flags [none], proto UDP (17), length 132)
   10.1.1.25.520 > 224.0.0.9.7742: [udp sum ok] UDP, length 104
13:21:41.943704 IP (tos 0xc0, ttl 1, id 150, offset 0, flags [none], proto UDP (17), length 272)
   10.0.1.50.520 > 224.0.0.9.7742: [bad udp cksum 0xec48 -> 0x1219!] UDP, length 244

我可以跳入birdcl命令行並執行show rip neighbors並獲得一個空表。

讓它發揮作用

如果我將地址設置在同一個子網上,我可以執行show rip neighbors並且可以10.0.1.50在我的鄰居列表中看到。

包起來

如果鏈路的兩端不在同一個子網上,如何讓這些路由器將彼此列為鄰居?

我必須對網路如何工作有某種不正確的心理畫面,路由器是否不需要一直與不在同一子網上的鄰居通信?

我沒有掛斷特定於 BIRD 的答案。

早在遠古時代,網路上的協議比 TCP/IP 還多,我執行 RIP。那時,它是 RIPv1,它使用廣播。網路拓撲看起來像這樣:

[10.0.0.0/24] <-- router --> [10.0.1.0/24] <-- router --> [10.0.2.0/24]
[10.0.3.0/24] <-- router ------^        ^---- router  --> [10.0.4.0/24]
[10.0.5.0/24] <-- router -------^      ^----- router  --> [10.0.6.0/24]

所有路由器將共享一個只有路由器的子網。對於兩個路由器設置,它們之間有一根電纜,就像你正在做的那樣。對於較大的設置,將有一個執行子網的快速網路設備(希望是交換機,但並非總是如此)。這樣一來,一切都在 2 跳之外,並且路由收斂變得簡單。這就是我們當時所擁有的。

然後是 RIPv2 和多播,擁有更多的躍點不太容易出現收斂問題。如果將多播 TTL 設置為超過躍點直徑的 +1,則每個路由器都有效地直接向其他每個路由器通告,從而加快收斂速度。

不過,要考慮的關鍵事項是:查看 TCPDUMP 輸出中的源地址。

10.1.1.25.520 > 224.0.0.9.7742
10.0.1.50.520 > 224.0.0.9.7742

路由器10.0.1.50已被告知,該路由器10.1.1.25有一個10.1.1.0/24本地子網。但是,路由器 at10.0.1.50沒有到 address 的路由10.1.1.25,因此它不會將其添加到表中。多播是您的公告頻道,但它不能承載路由流量。

一切都沒有失去。

如果由於某種原因您只能使用單根電纜,您可以定義虛擬介面。在enp0.010.3.1.0/24 和 10.0.1.0/24enp0.1上的位置。這樣您就可以使用 10.3.1.0/24 作為您的“路由網路”。

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