Linux
為什麼將外部 IP 添加到環回 (lo) 就像添加到 ethX
對於年齡(> 7 年),我的自動化腳本以這種方式向伺服器添加新的外部 IP
ifconfig lo:0 11.22.99.44 netmask 255.255.255.255 ifconfig lo:1 11.22.33.44 netmask 255.255.255.255 ...
這與我合作過的所有(> 10)供應商都很好,而且我從來沒有遇到過問題。
現在我意識到,我正在將 ips 添加到環回中,這可能是錯誤的
,並且在127.0.0.0/8沙盒中播放後就離開了 =)
一個簡短的調查發現,必要的路由會自動添加,並且到達這些 ips 的數據包被正確路由
lo route 在routel中 可見
11.22.33.44 local 11.22.33.44 kernel host lo local 11.22.99.44 local 11.22.33.44 kernel host lo local
但不在ip route show 中
default via 99.88.22.1 dev eth0 99.88.22.0/24 dev eth0 proto kernel scope link src 99.88.22.123
測試路由:通過預設路由發送到伺服器的基本(添加到 eth0)ip 網關
#ip route get 5.5.5.5 from 11.22.33.44 iif lo 5.5.5.5 from 11.22.33.44 via 99.88.22.1 dev eth0
因此,我將數據包從 11.22.33.44 發送到 192.168.1.1 而不是 11.22.33.1,它適用於許多配置,許多提供商都沒有提出任何問題。
Q1:為什麼這有效?
Q2:添加多個網關哪種方式更好?(源11.22.99.44為11.22.99.1,源11.22.33.44為11.22.33.1)
像下面這樣添加多個是一個好主意還是基於 src 的路由更好?
auto eth0:0 iface eth0:0 inet static address 11.22.33.44 netmask 255.255.255.0 broadcast 11.22.33.255 gateway 11.22.33.1 auto eth0:1 iface eth0:1 inet static address 11.22.99.44 netmask 255.255.255.0 broadcast 11.22.99.255 gateway 11.22.99.1
感謝幫助!
- 這得益於 ARP 協議和路由表。當伺服器不知道將網路塊中的 IP 地址的數據包發送到哪裡時,介面配置為路由,它將發送 ARP 請求並使用響應更新其 ARP 表。您的伺服器還將響應其支持的所有 IP 地址的 APR 請求。對於其他地址,流量將被路由到為支持目標 IP 地址的最小配置網路塊配置的路由。
- 如果您只有一個介面,則所有外部流量都將通過該介面路由。其餘的將被發送到應該有到所有設備的路由的路由器。除了路由器的預設路由和預設路由之外,您真的不需要添加路由。
當您有多個介面時,它會變得更加複雜。在這種情況下,您可能需要為非本地網路塊添加路由,這些網路塊通過介面上的路由器路由,而不是具有預設路由的介面。
當您在同一介面上的多個網路塊中有 IP 地址時,最好將它們添加到介面而不是環回介面。通常,當我使用在多個網路塊中具有地址的伺服器時,每個網路塊都在一個單獨的介面上。
在環回介面上具有輔助 IP 地址可以解決埠衝突,其中必須將應用程序配置為響應介面上的流量。這可能會導致在輔助 IP 地址上使用相同埠的其他應用程序出現問題。