сервер dnsmasq, предназначены для разных IP-адресов, основанных на интерфейсе, используемом
в основном моя проблема заключается в том, что я запускаю виртуальную машину для разработки веб-сайтов.
хост-машина имеет свой dns, указывающий на Vm, на котором работает dnsmasq, который разрешает адреса различных сайтов dev, т. е. тест.мистит.ВМ и т. д.
проблема в том, что когда я иду из своей рабочей сети в свою домашнюю сеть, все это ломается, потому что IP-адрес виртуальной машины меняется. Можно ли обслуживать разные ip-адреса на основе интерфейса, с которого пришел запрос? Или мне стоит попытаться? чтобы справиться с этим совершенно по-другому?
Спасибо за вашу помощь!
оказывается, был гораздо более простой подход к этому в конце концов...
теперь я устанавливаю 2 интерфейса на виртуальной машине и не должен использовать dnsmasq.
первый - это просто мостовой / общий интерфейс, который позволяет VM использовать то, что когда-либо интернет-соединение доступно хосту с перезапуском сети каждый раз, когда я перемещаюсь офис.
2nd-это частное соединение с моим хостом VM, который имеет статический IP-адрес. Это интерфейс, который я использую для подключения и привязки любых сервисов, таких как nginx, mysql и т. д.
4 ответов
вы можете запустить два экземпляра 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
.
как я уже упоминал в комментарии, я не слишком конечно, это помогает вашей ситуации, но это может помочь любому, кто пытается получить два разных диапазона адресов на двух разных интерфейсах.
добавление интерфейса в начале каждого параметра отлично работает для меня. Пример (в раздача.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 может хорошо работать, более элегантный способ достичь того же может быть использовать и один dnsmasq
экземпляра сервера.
Я предполагаю, что вы уже настроили свои диапазоны DHCP для разных интерфейсов и связали dnsmasq
для тех, кто.
добавить (частично документально) на .
# /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
файл должен указать адреса в вашем :
# /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-queries
возврат ответов на DNS-запросы от/etc / hosts, которые зависят от интерфейса, через который был получен запрос. Если имя в /etc/hosts имеет более одного адреса, связанного с ним, и по крайней мере один из этих адресов находится в той же подсети, что и интерфейс, на который был отправлен запрос, то верните только адрес(адреса) в этой подсети. Это позволяет серверу иметь несколько адресов в /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
для меня это очень чистый способ чтобы настроить систему и сохранить конфигурацию между перезагрузками.