存在しないインターフェイスにバインド

存在しないインターフェイスにバインド

私は説明できなかった非常に奇妙な状況を見つけました。

マシン(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ではありませんifconfigifconfigLinuxでは、長年使用されなくなり、多くの機能が欠落しています。あなたのケースに影響を与える特定の機能は、インターフェイスエイリアスを生成せずに単一のインターフェイスに複数のIPアドレスを追加/表示する機能です。

インターフェイスに複数のIPアドレスを追加する方法は、インターフェイスエイリアス(->など)ifconfigを作成することです。ただし、単一のインターフェイスには255のエイリアスしかない可能性があるため、これは一部の企業設定にとってはかなりの制限です。 Iproute2ユーティリティを使用すると、単一のインターフェイスにアドレスを無制限に追加できます。eth0eth0: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すべてのアドレスが表示されます。

関連情報