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

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

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

address=/#/192.168.42.1
interface=wlan0

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

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

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

Обходное решение

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

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

решение1

попробуйте вместо этого

except-interface=eth0

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

решение2

Вы подходите к этому вопросу неправильно. dnsmasq здесь совершенно не виноват.

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

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

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

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

nameserver 8.8.8.8
nameserver 8.8.4.4

Связанный контент