Використання DNSMasq для роздільної здатності локального хоста


9

Я працюю над створенням домашньої інтрамережі для мене та моїх сусідів по кімнаті. Моя ідея полягає в тому, що ми зможемо зберігати речі, наприклад минулі рахунки за комунальні послуги, у доступнішому місці, ніж ящик на кухні тощо. У будь-якому випадку, у мене 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прізвиська Пі (які я пропоную в /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це 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як у мене вже є. Хтось може мені тут допомогти? Я спробую надати будь-яку додаткову інформацію.


Спробуйте поставити pi як перший DNS-сервер, він працює потім?
тердон

1
Роутер - це правильне місце для цього. Якщо з якоїсь причини вам не вдасться змусити ваш маршрутизатор надати ім’я для Pi, запустіть dnsmasq на Pi та змусивши маршрутизатор служити Pi як сервер DNS. Схоже, ваша проблема правильно налаштувати маршрутизатор.
Жил "ТАК - перестань бути злим"

Ви поновлюєте оренду DHCP для клієнта після оновлення налаштувань DNS на маршрутизаторі? Конфігурація DNS надсилається в оренду DHCP, тому для отримання нових налаштувань вона повинна отримати нову оренду. В якості альтернативного рішення ви також можете розглянути mDNS / zeroconf / avahi.
Патрік

Відповіді:


2

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

Що буде, це первинний сервер буде запитуватися. Якщо цей час вичерпано, який може бути другий або два, наступний сервер буде запитуватися. DNS не є системою «консенсусу», якщо один із віддалених серверів запитується, він врешті-решт виявить результат того, що ваше ім'я хоста авторитетно НЕ існує, з точки зору Інтернет-сервера DNS.

Вам потрібні власні dns локальної мережі як основний DNS-сервер. Інші створили б відповідні резервні сервери, але я б подумав просто повністю відмовитись від цього.

Також зауважте, що ваш зворотний dns (IP для пошуку імені) вирішує значення "hostname.lan", але ваші тести на дозвіл вперед мають просто ім'я хоста. У вас також має бути десь встановлена ​​роздільна здатність для hostname.lan. Хоча може бути багато "ім'я для адреси" переадресації для хоста, існує очікування, що існує зворотний пошук IP для імені, який, в свою чергу, має відповідне ім'я для цього запису IP. Це не завжди важливо і просто змушує файли журналів скигнути іноді, але деякі речі до цього чутливіші, ніж інші.

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

Потрібно сказати, що, як ви вперше роздумували, ви дуже далеко не самотні в створенні цього налаштування, майже кожна розумно розвинена корпоративна локальна мережа та велика кількість перерозвинених домашніх локальних мереж матимуть таке налаштування.


1
Дякую за вашу допомогу! Я розумію, що ви говорите про те, як DNS не є консенсусною системою, тому я встановив Pi на основний сервер DNS у своєму маршрутизаторі. Потім я відновив оренду DHCP на своїй машині Windows. Однак nslookup oberonвсе одно не працює. Одне, що я не згадував у тексті свого первісного повідомлення, - це те, що коли nslookupне вдалося , це говорить про те, що сервер, який він використовував, був fe80IPv6 адресою - що я знаю, це зарезервована локальна адреса посилання. Але я не знаю, що це означає для DNS. Чи запитує сам ящик Windows? dnsflushне змінює цю поведінку.
c.anna

Оскільки це варті, роздільна здатність імені локальної мережі також не працює на моїх пристроях iOS. Я ще не згадував про них, тому що в мене набагато більше інтроспективних можливостей з Windows, але якби мої проблеми справді виникали виключно з Windows, я б не очікував, що ці пристрої матимуть ту ж проблему.
c.anna

Крім того, щоб усунути ваші занепокоєння щодо .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 знаходиться в пошукових доменах. Однак вищезазначені запити, схоже, не показують, що це так, копання конкретно має завершальний період для імен хостів, але будьте в курсі цього при тестуванні!
iain

Хм, після виправлення основного dns вам потрібно буде повторно dhcp windows (скидання адаптера повинно це зробити), а потім перевірити, ipconfig /allчи відображається правильний dns-сервер, який використовується, якщо це правильно, то вам може знадобитися flushdns. Але я не можу придумати нічого іншого, це повинно працювати.
sourcejedi

1

Можливо, трохи пізно, але вимкнення ipv6 на моєму бездротовому адаптері зробив свою справу.


Оновлення: Завжди хороша ідея. Якщо тільки система там не гола і цього не вимагає. І поки що (вересень 2017 року) є дуже мало обладнання для домашніх користувачів, яке відповідає цій категорії, якщо вона взагалі є.
SDsolar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.