dnsmasq dhcp はポート 67 でリッスンしません。

dnsmasq dhcp はポート 67 でリッスンしません。

を使用しようとしていますdnsmasq。ここに私のdnsmasq.confがあります。

# DHCP
dhcp-authoritative
bind-interfaces

dhcp-range=192.168.122.2,192.168.122.99,12h
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases

dhcp-host=0a:0a:0a:0a:0a:01,192.168.122.100  # node.local

# DNS
no-hosts # ignore etc hosts
address=/node.local/192.168.122.100
ptr-record=100.122.168.192.in-addr.arpa.,"node.local"

リッスンしているポートを見ると、リスニングしてsudo ss -tulpn | grep LISTENいる:53 DNSポートのみが表示されます。ポート67がリッスンしていないため、DHCPサービスが実行されているように見えません。

DHCPは実行中ですか?もしそうなら、デフォルトのDHCPポートの代わりにポート53だけをリッスンすると、クライアントはIPアドレスを取得できますか?

答え1

IPv4 DHCPサーバーは、宛先255.255.255.255にアドレス指定されたブロードキャストパケットを送受信できる必要があります。これを行うには、(私が知る限り)rawソケットを使用する必要があります。

ss -A raw -lpnDHCPサーバーの生ソケットの検索を参照してください。ネイティブIPプロトコルレベルで動作するため、ソケットはポート67に限定されません。 DHCPサーバーは、入力ポート番号を含む発信パケットにUDPヘッダー自体を構築する必要があります。

着信パケットの場合、通常の方法でUDPポート67を受信すると、カーネルはDHCPサーバーが受信したいパケットを破棄し、それを「設定エラー」として扱います。これは、DHCP クライアントに有効なネットワーク構成がない可能性があるためです。あるいは、クライアントがシャットダウンしたときに別のネットワークに接続していることを知らず、新しいネットワークの無効なネットワークパラメータを使用して古いDHCPリースの検証を開始することもできます。理想的には、DHCPサーバーが聞くと、クライアントはDHCP NAKを送信して古いアドレスを忘れて、DHCPプロセスを再起動するように指示します。

したがって、DHCPサーバーはrawソケットを使用して着信UDPパケットを受信し、通常のネットワークドライバスタックが拒否する一部の着信パケットを受け入れる必要があります。したがって、ss -tulpn | grep LISTEN対応するソケットは表示されません。実際、カーネルはよくわかりません。生のソケットを使用することは、カーネルに「入ってくるIPパケットのコピーを与えれば興味のある特定のコンテンツを検索します」と言うのと同じなので、DHCPサーバが受信しています。

関連情報