web-dev-qa-db-ja.com

dnsmasqがDHCP検出に従わないDHCP要求に応答しない

ネットワーク名前空間Xで実行されているdnsmasqのインスタンスがあり、ネットワーク名前空間Y内からdhclient(またはその他のdhcpクライアント)を実行して、特定のインターフェイスでIPアドレスを取得します。 2つのネットワーク名前空間は同じopenvswitchブリッジ上にあり、それを介して通信します。

dnsmasqが、すべてのDHCPパケットが宛先名前空間に迅速に配信されることを示している場合でも、tcpdumpが応答するのに10〜30秒かかることがわかります。

なぜそんなに時間がかかるのですか?この遅延を減らす方法はありますか?

これは、11秒後にIPアドレスが割り当てられる/ var/log/syslogの例です。

Apr  4 14:31:27 localhost dhclient: Listening on LPF/_0.ping/ae:ca:22:bc:3c:7b
Apr  4 14:31:27 localhost dhclient: Sending on   LPF/_0.ping/ae:ca:22:bc:3c:7b
Apr  4 14:31:27 localhost dhclient: Sending on   Socket/fallback
Apr  4 14:31:27 localhost dhclient: DHCPREQUEST on _0.ping to 255.255.255.255 port 67
Apr  4 14:31:33 localhost dhclient: DHCPREQUEST on _0.ping to 255.255.255.255 port 67
Apr  4 14:31:48 localhost dhclient: DHCPDISCOVER on _0.ping to 255.255.255.255 port 67 interval 3
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPDISCOVER(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b 
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPOFFER(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b 
Apr  4 14:31:48 localhost dhclient: DHCPREQUEST on _0.ping to 255.255.255.255 port 67
Apr  4 14:31:48 localhost dhclient: DHCPOFFER from 192.168.31.1
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPREQUEST(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b 
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPACK(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b mymachine
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: not giving name mymachine to the DHCP lease of 192.168.31.110 because the name exists in /etc/hosts with address 127.0.0.1
Apr  4 14:31:48 localhost dhclient: DHCPACK from 192.168.31.1
Apr  4 14:31:48 localhost dhclient: ntp-servers: expecting at least 4 bytes; got 0
Apr  4 14:31:48 localhost dhclient: bound to 192.168.31.110 -- renewal in 33935 seconds.

dnsmasqインスタンスは、次のコマンドで起動されます。

dnsmasq --dhcp-range=set:tag0,192.168.31.100,192.168.31.150,24h -l /tmp/dnsmasq-leasefile.dhcp.dhcp --dhcp-option=tag:tag0,option:router,192.168.31.2 --dhcp-option=tag:tag0,option:dns-server,9.9.9.9 --dhcp-option=tag:tag0,42

[〜#〜] edit [〜#〜]わかりました、もう数回実行しましたが、そこにパターンが表示されていると思います。 DHCPクライアントは、2つのDHCP要求を送信することから開始しますが、どちらも応答されません。 DHCP検出が送信されるとすぐに、dnsmasqが応答します。 dhclientが最初にDHCP要求を試行する理由は、/var/lib/dhcp/dhclient.leases内の同じインターフェイスの以前のリースを確認し、そこに表示されるIPアドレスを要求しようとするためです。そのようなファイルを削除するとすぐに、dnsmasqからの応答が即座に生成されます。 2つのオプションがあります。

  • dhclientにリースファイルを使用しないように指示します(方法はわかりません)が、これは実際には理想的ではありません...
  • 検出メッセージに従わないリクエストに応答するようにdnsmasqに指示します。これどうやってするの?
1
Ricky Robinson

答えは、dnsmasqで--dhcp-authoritativeオプションを使用することです。問題は、毎回dnsmasqサーバーを再起動していたため、リースファイルがありませんでしたが、dhclientには独自のリースファイルがありました。要求されたIPアドレスを独自のリースファイルで確認できないため、dnsmasqはdhcp検出メッセージが発行されるまで待機します。

2
Ricky Robinson