2012-02-17 2 views
18

В основном моя проблема в том, что я запускаю виртуальную машину для разработки веб-сайтов.dnsmasq, обслуживать различные IP-адреса на основе используемого интерфейса

хозяин машина имеет свои DNS, указывающий на Vm, который работает Dnsmasq разрешающий адрес различных сайтов Дев, т.е. test.mysite.vm т.д.

Вопрос в том, когда я иду от моей работы сети в моя домашняя сеть все ломается, потому что IP-адрес vm изменяется. Возможно ли обслуживать разные ip-адреса, на основе которых был получен запрос? Или я должен попытаться решить это совершенно по-другому?

Благодарим за помощь!

+0

В каких интерфейсах вступают в игру? Используете ли вы два разных интерфейса для своей домашней сети и рабочей сети? Почему изменяется IP-адрес виртуальной машины? – kichik

+0

Да, это было 2 разных интерфейса для дома (192.168.0. *) И работа (10.0.0. *). Изменение происходит между рабочим IP-адресом и домашним IP-адресом. –

ответ

23

Вы можете запустить два экземпляра 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.

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

+0

Действительно ли нет возможности иметь 2 сети без запуска нескольких экземпляров? Это действительно усложняет ситуацию. – TheLQ

+3

Вы можете использовать '--dhcp-range =' несколько раз в той же команде, чтобы заставить ее обслуживать две сети. Это может действительно работать и на исходный вопрос. Вероятно, это приведет к вычитанию правильного диапазона IP для обслуживания на основе IP-адреса интерфейса. – kichik

+0

убедитесь, что параметр конфигурации 'listen-address = 0.0.0.0' закомментирован в config-файле. например '# listen-address = 0.0.0.0' –

13

В то время как ответ @ 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-запросов

Возратиться ответы на DNS-запросы от/и т.д./хостов, которые зависят от интерфейса, над которым запрос был получен.Если имя в/etc/hosts имеет более одного адреса, связанного с ним, и по крайней мере один из этих адресов находится в той же подсети, что и интерфейс, на который был отправлен запрос, затем возвращает только адреса (адреса) в этой подсети , Это позволяет серверу иметь несколько адресов в/etc/hosts, соответствующих каждому из его интерфейсов, а хосты получат правильный адрес на основе той сети, к которой они привязаны. В настоящее время это средство ограничено IPv4.

16

Добавление интерфейса в начале каждого параметра отлично подходит для меня. Пример (в 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 
+1

Работает для меня тоже при использовании 'dhcp-range' вместо' dhcp-host'. Это должно быть приемлемым решением для текущих версий dnsmasq. – Dyna

+0

@ Dyna Это работает, но это не документировано или я что-то пропустил? – Murmel

+1

@ user1885518 Я боролся с тем же вопросом, пока не нашел это на [странице руководства] (http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html): 'The tag" bootp "устанавливается для запросов BOOTP, а также тег, имя которого является именем интерфейса, на котором был получен запрос.'. Таким образом, всегда существует тег, названный в честь интерфейса, в который пришел запрос. Очень полезно для multi-vlan dhcp. – GnP

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 

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

+0

Можете ли вы помочь мне с похожим сценарием? Я не могу взломать решение. http://serverfault.com/questions/825601/dnsmasq-config-for-captive-portal – 55597

+0

это не сработает, так как dnsmasq просто читает файлы последовательно, а все файлы в /etc/dnsmasq.d/ считаются единой конфигурацией , – Dingo

+0

@MariusMatutiae согласился, очень хороший ответ – KGCybeX

Смежные вопросы