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

9

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

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

С этими двумя методами не работает, я решил установить dnsmasqна Pi. Это казалось простым в настройке, и я был бы счастлив изучить новый инструмент. Я установил и он работает нормально (кажется). Я могу digили nslookupпрозвища Пи (которые я предлагаю в /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, с которым я довольно хорошо знаком. Я настроил переадресацию портов, чтобы я мог подключаться по SSH к Pi, и я также изучил другие параметры. Я знаю, что до того, как я начал этот проект, я получал свои 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как у меня уже есть. Может ли кто-нибудь помочь мне здесь? Я постараюсь предоставить любую дополнительную информацию по желанию.

c.anna
источник
Попробуйте поставить пи в качестве первого DNS-сервера, он работает тогда?
Тердон
1
Маршрутизатор - правильное место, чтобы сделать это. Если по какой-то причине вам не удается настроить маршрутизатор на использование имени для Pi, запустите dnsmasq на Pi и заставьте маршрутизатор обслуживать Pi в качестве DNS-сервера. Похоже, ваша проблема заключается в правильной настройке маршрутизатора.
Жиль "ТАК ... перестать быть злым"
Вы обновляете аренду DHCP на клиенте после обновления настроек DNS на маршрутизаторе? Конфигурация DNS отправляется в аренду DHCP, поэтому она должна получить новую аренду, чтобы получить новые настройки. В качестве альтернативного решения вы также можете обратиться к mDNS / zeroconf / avahi.
Патрик

Ответы:

2

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

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

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

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

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

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

Iain
источник
1
Спасибо за вашу помощь! Я понимаю, что вы говорите о том, что DNS не является согласованной системой, поэтому я установил Pi на основной DNS-сервер в моем маршрутизаторе. Затем я возобновил аренду DHCP на моей машине с Windows. Тем nslookup oberonне менее, по- прежнему не работает. Одна вещь, которую я не упомянул в тексте моего первоначального поста, это то, что в случае nslookupнеудачи он говорит, что используемый им сервер был fe80IPv6-адресом, который, как я знаю, является зарезервированным локальным адресом ссылки. Но я не знаю, что это значит для DNS. Моя коробка Windows запрашивает себя? dnsflushне меняет это поведение.
13
И что бы это ни стоило, разрешение имени хоста LAN также не работает на моих устройствах iOS. Я еще не упомянул их, потому что у меня гораздо больше интроспективных возможностей с Windows, но если бы мои проблемы действительно были связаны исключительно с Windows, я бы не ожидал, что у этих устройств будет та же проблема.
13
Кроме того, чтобы развеять ваши опасения по поводу .lanдомена, я настроил dnsmasqавтоматическое расширение простых имен хостов для добавления .lan. Запуск nslookup oberon.lan 192.168.1.151возвращает ожидаемый результатName: oberon.lan Address: 192.168.1.151
c.anna
Интересно, есть ли на работе «windowsism» или что-то подобное, называть ваши хосты непосредственно в домене верхнего уровня («oberon.») Довольно странно, oberon.lan имеет гораздо больше смысла. Следует помнить, что суффиксы доменов и «поисковые домены» часто добавляются к имени для его разрешения, например, «oberon» может быть разрешен и найден как «oberon.lan», если lan находится в поисковых доменах. Однако вышеприведенные запросы, похоже, не показывают, что это так, копание определенно имеет завершающий период на именах хостов, но имейте это в виду при тестировании!
13
Хм, после исправления основного днс, вам нужно будет переконфигурировать окна dhcp (перезагрузка адаптера должна сделать это), а затем проверить ipconfig /all, показывает ли правильный используемый сервер днс, если это правильно, вам может понадобиться flushdns. Но я не могу думать ни о чем другом, это должно работать.
Sourcejedi
1

Возможно, немного поздно, но отключение ipv6 на моем беспроводном адаптере помогло.

Zahood
источник
Upvote: Всегда хорошая идея. Если система не обнажена и не требует этого. И до сих пор (сентябрь 2017 г.) очень мало оборудования для домашних пользователей, которое бы соответствовало этой категории, если оно вообще есть.
SDsolar