OSPF 路由器(在 debian 上使用 BIRD)將彼此辨識為鄰居,但無法相互 ping
我使用虛擬盒創建了一個“線”拓撲 - 創建 4 台機器並使用內部網路在每台機器之間建立單獨的連結 - R1 (eth0, 10.0.1.1) <-> (eth0, 10.0.2.1) R2 (eth2, 10.0 .2.2) <-> (eth0, 10.0.3.1) R3 (eth2, 10.0.3.2) <-> (eth0, 10.0.4.1) R4。我使用以下方法啟用了 ipv4 的數據包轉發:
sudo sysctl net.ipv4.ip_forward=1
/etc/bird.conf 中 R2 和 R3 的 OSPF 配置如下所示:
protocol ospf MyOSPF { tick 2; rfc1583compat yes; area 0.0.0.0 { stub no; interface "eth2" { hello 9; retransmit 6; cost 10; transmit delay 5; dead count 5; wait 50; type broadcast; }; interface "eth0" { hello 9; retransmit 6; cost 10; transmit delay 5; dead count 5; wait 50; type broadcast; }; }; }
當我輸入birdc並輸入
ospf show topology
和
ospf show neighbors
似乎所有路由器都看到正確的拓撲,將相鄰路由器辨識為鄰居並正確計算成本。但是,除非手動指定介面(ping -I eth2 10.0.3.1),否則無法從 R2 ping R3。R1 和 R2 的情況並非如此,它們的兩端都使用了 eth0。
這是 /etc/network/interfaces 在 R2 上的樣子:
allow-hotplug eth0 iface eth0 inet static address 10.0.2.1 auto eth1 #this is the bridged adapter used to ssh to the vm from the host iface eth1 inet dhcp allow-hotplug eth2 iface eth2 inet static address 10.0.2.2
我有點困惑,問題出在介面的配置還是路由協議的配置上。
這是輸出
ip link
和
ip route
每台機器
我想到了!設置不起作用有幾個原因 - 首先,地址設置不正確。應該為介面分配以下(例如)地址以使事情正常工作:
R1 (eth0, 10.0.1.1) <-> (eth0, 10.0.1.2) R2 (eth2, 10.0.2.1) <-> (eth0, 10.0.2.2) R3 (eth2, 10.0.3.1) <-> (eth0, 10.0.3.2) R4
為了使每兩個相鄰路由器上彼此面對的兩個介面位於同一廣播域(/24 子網)上。每個介面上的網路遮罩應設置為 255.255.255.0。
至於 BIRD 中的 OSPF 配置,必須將“網路”塊添加到該區域,以便指定路由器應該交換什麼樣的資訊(特別是路由器正在談論的網路)。在這種情況下,由於我們在每一端都有一個 /24 (255.255.255.0) 網路,我們可以在 networks 語句中使用 /16 網路 (255.255.0.0) 在兩個相鄰的 /24 網路(10.0.1 和 10.0)之間交換資訊.2 例如)。所以最後它看起來像這樣:
protocol ospf MyOSPF { tick 2; rfc1583compat yes; area 0.0.0.0 { networks { 10.0.0.0/16; }; stub no; interface "eth2" { hello 9; retransmit 6; cost 10; transmit delay 5; dead count 5; wait 50; type broadcast; }; interface "eth0" { hello 9; retransmit 6; cost 10; transmit delay 5; dead count 5; wait 50; type broadcast; }; }; }
來自bird ospf 配置手冊networks {set} - 區域IP 範圍的定義。這用於摘要 LSA 起源。隱藏網路不會傳播到其他區域。