Як зробити машину доступною через локальну мережу за допомогою свого імені хоста


120

Ось деталі машини, до якої я хочу отримати доступ, використовуючи її ім'я хоста:

$ hostname
hostname
$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   hostname.company.local  hostname

Це встановлення Debian 6 (Squeeze) за замовчуванням, тому я ще ні з чим не посварився.

Це те, що я отримую з машини (на якій працює Debian Unstable), намагаючись отримати доступ вище машини:

$ ping hostname
ping: unknown host hostname
$ ping hostname.company.local
ping: unknown host hostname.company.local
$ cat /etc/resolv.conf
nameserver 192.168.2.21
nameserver 192.168.2.51
search company.local

Вам потрібно щось зробити на клієнті (на машині, де ви працюєте ping) або на машині, з якою клієнт радиться. Що таке ОС на клієнті? Яка його конфігурація DNS?
Жиль

Що таке конфігурація DNS? Також див. Оновлений пост.
tshepang

1
Чи є моя відповідь тими речами, якими ти займався? Якщо так, то питання вимагає спрощення - хто знає pingі , /etc/hostsале не про DNS в будь-якому випадку?
Жиль

Дуже дякую. Буде мати вигляд. О, і це скоріше стаття, ніж відповідь :)
tshepang

3
Відповідь - "встановити та налаштувати dnsmasq". Зроблено. :)
Warren Young

Відповіді:


145

В Інтернеті, включаючи локальні мережі, машини дзвонять один одному за IP-адресами . Щоб отримати доступ до машини B з машини A, використовуючи ім'я машини B, машина A повинна мати певний спосіб зіставити ім'я B з його IP-адресою. Існує три способи оголошення імен машин на A:

  • хостів файл . Це простий текстовий файл, який відображає імена за адресами.
  • система доменних імен (DNS) . Це метод, який використовується в глобальному Інтернеті. Наприклад, коли ви завантажуєте цю сторінку в браузері, перше, що робить ваш комп’ютер, - це зробити запит DNS, щоб знати адресу unix.stackexchange.com.
  • інші бази даних імен, такі як NIS , LDAP або Active Directory . Вони використовуються в деяких корпоративних мережах, але не дуже часто (багато мереж, які використовують NIS, LDAP або AD для баз даних користувачів, використовують DNS для імен машин). Якщо ваша мережа використовує один із них, у вас є професійний адміністратор мережі, і ви повинні запитати його, що робити.

Є багато способів, як це може працювати на практиці; покрити їх усіх неможливо. У цій відповіді я опишу кілька поширених ситуацій.

Файл хостів

Метод файлів хостів має ту перевагу, що він не потребує спеціальних методів. Це може бути громіздко, якщо у вас є кілька машин, оскільки вам доведеться оновлювати кожну машину, коли змінюється назва однієї машини. Не годиться, якщо IP-адреса B призначається динамічно (щоб ви отримували іншу кожну під час підключення до мережі).

Файл хостів - це простий список рядків, які відображають імена до IP-адрес. Це виглядає приблизно так:

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

У системах Unix файл хостів є /etc/hosts. У Windows це c:\windows\system32\drivers\etc\hosts. Практично в кожній операційній системі, яку можна підключити до Інтернету, є подібний файл; У Вікіпедії є список .

Щоб додати запис для B у файлі хостів A:

  1. Визначте IP-адресу B. На B виконайте команду ifconfig(якщо команду не знайдено, спробуйте /sbin/ifconfig). Вихід буде містити такі рядки:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab
              inet addr:10.3.1.42  Bcast:10.3.1.255  Mask:255.255.255.0
    

    У цьому прикладі IP-адреса B становить 10.3.1.42. Якщо є кілька inet addr:рядків, виберіть ту, яка відповідає вашій мережевій карті, ніколи не loвхід, тунель чи віртуальний запис.

  2. Відредагуйте файл хостів на A. Якщо A працює з якоюсь системою unix, вам потрібно буде відредагувати /etc/hostsяк суперкористувача; див. Як запустити команду як системний адміністратор (root) .

DHCP + DNS для домашніх або малих офісних мереж

Цей метод є найпростішим, якщо у вас є необхідне обладнання. Вам потрібно налаштувати лише один пристрій, і всі ваші комп’ютери будуть знати про імена один одного. Цей метод передбачає, що ваші комп'ютери отримують свої IP-адреси через DHCP , що є методом автоматичного отримання ІР-адреси під час підключення до мережі. Якщо ви не знаєте, що таке DHCP, вони, ймовірно, так і роблять.

Якщо у вашій мережі є домашній маршрутизатор , це найкраще місце для налаштування імен для машин, підключених до цього маршрутизатора. Спочатку потрібно з’ясувати MAC-адресу B. Кожен мережевий пристрій має унікальну MAC-адресу. На B запустіть команду ifconfig -a(якщо команду не знайдено, спробуйте /sbin/ifconfig -a). Вихід буде містити такі рядки:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab

У цьому прикладі MAC-адреса 01:23:45:67:89:ab. Ви повинні вибрати лінію HWaddr, яка відповідає мережевому порту, підключеному до маршрутизатора за допомогою кабелю (або Wi-Fi-картки, якщо ви підключені через Wi-Fi). Якщо у вас кілька записів, і ви не знаєте, що це таке, підключіть кабель і подивіться, який мережевий пристрій отримує IP-адресу ( inet addrрядок трохи нижче).

Тепер у веб-інтерфейсі вашого маршрутизатора знайдіть налаштування типу “DHCP”. Назва та місце налаштування повністю залежать від моделі маршрутизатора, але більшість мають аналогічний набір основних параметрів. Ось як це виглядає на прошивці Tomato :

скріншот помідорів

Введіть MAC-адресу, IP-адресу та потрібне ім'я. Ви можете вибрати будь-яку IP-адресу в діапазоні адрес вашої локальної мережі. Більшість домашніх маршрутизаторів заздалегідь налаштовані на діапазон адрес форми 192.168. х . у або 10. х . у . z . Наприклад, на маршрутизаторі Tomato, показаному вище, на вкладці "Мережа" є налаштування "IP-адреси маршрутизатора" зі значенням 10.3.0.1 та "Маска підмережі" зі значенням 255.255.255.0, що означає, що комп'ютери на локальна мережа повинна мати адресу форми 10.3.0. z . Існує також діапазон адрес для автоматично призначених DHCP-адрес (10.3.0.129–10.3.0.254); для призначеної вручну DHCP-адреси виберіть ту, яка не входить до цього діапазону.

Тепер підключіть B до мережі, і вона повинна отримати вказану вами IP-адресу, і вона буде доступна за вказаним іменем на будь-якій машині мережі.

Створіть власний DNS-сервер за допомогою Dnsmasq

Якщо у вас немає домашнього маршрутизатора, ви можете налаштувати ту саму функціональність на будь-якій машині Linux. Я поясню, як використовувати Dnsmasq для налаштування DNS . Є багато інших подібних програм; Я вибрав Dnsmasq, тому що його легко конфігурувати і легкий (наприклад, для цього використовується маршрутизатор Tomato, описаний вище). Dnsmasq доступний у більшості дистрибутивів Linux та BSD для ПК, серверів та мережевого обладнання.

Виберіть комп’ютер, який завжди увімкнено, має статичну IP-адресу, на якій працює якийсь Linux або BSD; назвемо це S (для сервера). На S встановіть dnsmasqпакет (якщо його ще немає). Нижче я припускаю, що файл конфігурації є /etc/dnsmasq.conf; розташування може залежати від певного розповсюдження. Тепер вам потрібно зробити кілька речей.

  • Скажіть Dnsmasq обслуговувати імена хостів на додаток до тих, які він отримує з Інтернету. Найпростіший спосіб - ввести імена та IP-адреси в /etc/hosts(див. Розділ "Файл хостів" вище) та переконайтесь, що /etc/dnsmasq.confця no-hostsдиректива не коментується. (Рядки, що починаються з а #, коментуються.) Імена можна помістити в інший файл; якщо ви робите, покладіть лінію addn-hosts=/path/to/hosts/fileв /etc/dnsmasq.conf.
  • Розкажіть Dnsmasq, як отримати IP-адреси для імен машин в Інтернеті.

    • Якщо ви використовуєте Debian, Ubuntu або похідні, встановіть resolvconfпакет. У більшості випадків все вийде з коробки.
    • Якщо ваш адміністратор мережі або ваш Інтернет-провайдер дав вам адреси серверів DNS, введіть їх /etc/dnsmasq.conf, наприклад:

      server=8.8.8.8
      server=8.8.4.4
      
    • Якщо ви не знаєте, які ваші поточні налаштування DNS, подивіться у файл /etc/resolv.conf. Якщо ви бачите рядок , як nameserver 8.8.8.8, поставити лінію server=8.8.8.8в /etc/dnsmasq.conf. Після зміни /etc/dnsmasq.confперезапустіть Dnsmasq. Команда зробити це залежить від розподілу; типові можливості включають restart dnsmasqабо /etc/init.d/dnsmasq restart.

  • Скажіть S використовувати послугу Dnsmasq для всіх запитів імен хоста. Відредагуйте файл /etc/resolv.conf(як корінь), видаліть кожен nameserverрядок і поставте nameserver 127.0.0.1замість нього.
    • Якщо ви використовуєте resolutionvconf на Debian або Ubuntu, це /etc/resolv.confможе бути неоптимальним, якщо ви встановили resolvconfпакет із мережею, що працює і працює. Переконайтеся , що файли base, headі tailв /etc/resolvconf/resolv.conf.d/каталозі не містять будь - яких nameserverзаписів, а потім запустити resolvconf -u(як корінь).
  • Скажіть іншим машинам використовувати S як DNS-сервер. Відредагуйте /etc/resolv.confта замініть всі nameserverрядки єдиним, nameserver 10.3.0.2де 10.3.0.2 - IP-адреса S (див. Вище, як дізнатися IP-адресу S).

Ви також можете використовувати Dnsmasq як сервер DHCP , щоб машини могли автоматично отримувати адресу, відповідну їх імені. Це виходить за рамки цієї відповіді; зверніться до документації Dnsmasq (це не складно). Зауважте, що в даній локальній мережі може бути лише один сервер DHCP (точне визначення локальної мережі виходить за рамки цієї відповіді).

Імена в глобальному Інтернеті

Поки що я припускав локальну мережу. Що робити, якщо ви хочете дати ім’я машині, яка знаходиться в іншому куточку світу? Ви все ще можете скористатися будь-яким із наведених вище способів, за винятком того, що частини, що включають DHCP, застосовні лише в локальній мережі. Крім того, якщо ваші машини мають загальнодоступні IP-адреси, ви можете зареєструвати для них власне загальнодоступне ім’я. (Ви можете призначити приватну IP-адресу і загальнодоступному імені; воно менш поширене і менш корисне, але технічних труднощів немає.)

Отримання власного доменного імені

Ви можете отримати власне доменне ім’я та призначити IP-адреси іменам хостів всередині цього домену. Вам потрібно зареєструвати доменне ім’я у постачальника доменних імен; зазвичай це коштує 10–15 доларів США на рік (для найдешевших доменів). Використовуйте веб-інтерфейс постачальника доменних імен, щоб призначити адреси іменам хостів.

Динамічний DNS

Якщо ваші машини мають динамічну IP-адресу, ви можете використовувати динамічний протокол DNS для оновлення IP-адреси, пов’язаної з ім'ям машини, коли адреса змінюється. Не всі постачальники доменних імен підтримують динамічний DNS, тому купуйте їх перед покупкою. Для особистого використання No-IP надає безкоштовну динамічну послугу DNS, якщо ви використовуєте їх власні домени (наприклад example.ddns.net).


Створіть власний сервер DNS за допомогою Dnsmasq: як я можу сказати іншій машині використовувати S, коли на іншому пристрої встановлено Windows
Radu Rădeanu

@Radu Ви можете десь змінити сервери DNS, пов’язані із з'єднанням, через панель керування. Я думаю, вам потрібно підтягнути властивості підключення мережевого інтерфейсу.
Жиль

Я оголосив c: \ windows \ system32 \ driver \ etc \ hosts, і це працює. Дякую!
Radu Rădeanu

Я витягнув волосся, шукаючи це, і знайшов його в маршрутизаторі, як ви запропонували. Дякуємо за детальну інформацію!
Джейсон Туран

Якщо це мережа компанії, я повинен повідомити про відділ інфраструктури. додати мій linux mac до списку серверів DNS, правда?
WesternGun

24

Використовуйте Multicast DNS (mDNS). Це протокол нульової конфігурації, який працює в підмережах LAN. Не потрібен сервер. Використовує .localTLD (для чого ви вже користуєтесь).

Оскільки ви запитуєте, все інше здається непосильним. Якби це не так, то, напевно, ви б не питали.


1
Здається, mDNS не підтримується у Windows, не встановлюючи щось у кожному вікні Windows.
Zitrax

1
@Zitrax Хороший момент (хоча це * nix-сайт). Відповідна інформація для установки Windows , можна знайти тут - відносно просто.
TNE

3
Ака Зероконф або Бонжур. Забезпечено avahiпакетами. avahi-browse -alrНаприклад, ви можете запитувати вашу мережу через .
DanMan

4
vi /etc/dhcp3/dhclient.conf

send host-name "ubuntu-laptop";

і

/etc/init.d/networking restart

Чи потрібно це запустити на клієнті чи хості?
thepang

Перший біт буде зроблено на сервері dhcp (і ви хочете запустити service restart dhcpd). Друга частина буде зроблена на клієнті, а в більшості дистрибутивів тепер слід виконувати як service networking restart.
Калеб

Як я пам’ятаю, мені потрібно запустити це лише на стороні клієнта ..
LanceBaynes

3

Комп'ютери не просто магічно знають, які імена хостів належать до IP-адресатів. Навіть у localhost є якийсь пошук.

Вам потрібно буде налаштувати ваші інші системи, щоб використовувати якусь послугу пошуку імен. Це може бути /etc/hostsна клієнтських, ldap, nsswitch або звичайних серверах DNS. Я використовую bindі ввожу всі локальні машини всередині локального домену, а потім він обслуговує DNS для цього сайту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.