Linux

為什麼將外部 IP 添加到環回 (lo) 就像添加到 ethX

  • November 26, 2016

對於年齡(> 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

感謝幫助!

  1. 這得益於 ARP 協議和路由表。當伺服器不知道將網路塊中的 IP 地址的數據包發送到哪裡時,介面配置為路由,它將發送 ARP 請求並使用響應更新其 ARP 表。您的伺服器還將響應其支持的所有 IP 地址的 APR 請求。對於其他地址,流量將被路由到為支持目標 IP 地址的最小配置網路塊配置的路由。
  2. 如果您只有一個介面,則所有外部流量都將通過該介面路由。其餘的將被發送到應該有到所有設備的路由的路由器。除了路由器的預設路由和預設路由之外,您真的不需要添加路由。

當您有多個介面時,它會變得更加複雜。在這種情況下,您可能需要為非本地網路塊添加路由,這些網路塊通過介面上的路由器路由,而不是具有預設路由的介面。

當您在同一介面上的多個網路塊中有 IP 地址時,最好將它們添加到介面而不是環回介面。通常,當我使用在多個網路塊中具有地址的伺服器時,每個網路塊都在一個單獨的介面上。

在環回介面上具有輔助 IP 地址可以解決埠衝突,其中必須將應用程序配置為響應介面上的流量。這可能會導致在輔助 IP 地址上使用相同埠的其他應用程序出現問題。

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