DNSMASQ, обслуживает разные IP -адреса на основе используемого интерфейса
-
27-10-2019 - |
Вопрос
В основном моя проблема в том, что я запускаю виртуальную машину для разработки веб -сайтов.
Хост -машина имеет свои DNS, указывающие на виртуальную машину, которая использует DNSMASQ, который разрешает адреса различных Dev Sites, т.е. test.mysite.vm и т. Д.
Проблема в том, когда я перехожу из своей рабочей сети в свою домашнюю сеть, все перерывается, потому что IP -адрес виртуальной машины меняется. Можно ли обслуживать различные IP -адреса, в зависимости от того, от какого интерфейса был запрос? Или я должен попытаться справиться с этим совершенно по -другому?
Спасибо за вашу помощь!
Оказывается, в конце концов был гораздо более легкий подход к этому ...
Теперь я настраиваю 2 интерфейсы на виртуальной машине и не должен использовать DNSMASQ.
Первый - это всего лишь мостовой/общий интерфейс, который позволяет виртуальной машине использовать то, что подключение к Интернету доступно для хоста с перезапуском сети каждый раз, когда я перемещаю офис.
2 -е место - это личное соединение с моим хостом виртуальной машины, который имеет статический IP -адрес. Это интерфейс, который я использую для подключения и связывания любых услуг, таких как Nginx, MySQL и т. Д.
Решение
Вы можете запустить два экземпляра 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
.
Как я уже упоминал в комментарии, я не слишком уверен, как это помогает вашей ситуации, но это может помочь любому другому, кто пытается получить два разных диапазона адреса на двух разных интерфейсах.
Другие советы
Добавление интерфейса в начале каждого параметра отлично подходит для меня. Пример (в 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
В то время как ответ @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,--локалис-кверы
Возвращайте ответы на запросы DNS от /etc /hosts, которые зависят от интерфейса, на котором был получен запрос. Если имя в /etc /hosts имеет более одного адреса, связанного с ним, и, по крайней мере, один из этих адресов находится на той же подсети, что и интерфейс, на который был отправлен запрос, то верните только адрес (ES) в этой подсети Анкет Это позволяет серверу иметь несколько адресов в /etc /hosts, соответствующих каждому из его интерфейсов, и хосты получат правильный адрес на основе того, к какой сети они привязаны. В настоящее время этот объект ограничен IPv4.
В качестве альтернативы вы также можете создать Несколько файлов конфигурации под /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
Для меня это очень чистый способ настроить вашу систему, и конфигурация сохраняется между перезагрузками.