Хотя ответ @ kichik вполне может сработать, более элегантный способ добиться этого может заключаться в использовании директивы localise-queries
и отдельного экземпляра dnsmasq
сервера.
Я предполагаю, что вы уже настроили диапазоны DHCP для различных интерфейсов и привязали dnsmasq
к ним.
Добавьте (частично документированный) параметр localise-queries
в файл dnsmasq.conf
.
# /etc/dnsmasq.conf
localise-queries
Затем убедитесь, что один из файлов, который dnsmasq
читает для ваших хостов (например, /etc/hosts
), содержит записи с IP-адресами для обеих сетей, например:
# /etc/hosts
127.0.0.1 dev-vm
192.168.1.1 dev-vm
10.0.0.1 dev-vm
Альтернативой изменению файла /etc/hosts
является указание адресов в файле dnsmasq.conf
:
# /etc/dnsmasq.conf
localise-queries
host-record=dev-vm,127.0.0.1
host-record=dev-vm,192.168.1.1
host-record=dev-vm,10.0.0.1
В результате в обоих случаях dnsmasq
будет обслуживать только IP-адрес, который соответствует IP-адресу интерфейса и сетевой маске для запросов, полученных на этом конкретном интерфейсе.
Согласно справочной странице , это делает следующее:
-y, --localise-query
Возвращает ответы на DNS-запросы из / etc / hosts, которые зависят от интерфейса, через который был получен запрос. Если имя в / etc / hosts имеет более одного адреса, связанного с ним, и хотя бы один из этих адресов находится в той же подсети, что и интерфейс, на который был отправлен запрос, вернуть только те адреса в этой подсети , Это позволяет серверу иметь несколько адресов в / etc / hosts, соответствующих каждому из его интерфейсов, и хосты получат правильный адрес в зависимости от того, к какой сети они подключены. В настоящее время этот объект ограничен IPv4.