Networking
綁定到不存在的介面
我剛剛注意到我沒有很好解釋的非常奇怪的情況。
機器(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
,而不是ifconfig
。ifconfig
已經在 Linux 中棄用了幾年,並且缺少很多功能。影響您的案例的特定功能是能夠在單個介面上添加/顯示多個 IP 地址(無需創建介面別名)。將多個 IP 地址添加到介面的方法
ifconfig
是創建介面別名 (eth0
->eth0:0
eth0:1
等)。但是,您只能在單個界面上擁有 255 個別名,因此對於某些企業設置,這是一個很大的限制。使用 Iproute2
ip
實用程序,您可以將無限數量的地址添加到單個介面。例如:
$ 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
顯示所有地址。