
У меня 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