DNSMASQ, обслуживает разные IP -адреса на основе используемого интерфейса

StackOverflow https://stackoverflow.com/questions/9326438

  •  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

Для меня это очень чистый способ настроить вашу систему, и конфигурация сохраняется между перезагрузками.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top