
私は 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 stop
service 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.conf
Google DNS を使用する場合、通常は次のようになります。
nameserver 8.8.8.8
nameserver 8.8.4.4