私は説明できなかった非常に奇妙な状況を見つけました。
マシン(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アドレス値のエラーであることに気付いたかもしれませんが、問題はデーモンが正常にバインドされていることです。
# 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
さらに驚くべきことは、スイッチがトラフィックをこのシステムに正常にルーティングすることです(LANに他のシステムがないため、IPアドレスの競合がありません)。
それでは、なぜこれが可能で動作するのかを説明できる人はいますか?
私の考えでは、カーネルは正しい宛先を持つIPパケットのみを受け入れ、他のすべてのパケットは破棄します。
答え1
コメントで指摘されているように、アドレス(192.168.1.24)は実際にはホストに存在しますが、ユーティリティのifconfig
制限のため表示されません。代わりに、次を使用する必要があります。ルート2実用的ip
ではありませんifconfig
。ifconfig
Linuxでは、長年使用されなくなり、多くの機能が欠落しています。あなたのケースに影響を与える特定の機能は、インターフェイスエイリアスを生成せずに単一のインターフェイスに複数のIPアドレスを追加/表示する機能です。
インターフェイスに複数のIPアドレスを追加する方法は、インターフェイスエイリアス(->など)ifconfig
を作成することです。ただし、単一のインターフェイスには255のエイリアスしかない可能性があるため、これは一部の企業設定にとってはかなりの制限です。 Iproute2ユーティリティを使用すると、単一のインターフェイスにアドレスを無制限に追加できます。eth0
eth0:0
eth0:1
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
、1つのアドレスのみが表示され、ip addr
すべてのアドレスが表示されます。