Использование DNSMasq для локального разрешения имен хостов

Использование DNSMasq для локального разрешения имен хостов

Я работаю над созданием домашней интрасети для себя и моих соседей по комнате. Моя идея заключается в том, что мы сможем хранить такие вещи, как прошлые счета за коммунальные услуги, в месте, которое будет более доступно, чем ящик на кухне и т. д. В любом случае, у меня есть Apache 2, работающий на Raspberry Pi, в моей локальной сети, и если я использую его IP-адрес, я могу получить доступ к страницам, обслуживаемым на Pi. Поскольку я делаю этот проект больше для того, чтобы узнать о сетях, чем для предоставления услуг в моей квартире, я подумал, что было бы здорово, если бы моя сеть могла предоставлять разрешение имен хостов для моей локальной сети. Поэтому вместо того, чтобы указывать своему браузеру на 192.168.1.151IP-адрес Pi, я мог бы указать ему на oberon(его имя хоста) и просматривать веб-страницы, обслуживаемые Pi.

Теперь я знал, что я не первый, кто хотел это сделать, поэтому я начал гуглить. Этот вопрос, также по Unix и Linux, очень мне помог:Как сделать машину доступной из локальной сети, используя ее имя хоста. На данный момент я перепробовал все, что указано в проверенном ответе. Я думал об использовании файла hosts, но это означало бы, что мне придется сказать моим соседям по комнате, чтобы они настроили свои машины, чего я не хочу, чтобы они делали. Я попытался зарезервировать аренду DHCP для Pi на моем маршрутизаторе (NETGEAR WNR1000v2 (он же N150)), и хотя резервирование сработало, разрешение имени хоста — нет. Это немного расстраивает меня, потому что я сообщил своему маршрутизатору IP Piиего имя хоста, но он по-прежнему не предоставляет эту информацию клиентам в моей локальной сети.

Поскольку эти два метода не работают, я решил установить dnsmasqна Pi. Настройка показалась мне простой, и я был бы рад изучить новый инструмент. Я установил и он работает просто отлично (кажется). Я могу digили nslookupпсевдонимы Pi (которые я установил в /etc/hostsи oberon) homenetи получить правильные результаты. Я могу сделать то же самое для интернет-имен, таких как yahoo.comи получить правильные ответы, потому что я установил Google 8.8.8.8и 8.8.4.4как резервные серверы в /etc/dnsmasq.conf. Смотрите это:

me@oberon~$ dig oberon

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> oberon
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10787
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;oberon.                                IN      A

;; ANSWER SECTION:
oberon.                 0       IN      A       192.168.1.151

;; Query time: 10 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Oct  6 18:59:18 2013
;; MSG SIZE  rcvd: 40

Обратите внимание, что SERVERis 127.0.0.1: oberonищет свой собственный IP-адрес на себе. Это то, что я ожидал увидеть. Вывод тот же, если я сделаю dig oberon @localhost. Из-за этого вывода я думаю, что dnsmasqэто работает нормально. Поэтому, чтобы вывести это на следующий уровень, я хочувсеклиенты в моей локальной сети, чтобы иметь возможность набирать oberonв своем браузере и переходить на oberonстраницу индекса. Для этого я знаю, что мне нужно настроить свой маршрутизатор (извините, если это отклоняется от строгой территории Unix и Linux).

У меня Netgear WNR1000v2, с которым я довольно хорошо знаком. Я настроил переадресацию портов, чтобы иметь возможность подключаться к Pi по SSH, и я также покопался в других настройках. Я знаю, что до того, как я начал этот проект, я получал свои DNS-серверы от своего интернет-провайдера, но теперь я хочу использовать эти DNS-серверы в первую очередь, но также использовать их 192.168.1.151в качестве последней проверки. Поэтому я изменил конфигурацию DNS моего маршрутизатора на следующую:

Новая конфигурация DNS моего роутера. Поверьте мне, когда я говорю, что первые две записи предоставлены моим провайдером

Итак, с этой конфигурацией я ожидал, что смогу сделать nslookup oberonна моем (Windows) рабочем столе и получить результат 192.168.1.151. Но этого не происходит. Вот что происходит:

C:\Users\me>nslookup oberon
Server:  UnKnown
Address:  fe80::226:f2ff:fefa:bea

*** UnKnown can't find oberon: Non-existent domain

Сброс настроек dnsflushingсетевого адаптера на моем компьютере с Windows ничего не меняет.

А теперь вот почему я рву на себе волосы:

C:\Users\me>nslookup oberon 192.168.1.151
Server:  oberon.lan
Address:  192.168.1.151

Name:    oberon
Address:  192.168.1.151

Очевидно, dnsmasqработает просто отлично. Если я скажу моему Windows-компьютеру использовать 192.168.1.151для разрешения имени oberon, все будет хорошо ( .lanдомен был частью конфигурации dnsmasq, поэтому я ожидал увидеть его там). Если бы я мог просто заставить свой маршрутизатор сказать моему Windows-компьютеру использовать , 192.168.1.151когда он делает DNS-запросы, все было бы хорошо!

Так что мне кажется, что проблема в моем маршрутизаторе, но я просто не могу понять, что делать, кроме как изменить DNS-серверы, чтобы включить, 192.168.1.151как я уже сделал. Может ли кто-нибудь мне помочь здесь? Я постараюсь предоставить любую дополнительную информацию, которая мне нужна.

решение1

Ваша проблема заключается в вашем непонимании того, как используются эти DNS-серверы. Я не знаю точных подробностей метода, который Windows использует для выбора DNS-сервера для запроса, но я готов поспорить, что он первичный > вторичный > третичный /всегда/. И даже если бы это было не так и был циклический перебор, вы все равно будете запрашивать бесполезный сервер 2 из 3 раз.

Что произойдет, так это то, что будет запрошен первичный сервер. Если время ожидания истечет, что может занять секунду или две, будет запрошен следующий сервер. DNS не является системой «консенсуса», если запрашивается один из удаленных серверов, он в конечном итоге обнаружит результат, что ваше имя хоста авторитетно НЕ существует, с его точки зрения как интернет-DNS-сервера.

Вам нужен ваш собственный LAN dns в качестве основного DNS-сервера. Другие могли бы стать подходящими резервными серверами, но я бы рассмотрел возможность полного отказа от этого.

Также следует отметить, что ваш обратный DNS (поиск IP-адреса по имени) разрешается в "hostname.lan", но ваши тесты прямого разрешения выполняются только с именем хоста. Вам также следует настроить где-то прямое разрешение для hostname.lan. Хотя может быть много прямых поисков "имя-адрес" для хоста, ожидается, что будет обратный поиск IP-адреса по имени, которое, в свою очередь, имеет совпадающее имя с этой записью IP. Это не всегда критично и просто иногда заставляет файлы журналов ныть, но некоторые вещи более чувствительны к этому, чем другие.

Кроме того, не забудьте удалить все лишнее из файла hosts, как только все заработает (не знаю, относится ли это к dnsmasq, никогда им не пользовался; у меня похожая, но более сложная конфигурация с использованием сервера имен ISC-BIND, который можно настроить на пересылку на другие серверы, как вы используете, или просто использовать его как непересылающий DNS-сервер, который сам выполняет полное разрешение имен, что я и настроил).

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

решение2

Может быть, немного поздно, но отключение IPv6 на моем беспроводном адаптере помогло.

Связанный контент