Я работаю над созданием домашней интрасети для себя и моих соседей по комнате. Моя идея заключается в том, что мы сможем хранить такие вещи, как прошлые счета за коммунальные услуги, в месте, которое будет более доступно, чем ящик на кухне и т. д. В любом случае, у меня есть Apache 2, работающий на Raspberry Pi, в моей локальной сети, и если я использую его IP-адрес, я могу получить доступ к страницам, обслуживаемым на Pi. Поскольку я делаю этот проект больше для того, чтобы узнать о сетях, чем для предоставления услуг в моей квартире, я подумал, что было бы здорово, если бы моя сеть могла предоставлять разрешение имен хостов для моей локальной сети. Поэтому вместо того, чтобы указывать своему браузеру на 192.168.1.151
IP-адрес 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
Обратите внимание, что SERVER
is 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 моего маршрутизатора на следующую:
Итак, с этой конфигурацией я ожидал, что смогу сделать 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 на моем беспроводном адаптере помогло.