Linux

linux 路由或 natting 與環回介面上的 ip 作為別名

  • September 29, 2020

我有

eth0:0 192.168.2.10 (for bgp network announce, no vlan, alias on eth0)
eth0.1 192.168.3.20 (for bgp session 1,vlan3 transport to bgp router)
eth0.2 192.168.4.30 (for bgp session 2,vlan4 transport to bgp router)

預設路由由 zebra 給出(192.168.3.1 或 192.168.4.1 – 故障轉移)

當外部 ip (192.168.1.100) 嘗試連接到 192.168.2.10 -> 應答數據包通過 192.168.3.1 (其中源 ip 為 192.168.3.20)。這工作正確。但我希望源地址為 192.168.2.10。主要問題是當星號在 192.168.2.10 上執行並且客戶端嘗試從 192.168.1.100 註冊 sip -> 答案從 192.168.3.20 發送並且包被丟棄在遠端端。

如何修復/解決這個問題?或者還有其他配置介面的方式嗎?主要思想是如果 bgp 會話之一發生故障,則切換 192.168.2.10 的路由。

rp_filter=0 on all interfaces

如果我放一些類似的東西:

iptables -t nat -A POSTROUTING -d 192.168.1.0/24 -j SNAT --to-source 192.168.5.58

這也不起作用。

所有的問題是星號在這個方案中在 nat 後面。如果我在所有介面上執行它-> sip 客戶端在 192.168.4.30 和 192.168.3.20 ip 上連接正常,但不是在 192.168.2.10 上。

Linux 上的 lo 與 Cisco 上的環回不同。

在 Linux 上分配給 lo 的任何地址都必須僅用於機器向自身發送流量;核心會將任何源 IP 與分配給 lo 的數據包相匹配的數據包視為 martian,並將在入口處丟棄 - 這是硬編碼行為。核心也順便使用 lo 向任何其他介面上的 IP 發送流量(例如,如果 eth0 有 10.0.0.1 並且您 ping 它,lo 上的 tcpdump 將顯示回應要求和回复)

對於與 Cisco 風格的環回介面等效,請使用“虛擬”核心模組 - 請注意,虛擬模組還充當路由到它的流量的沉洞(如 Cisco 上的 null0),因此您分配給的任何地址它應該是 /32,因為對於虛擬介面,顯然沒有任何連結。

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