私は次の行から得ますss -lun
。
udp UNCONN 0 0 0.0.0.0%virbr0:67 0.0.0.0:* users:(("dnsmasq",pid=950,fd=3))
0.0.0.0%virbr0
ここで何を意味するのか知りたいです。人間にはその兆候はなく、検索エンジンで見つけるのは難しいです。
答え1
これはSO_BINDTODEVICE
、ソケットオプションを使用するIPv4ワイルドカードアドレスに加えて、特定のインターフェイスにバインドされたソケットにも適用されます。 ~からsocket
(7):
SO_BINDTODEVICE
渡されたインタフェース名で指定されているように、このソケットを「eth0」などの特定のデバイスにバインドします。名前が空の文字列またはオプションの長さがゼロの場合、ソケットデバイスバインディングは削除されます。渡されたオプションは最大サイズがIFNAMSIZ
。 ソケットがインターフェイスにバインドされている場合、ソケットはその特定のインターフェイスで受信されたパケットのみを処理します。。これは特定のソケットタイプ、特にソケットでのみ機能することに注意してくださいAF_INET
。パケットソケットはこれをサポートしていません(bind
そこで一般(2)を使用)。Linux 3.8以前では、このソケットオプションを設定できましたが、
getsockopt
(2)を使用して検索することはできませんでした。 Linux 3.8からは読むことができます。 optlenパラメーターには、デバイス名を受け取るために使用できるバッファーサイズを含める必要があり、IFNAMSIZ
バイト単位を推奨します。実際の装置名の長さはパラメーターに報告されますoptlen
。
(強調は私のもの)
通常、ソケットをインターフェイスの IP アドレスにバインドします。SO_BINDTODEVICE
しかし、少し異なります。ファイアウォールによってブロックされない限りrp_filter
、着信パケットの宛先アドレスがソケットにバインドされたアドレスと一致する限り(パケットがそのインターフェイス1で開始されていない場合でも)、指定されたアドレスへの接続が許可されます。の場合、SO_BINDTODEVICE
上記のようにこのインターフェイスから着信パケットのみが考慮されます。
たとえば、
$ sudo socat udp-listen:1234,so-bindtodevice=guest-bridge - &
$ ss -Hau 'sport = 1234'
UNCONN 0 0 0.0.0.0%guest-bridge:1234 0.0.0.0:*
dnsmasq
あなたの場合は、libvirtによって起動されたインスタンスにバインドされたDHCPサーバーUDPソケットかもしれません。あなたは見ることができますソフトウェアはオプションを設定します。インターフェイスにバインドするか、特定のインターフェイスを除外する必要がある場合。
DHCPサーバーの場合、DHCPサーバーは255.255.255.255に向かうブロードキャスト検索パケットを許可するように設計されているため、インターフェースアドレスにバインドしないようにします。ここでワイルドカードアドレスを使用することは、ブリッジインターフェイスがDHCP要求を処理し、別の(または他のソフトウェア)が他のインターフェイスの同じワイルドカードアドレスでそれを処理できることSO_BINDTODEVICE
を意味します。dnsmasq
virbr0
dnsmasq
1 これは非常に正常で一般的なものです。たとえば、ルータは通常、インターフェイスから着信アドレスへの着信接続を受け入れるか、通常はネットワークインターフェイスのローカルアドレスへのローカルループバック接続を実行できます。
答え2
virbr0インターフェイスのローカルアドレスとポート67(0.0.0.0)。