Заставить dnsmasq слушать только один интерфейс

У меня dnsmasq работает на Raspberry Pi с Raspbian. Пи имеет wifi-флешку на wlan0 и подключен к локальной сети / интернету по eth0. Моя цель состоит в том, чтобы dnsmasq разрешил всем хостам статический IP-адрес pi только для wifi-соединений. Это мой dnsmasq.conf

address=/#/192.168.42.1
interface=wlan0

Однако теперь, когда я ssh к пи через eth0 и пинг google.com, он также разрешает 192.168.42.1. Возможно, это из-за этого (со страницы руководства):

Dnsmasq автоматически добавляет петлевой (локальный) интерфейс в список интерфейсов для использования при использовании параметра --interface

Если так, как я могу сделать так, чтобы dnsmasq слушал только соединения Wi-Fi?

Обходной путь решения

Для моих целей это было нормально для логики: "Если кабель Ethernet подключен, выключите dnsmasq, Если кабель Ethernet отсоединен, включите его снова ".

Поэтому я использовал ifplugd управлять процессом. В файле /etc/ifplugd/ifplud.action я добавил service dnsmasq stop на случай "вверх" и service dnsmasq start в "вниз" случае. Полный успех!

2 ответа

Попробуйте вместо

except-interface=eth0

чтобы избежать dnsmasq прослушивания eth0

Вы идете об этом неправильно. dnsmasq не виноват вообще.

Большинство DNS-распознавателей в Linux используют /etc/resolv.conf, То, что определено там, не зависит от интерфейса. Фактически, это должно быть так: Вы не знаете, какой интерфейс и маршрут выбрать, если у вас нет числового IP-адреса.

Так что в принципе то, что вы хотите, не может быть сделано.

Если, конечно, на самом деле он предназначен не для хоста dnsmasq, а для клиентов WiFi или чего-то еще. В этом случае вам нужно удалить локальный DNS-ответчик из resolv.conf и сделайте так, чтобы он использовал восходящий поток (ваш маршрутизатор, интернет-провайдер, Google DNS, OpenDNS, ...) напрямую.

Типичный resolv.conf может выглядеть так при использовании Google DNS:

nameserver 8.8.8.8
nameserver 8.8.4.4
Другие вопросы по тегам