it-swarm-ru.tech

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

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

$ 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
131
tshepang

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

  • a файл hosts . Это простой текстовый файл, который отображает имена на адреса.
  • система доменных имен (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 screenshot

Введите MAC-адрес, IP-адрес и желаемое имя. Вы можете выбрать любой IP-адрес в диапазоне адресов вашей локальной сети. Большинство домашних маршрутизаторов предварительно настроены для диапазона адресов вида 192.168. x . y или 10. x . y . г . Например, на маршрутизаторе 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 (см. раздел "Файл 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 (как 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 (как root).
  • Скажите другим машинам использовать 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).

150
Gilles 'SO- stop being evil'

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

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

27
tne
vi /etc/dhcp3/dhclient.conf

send Host-name "ubuntu-laptop";

а также

/etc/init.d/networking restart
4
LanceBaynes

Компьютеры не просто волшебным образом знают, какие имена хостов принадлежат каким IP-адресатам. Даже на localhost, есть какой-то поиск.

Вам нужно будет настроить другие системы для использования какой-либо службы поиска имен. Это может быть /etc/hosts на клиентском, ldap, nsswitch или обычном DNS-сервере. Я использую bind и ​​ввожу все локальные машины в локальный домен, а затем использую DNS для этого сайта.

3
Caleb

Если вы не хотите вмешиваться в файл хоста и случайно владеете именем домена в Интернете и доступом в Интернет, вы можете создать поддомен типа A, который указывает на ваш внутренний IP-адрес. Например, настройка intranet-pc1.someperson.com и ​​указывает на 10.0.1.13.

1
MK Yung