Dnsmasq, обслуживают разные ip-адреса на основе интерфейса
В основном моя проблема заключается в том, что я запускаю виртуальную машину для разработки веб-сайтов.
У хост-машины есть свои DNS-узлы, указывающие на Vm, который запускает dnsmasq, который разрешает адреса различных сайтов-разработчиков, то есть test.mysite.vm и т.д.
Проблема в том, что я перехожу из своей рабочей сети в свою домашнюю сеть, и все это ломается, потому что изменяется IP-адрес vm. Возможно ли обслуживать разные ip-адреса, на основе которых был получен запрос? Или я должен попытаться решить это совершенно по-другому?
Спасибо за вашу помощь!
Ответы
Ответ 1
Вы можете запустить два экземпляра dnsmasq
, каждый с другим интерфейсом, который он прослушивает. Для этого вы можете использовать опции --interface=X
и --bind-interfaces
. По умолчанию он также привязывает loopback-устройство lo
и будет терпеть неудачу, если два процесса попытаются связать его. Используйте --except-interface=lo
, чтобы избежать этого.
dnsmasq --interface=eth0 --except-interface=lo --bind-interfaces --dhcp-range=192.168.0.2,192.168.0.10,12h
dnsmasq --interface=eth1 --except-interface=lo --bind-interfaces --dhcp-range=10.0.0.2,10.0.0.10,12h
Убедитесь, что ваш конфигурационный файл пуст, когда вы его проверяете, поскольку он всегда переопределяет командную строку. Вы также можете использовать --conf-file=/dev/null
.
Как я уже упоминал в комментарии, я не слишком уверен, как это помогает вашей ситуации, но это может помочь любому, кто пытается получить два разных диапазона адресов на двух разных интерфейсах.
Ответ 2
Добавление интерфейса в начале каждого параметра отлично подходит для меня.
Пример (в dnsmasq.conf):
dhcp-host=eth0,00:22:43:4b:18:43,192.168.0.7
dhcp-host=eth1,00:22:43:4b:18:43,192.168.1.7
Я использую выпуск:
$ dnsmasq --version
Version de Dnsmasq 2.68 Copyright (c) 2000-2013 Simon Kelley
Ответ 3
В то время как ответ @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-интерфейсу и сетевой маске для запросов, полученных на этом конкретном интерфейсе.
В соответствии с man page это делает следующее:
-y, --localise-query
Возвращает ответы на DNS-запросы из /etc/hosts, которые зависят от интерфейса, по которому был получен запрос. Если имя в /etc/hosts имеет более одного адреса, связанного с ним, и по крайней мере один из этих адресов находится в той же подсети, что и интерфейс, на который был отправлен запрос, затем возвращает только адреса (адреса) в этой подсети, Это позволяет серверу иметь несколько адресов в /etc/hosts, соответствующих каждому из его интерфейсов, а хосты получат правильный адрес на основе той сети, к которой они привязаны. В настоящее время это средство ограничено IPv4.
Ответ 4
В качестве альтернативы вы также можете создать несколько файлов конфигурации под /etc/dnsmasq.d/
, по одному для каждого интерфейса, который вы хотите обслуживать dhcp.
Например, если у вас есть два беспроводных интерфейса с именем wlan0
и wlan1
, и вы хотите использовать dhcp на них благодаря dnsmasq, вы можете создать два файла в /etc/dnsmasq.d/
для настройки каждого интерфейса:
/etc/dnsmasq.d/dnsmasq-wlan0.conf
:
interface=wlan0 # Use interface wlan0
listen-address=10.0.0.1 # Explicitly specify the address to listen on
bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
bogus-priv # Never forward addresses in the non-routed address spaces.
dhcp-range=10.0.0.50,10.0.0.150,12h # Assign IP addresses between 10.0.0.50 and 10.0.0.150 with a 12 hour lease time
/etc/dnsmasq.d/dnsmasq-wlan1.conf
:
interface=wlan1 # Use interface wlan0
listen-address=20.0.0.1 # Explicitly specify the address to listen on
bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
bogus-priv # Never forward addresses in the non-routed address spaces.
dhcp-range=20.0.0.50,20.0.0.150,12h # Assign IP addresses between 20.0.0.50 and 20.0.0.150 with a 12 hour lease time
Для меня это очень простой способ настроить вашу систему и сохранить конфигурацию между перезагрузками.