Networking

綁定到不存在的介面

  • May 26, 2018

我剛剛注意到我沒有很好解釋的非常奇怪的情況。

機器(debian)有一個介面,分配了一個 IP 地址:

# ifconfig vmbr0 |grep inet
inet addr:192.168.1.26  Bcast:192.168.1.255  Mask:255.255.255.0

在一些軟體設置中(如果有必要,powerdns 遞歸)指定它的守護程序綁定到以下介面:

local-address=127.0.0.1 192.168.1.24

您可能已經註意到,這是 IP 地址值中的錯誤,但問題是 - daemon 已成功綁定到它:

# netstat -nlp | grep 1.24 | grep 53
tcp        0      0 192.168.1.24:53         0.0.0.0:*               LISTEN      328862/pdns_recurso
udp        0      0 192.168.1.24:53         0.0.0.0:*                           328862/pdns_recurso

更令人驚訝的是 - 交換機成功地將流量路由到這台機器(192.168.1.24區域網路中沒有其他機器,因此沒有 IP 地址衝突)。

那麼任何人都可以解釋為什麼它是可能的並且有效嗎?

我認為核心只會接受具有正確目的地的 IP 數據包並丟棄所有其他數據包。

如評論中所示,地址(192.168.1.24)實際上存在於主機上,但由於ifconfig實用程序的限制,未顯示。相反,您應該使用Iproute2實用程序ip,而不是ifconfigifconfig已經在 Linux 中棄用了幾年,並且缺少很多功能。影響您的案例的特定功能是能夠在單個介面上添加/顯示多個 IP 地址(無需創建介面別名)。

將多個 IP 地址添加到介面的方法ifconfig是創建介面別名 ( eth0->eth0:0 eth0:1等)。但是,您只能在單個界面上擁有 255 個別名,因此對於某些企業設置,這是一個很大的限制。

使用 Iproute2ip實用程序,您可以將無限數量的地址添加到單個介面。

例如:

$ ip addr add 169.254.0.1 dev eth0
$ ip addr add 169.254.0.2 dev eth0

$ ifconfig eth0 | grep '\<inet\>'
       inet 192.168.0.20  netmask 255.255.255.0  broadcast 192.168.0.255

$ ip addr show dev eth0 | grep '\<inet\>'
   inet 192.168.0.20/24 brd 192.168.0.255 scope global eth0
   inet 169.254.0.1/32 scope global eth0
   inet 169.254.0.2/32 scope global eth0

所以請注意如何ifconfig只顯示一個地址,而ip addr顯示所有地址。

引用自:https://unix.stackexchange.com/questions/158068