Как сделать машину доступной из локальной сети, используя ее имя хоста


120

Вот информация о машине, к которой я хочу получить доступ, используя ее имя хоста:

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

Это стандартная установка Debian 6 (Squeeze), поэтому я пока ничего не возился.

Вот что я получаю от машины (на которой работает нестабильная версия Debian), пытающейся получить доступ к этой машине:

$ 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? Также смотрите обновленный пост.
чепанг

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

Большое спасибо. Посмотрим. О, и это больше статья, чем ответ :)
tshepang

3
Ответ «установить и настроить dnsmasq». Готово. :)
Уоррен Янг

Ответы:


145

В Интернете, включая локальные сети, машины звонят друг другу по IP-адресам . Чтобы получить доступ к машине B с машины A, используя имя машины B, у машины A должен быть какой-то способ сопоставить имя B с его IP-адресом. Есть три способа объявить имена машин на A:

  • хостов файл . Это простой текстовый файл, который отображает имена на адреса.
  • система доменных имен (DNS) . Этот метод используется в глобальной сети Интернет. Например, когда вы загружаете эту страницу в браузере, первое, что делает ваш компьютер, - это отправляет DNS-запрос, чтобы узнать адрес unix.stackexchange.com.
  • другие базы данных имен, такие как NIS , LDAP или Active Directory . Они используются в некоторых корпоративных сетях, но не очень часто (многие сети, которые используют NIS, LDAP или AD для пользовательских баз данных, используют DNS для имен компьютеров). Если ваша сеть использует один из них, у вас есть профессиональный сетевой администратор, который должен спросить его, что делать.

Есть много способов, которыми они могут работать на практике; невозможно охватить их всех. В этом ответе я опишу несколько распространенных ситуаций.

Файл хостов

Преимущество метода файла hosts заключается в том, что он не требует специального метода. Это может быть затруднительно, если у вас несколько машин, потому что вам нужно обновлять каждую машину, когда меняется имя одной машины. Это не подходит, если IP-адрес B назначается динамически (так что вы получаете другой адрес каждый раз, когда вы подключаетесь к сети).

Файл hosts - это простой список строк, сопоставляющий имена с IP-адресами. Это выглядит так:

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

В системах Unix файл hosts имеет вид /etc/hosts. На Windows это c:\windows\system32\drivers\etc\hosts. Почти каждая операционная система, которую вы можете подключить к Интернету, имеет похожий файл; В Википедии есть список .

Чтобы добавить запись для B в файл hosts 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. Отредактируйте файл hosts на A. Если A работает под управлением какой-либо системы Unix, вам нужно отредактировать /etc/hostsкак суперпользователь; см. Как запустить команду от имени системного администратора (root) .

DHCP + DNS в домашних или небольших офисных сетях

Этот метод, безусловно, самый простой, если у вас есть необходимое оборудование. Вам нужно настроить только одно устройство, и все ваши компьютеры будут знать имена друг друга. Этот метод предполагает, что ваши компьютеры получают свои IP-адреса через DHCP , что является способом, позволяющим компьютерам автоматически получать IP-адреса при подключении к сети. Если вы не знаете, что такое 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. х . у . г . Например, на маршрутизаторе Tomato, показанном выше, на вкладке «Сеть» есть настройка «IP-адрес маршрутизатора» со значением 10.3.0.1 и настройка «маска подсети» со значением 255.255.255.0, что означает, что компьютеры включены локальная сеть должна иметь адрес вида 10.3.0. г . Существует также диапазон адресов для автоматически назначаемых адресов 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директивы раскомментированы. (Строки, начинающиеся с a #, закомментированы.) Вы можете поместить имена в другой файл; если вы делаете, положите линию 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(как root), удалите каждую nameserverстроку и вставьте nameserver 127.0.0.1вместо нее.
    • Если вы используете resolvconf в 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 \ drivers \ etc \ hosts, и это работает. Спасибо!
Раду Рэдяну

Я выдернул свои волосы в поисках этого и нашел их в роутере, как вы и предлагали. Спасибо за подробную информацию!
Джейсон Туран

Если это сеть компании, я должен сообщить об этом в отдел инфраструктуры. добавить мой linux mac в список DNS-серверов, верно?
WesternGun

24

Использовать многоадресный DNS (mDNS). Это протокол с нулевой конфигурацией, который работает в подсетях локальной сети. Сервер не требуется. Использует .localTLD (то, что вы уже используете).

Потому что вы спрашиваете, все остальное кажется излишним. Если бы не было, то вы, вероятно, не спросили бы.


1
Похоже, что mDNS не поддерживается в Windows без установки чего-либо в каждом окне Windows.
Цитракс

1
@Zitrax Хороший вопрос (хотя это сайт * nix). Соответствующую информацию для установки Windows можно найти там - относительно просто.
TNE

3
Aka Zeroconf или Bonjour. Предоставляется avahiпакет (ы). Вы можете запросить свою сеть через, avahi-browse -alrнапример.
DanMan

4
vi /etc/dhcp3/dhclient.conf

send host-name "ubuntu-laptop";

а также

/etc/init.d/networking restart

Должен ли я запустить это на клиенте или хосте?
чепанг

Первый бит будет сделан на сервере 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.