使用 Quagga BGP 的多宿主多路由器設置
我在 Ubuntu 10.04 LTS 上使用 Quagga 作為多宿主和多路由器設置中的 BGP 路由器做一些實驗室。目前我已經在我的實驗室中設置了一個假的“ISP”路由器,並讓我的兩個 Quagga 路由器在它後面與 iBGP 共享路由,我遇到了一些我似乎無法找到答案的問題。
我的網路設置如下所示。
R1 和 R2 連接到一個連結網路 (172.26.0.0/30),並且都連接到同一個共享子網 172.26.1.0/24。連結網路和共享子網位於不同的 VLAN 上。
R1 和 R2 將分別連接到一個 ISP,並將向其 ISP 對等方宣布 172.26.0.0/23。它將在內部進行子網劃分,但為了避免被過濾,將宣布更大的子網。
路由器將使用 uCARP 在它們自己之間共享一個浮動 IP(如果一個路由器出現故障,另一個應該接管)。
現在到我的問題。如果我從 ISP1 發出 traceroute 或 ping 到 ip 172.26.1.1,一切順利,我得到回复。如果我對 ip 172.26.1.2 做同樣的事情,我會收到請求超時。
我看到路由器上有 172.26.1.2 連接到它的介面的 ICMP 回應要求,但它就像它不知道將回復發送到哪裡。
我曾試圖Google尋求答案,但空手而歸。嘗試了一些解決方案,但似乎沒有任何效果。
我的網路設計有問題嗎?我知道,如果我使用與共享子網和連結網相同的子網,一切正常,除了路由器後面的機器在使用 ping 時收到 ICMP 重定向消息,我認為這不是一個好的實現。
我認為發生的是,發往 172.26.1.2 的流量通過 R1 上的 VLAN15 介面定向,當 R2(分配有 172.26.1.2)時,它不使用路由到達發送 ICMP Echo 的 ISP1 ip要求。
我可以從每個路由器訪問每個網路(例如,我可以訪問 ISP1 192.168.0.1 介面),但如果我使用 172.26.1.2 作為 R2 上的源,則不能。在 R1 上,我可以毫無問題地使用 172.26.1.1 作為源。
路由器的 IP 計劃。
ISP1
- eth0 = 192.168.0.1
- eth1 = 10.10.0.1
R1
- eth0 = 10.10.0.2
- eth1.10 = 172.26.0.1(這是一個用於區域網路分段的VLAN介面)
- eth1.15 = 172.26.1.1(也是VLAN介面)
R2
- eth1.10 = 172.26.0.2(VLAN 介面)
- eth1.15 = 172.26.1.2(VLAN介面)
我的 Quagga BGPd conf 如下所示: ISP1 路由器 bgp 65414 bgp 路由器 ID 192.168.0.1 網路 192.168.0.0/23 網路 10.10.0.0/24 鄰居 10.10.0.2 遠端作為 65515 鄰居 10.10.0.2 描述 R1
R1 路由器 bgp 64515 bgp 路由器 ID 172.26.0.1 網路 172.26.0.0/23 鄰居 172.26.0.2 遠端作為 65515 鄰居 172.26.0.2 描述 R2 鄰居 172.26.0.2 下一跳自身鄰居 10.10.0.1 遠端作為 65514 鄰居 10.10 .0.1 描述 ISP1 鄰居 10.10.0.1 前綴列表 isp1_filter_out out
ip 前綴列表 isp1_filter_out seq 5 允許 172.26.0.0/23 ip 前綴列表 isp1_filter_out seq 999 拒絕 0.0.0.0/0 ge 1
R2 路由器 bgp 65515 bgp 路由器 ID 172.26.0.2 網路 172.26.0.0/23 鄰居 172.26.0.1 遠端作為 65515 鄰居 172.26.0.1 描述 R2 鄰居 172.26.0.1 下一跳自身
任何想法?是 Linux 還是 Quagga 的問題?關於我的設置,您還需要我提供更多資訊嗎?
只是想告訴我,我從 Quagga 使用者郵件列表中得到了一些幫助來解決這個問題,這個問題現在已經解決了。
為了將來參考,我認為如果其他人遇到與我相同的問題,我發布解決方案是個好主意。
問題在於 Ubuntu 將 net.ipv4.conf.all.rp_filter 和 net.ipv4.conf.default.rp_filter 設置為預設啟用。這是為了防止數據包進入一個介面並離開另一個介面。
Ubuntu Bugs 報告中的建議(見下面的連結)是 rp_filter 在安裝 Quagga 時被禁用,但尚未實現。