dnsmasq を 1 つのインターフェースのみで listen させる

dnsmasq を 1 つのインターフェースのみで listen させる

私は Raspbian を搭載した Raspberry Pi で dnsmasq を実行しています。Pi には wlan0 に Wi-Fi スティックがあり、eth0 でローカル ネットワーク/インターネットに接続されています。私の目標は、Wi-Fi 接続の場合のみ、dnsmasq がすべてのホストを Pi の静的 IP に解決できるようにすることです。これが私の dnsmasq.conf です。

address=/#/192.168.42.1
interface=wlan0

しかし、今では eth0 経由で pi に ssh し、google.com に ping すると、192.168.42.1 にも解決されます。おそらく、これは次の理由によるものです (man ページより):

Dnsmasq は、--interface オプションが使用されている場合、使用するインターフェースのリストにループバック (ローカル) インターフェースを自動的に追加します。

もしそうなら、dnsmasq が WiFi 接続のみをリッスンするようにするにはどうすればよいですか?

回避策

私の目的には、「イーサネット ケーブルが差し込まれている場合は、電源をオフにします。イーサネット ケーブルが抜かれている場合は、電源をオンに戻します」というロジックで問題ありませんでしたdnsmasq

したがって、私はifplugdプロセスを管理していました。ファイルに「アップ」ケースと「ダウン」ケースを/etc/ifplugd/ifplud.action追加しました。完全に成功しました!service dnsmasq stopservice dnsmasq start

答え1

代わりに試してください

except-interface=eth0

dnsmasqがeth0をリッスンしないようにする

答え2

やり方が間違っています。dnsmasq にはまったく問題はありません。

Linux 上のほとんどの DNS リゾルバは を使用します/etc/resolv.conf。そこで定義されている内容はインターフェースに依存しません。実際、そうある必要があります。数値の IP アドレスがない限り、どのインターフェースとルートを取るべきかわかりません。

つまり、基本的にあなたが望むことは実現できません。

もちろん、それが実際には dnsmasq ホスト用ではなく、WiFi クライアント用などである場合は除きます。その場合は、ローカル DNS レスポンダーを削除しresolv.conf、アップストリーム (ルーター、ISP、Google DNS、OpenDNS など) を直接使用する必要があります。

resolv.confGoogle DNS を使用する場合、通常は次のようになります。

nameserver 8.8.8.8
nameserver 8.8.4.4

関連情報