我有一個必須配置為循環的網路。它由 3 個節點組成,每個節點都有兩個介面。下圖解釋了這一點。
+--->(eth0) Node 1 (eth1)--->(eth0) Node 2 (eth1)--->(eth0) Node 3 (eth1)--->+
| 10.0.3.1 10.0.1.1 10.0.1.2 10.0.2.2 10.0.2.3 10.0.3.3 |
+--<----------------------------<--------------------------------------------+
我想從節點 1 到節點 3 進行 ping 操作,以便請求通過節點 2,並且回應直接從節點 3 發送到節點 1。
node1$ ping 10.0.2.3
我已將節點配置為:
node1# route add -net 10.0.2.0/24 gw 10.0.1.2
node2# route add -net 10.0.3.0/24 gw 10.0.2.3
node3# route add -net 10.0.1.0/24 gw 10.0.3.1
當運行 ping 時,來自節點 1 的請求到達節點 3。
你能給我一些提示嗎?
TA
答案1
當節點選擇來源其發起的封包的 IP 位址,除非另有限制,否則它通常會選擇距離封包目的地路由上的下一跳「最接近」的 IP 位址。
從節點 1 的角度來看,到節點 3 的下一跳是10.0.1.2
。最接近的節點 1 IP 位址10.0.1.2
是10.0.1.1
,而不是10.0.3.1
。 (與目標位於同一子網路中的 IP 位址被認為比不在相同子網路中的 IP 位址「更接近」目標。)
檢查 ping 的來源 IP 位址。最有可能的是,它是10.0.1.1
,不是10.0.3.1
。如果節點 3 沒有到 的路由10.0.1.1
,則它無法回覆。
答案2
節點正確地失敗重複以防止失控的橋廣播。我建議您運行生成樹協議。這將允許您在所有節點之間放置功能齊全的路由。我想不出另一種方法來做到這一點,除非您願意限制第 2 層或第 3 層的某些連結之間的連接。
答案3
(/sbin/route
已棄用,請使用ip route
)。
如果您希望資料包僅沿一個方向傳輸,則表示每個節點都需要使用下一個節點作為其網關,無論目的地是什麼。
node1# ip route add 10.0.0.0/22 via 10.0.1.2
node2# ip route add 10.0.0.0/22 via 10.0.2.3
node3# ip route add 10.0.0.0/22 via 10.0.3.1
然而,在大多數發行版上,反向路徑過濾通常預設為啟用。反向路徑過濾是針對傳入資料包的過濾器,它嘗試檢查對此資料包的回應是否會傳送至與接收資料包相同的介面。這在路由是對稱的普通網路上是一件好事,但在您的情況下,您需要非對稱路由,因此您可能只需在接收資料包的介面上停用反向路徑過濾,或至少減少它,以便它只檢查是否來源IP是可路由的:
node1# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node2# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node3# sysctl -w net.ipv4.conf.eth0.rp_filter=2
有關反向路徑過濾和其他旋鈕的文件可在核心文件中找到,網址為Documentation/networking/ip-sysctl.txt
。在哪裡可以找到它取決於您的發行版(或只是瀏覽網路ip-sysctl.txt
)。
快樂循環!