を使用しようとしています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 -lpn
DHCPサーバーの生ソケットの検索を参照してください。ネイティブIPプロトコルレベルで動作するため、ソケットはポート67に限定されません。 DHCPサーバーは、入力ポート番号を含む発信パケットにUDPヘッダー自体を構築する必要があります。
着信パケットの場合、通常の方法でUDPポート67を受信すると、カーネルはDHCPサーバーが受信したいパケットを破棄し、それを「設定エラー」として扱います。これは、DHCP クライアントに有効なネットワーク構成がない可能性があるためです。あるいは、クライアントがシャットダウンしたときに別のネットワークに接続していることを知らず、新しいネットワークの無効なネットワークパラメータを使用して古いDHCPリースの検証を開始することもできます。理想的には、DHCPサーバーが聞くと、クライアントはDHCP NAKを送信して古いアドレスを忘れて、DHCPプロセスを再起動するように指示します。
したがって、DHCPサーバーはrawソケットを使用して着信UDPパケットを受信し、通常のネットワークドライバスタックが拒否する一部の着信パケットを受け入れる必要があります。したがって、ss -tulpn | grep LISTEN
対応するソケットは表示されません。実際、カーネルはよくわかりません。何生のソケットを使用することは、カーネルに「入ってくるIPパケットのコピーを与えれば興味のある特定のコンテンツを検索します」と言うのと同じなので、DHCPサーバが受信しています。