Страницы

вторник, 4 сентября 2012 г.

Настройка разрешения доменных имен в Ubuntu. ping hostname unknown host


Правильная настройка системы разрешения имен в Ubuntu

Разрешение имен - преобразование имени компьютера, воспринимаемого человеком, в цифровой адрес компьютера.
Постоянно возникающая проблема разрешения  имен в Ubuntu, из-за неполной конфигурации "из коробки", доставляет массу неудобств при взаимодействии в сетях, в частности с микросервером, с windows компьютерами.
1. Невозможность сделать "пинг" по имени хоста.
root@microserver#ping mir
ping: unknown host mir

root@mir: ping microserver
ping: unknown host microserver

2. Трудности просмотра через графические программы (Nautilus). Требуется указывать ip-адрес, что влечёт за собой его предварительное выяснение.
3. Неработающий просмотр сети в Nautilus.

Данная заметка написана для окончательного понимания процесса именования и разрешения имен в Ubuntu.
Правильная настройка включает в себя как настройку микросервера так и клиентов, т.к. многие возможности недоступны "из-коробки".

Что можно получить при правильной настройке разрешения имен в Ubuntu 12.04 микросервера

Автоматическую конфигурацию клиентов сети, проводных и беспроводных, с корректным заданием шлюза в сеть интернет.
Корректно работающий просмотр сетей в Windows и Ubuntu.
Автоматическую доступность всех компьютеров и устройств по их именам. по NetBIOS-именам в домашней локальной сети, домашней беспроводной сети.
Работающий кэширующий DNS сервер в домашней сети
Дополнительные возможности локальных соединений (link-local) точка-точка (ad-hoc) проводных клиентов без сервера в сети.
Сервисы обмена файлами, сетевые принтеры.
Автоматически публикуемые сервисы mDNS, что на пользовательском уровне обеспечивает удобство в разных программах, таких как eKiga, Nautilus.
Например:
Навигатор Avahi -SSH. Список устройств с доступом SSH
Броузер Nautilus видит опубликованные сервисы Avahi


Имя компьютера - Hostname

Имя компьютера(hostname) задается в файле /etc/hostname


Процесс разрешения имен в Ubuntu - name resolve order

Файл /etc/nssswitch.conf конфигурирует способ, которым следуют стандартные библиотечные процедуры разрешения имен, будь то  имена компьютеров (hosts), пользователей (users), группы (groups).
Каждая база данных имен может иметь разнообразные источники - текстовые файлы (/etc/hosts), локальные базы данных, DNS, NIS, WINS, LDAP и пр.
Так сказать - исторические наслоения способов разрешения имен.


Посмотрим файл: /etc/nsswitch.conf подсистемы Name service switch
root@microserver#cat /etc/nsswitch.conf

При установленном сервере mDNS (avahi-daemon)
...
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
...
Минимальный порядок опроса:
...
hosts: files dns
...

Для разрешения windows-имен компьютеров:

...
hosts: files wins dns 
...


Первое простейшее решение - /etc/hosts

Простой текстовый файл /etc/hosts сопоставляющий имя компьютера (hostname) и ip-адрес. Аналог листка бумаги с записанными ip-адресами и именем компьютера.
Если на микросервере внести запись в /etc/hosts и на настольном компьютере проделать тоже самое, то проблема решиться. Вот выдержка из файлов:

root@microserver#cat /etc/hosts
...
192.168.3.8 mir
...

root@mir#cat /etc/hosts

...
192.168.3.1 microserver
...



После этого, пинги по имени компьютера проходят в обе стороны.

root@microserver#ping mir

PING mir (192.168.3.8) 56(84) bytes of data.
64 bytes from mir (192.168.3.8): icmp_req=1 ttl=64 time=0.158 ms
...


root@mir: ping microserver

PING microserver (192.168.3.1) 56(84) bytes of data.

64 bytes from microserver (192.168.3.1): icmp_req=1 ttl=64 time=0.299 ms

...


Главный недостаток этого способа - это ip-адрес, который может меняться при каждой загрузке, если настроено динамическое получение, посредством dhcp. Исправляется это выделением постоянного ip-адреса настольному компьютеру на сервере dhcp, с помощью директивы host (dhcp-host) в конфигурационном файле.
Второй недостаток в том, что при увеличении сети, для нормального разрешения имен, надо на каждом компьютере добавлять информацию о каждом компьютере сети, что весьма трудоемко и чревато пропусками.
Что и ограничивает применение этого способа в небольших одноранговых сетях со статической ip-адресацией и в тестовых условиях недоступности динамических сервисов.

Конфигурация без усилий. Avahi - ZeroConf - mDNS - .local

Avahi - свободная реализация разделов "DNS Service Discovery" и  "Multicast DNS" спецификации "Zeroconf Networking".
Multicast DNS (mDNS) - децентрализованная широковещательная доменная система имен. Была разработана в компании Apple, под кодовым именем Bonjour. Предназначена для автоматического конфигурирования сетевого интерфейса при соединениях без выделенного сервера, т.н. link-local. Например, соединение двух компьютеров посредством ehternet-интерфейса, простым ethernet-проводом, в результате произойдет автоконфигурация интерфейсов и компьютеры будут иметь dns имена вида host.local. Использование этой технологии позволит обойтись без ручного вмешательства в сетевые настройки.

Демон mDNS отвечает на порту 5353 на широковещательные сообщения по адресу  224.0.0.251. Если при установленном и настроенном демоне avahi-daemon, команды ping mir.local или microserver.local не работают, то возможно проблема в настройках брендмауэра.

Домен .local является доменом по умолчанию, для mDNS.

В настольной Ubuntu сервис avahi устанавливается по умолчанию и работает. Настольный компьютер отзывается по адресу: mir.local с любого компьютера оборудованного avahi.

В серверной версии Ubuntu требуется установка пакета avahi-daemon.
root@microserver# apt-get install avahi-daemon
После установки, микросервер также становиться доступным по адресу: microserver.local

Есть конфигурационный файл: /etc/default/avahi-daemon, но настроек в нём нет.
Основной конфигурационный файл: /etc/avahi/avahi-daemon.conf
Также доступны: /etc/avahi/hosts и папка для статически определимых сервисов /etc/avahi/services/

Для быстрой публикации сервисов роутеров и пр. оборудования, без поддержки avahi, надо создать xml-файл вида в папке /etc/avahi/services/.


root@microserver#cat /etc/avahi/services/bigpond.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">



<service-group>
  <name replace-wildcards="yes">Bigpond router</name>
  <service>
    <type>_ssh._tcp</type>
    <host-name>bigpond.local</host-name>
    <port>22</port>
  </service>
  <service>
    <type>_http._tcp</type>
    <host-name>bigpond.local</host-name>
    <port>80</port>
  </service>
</service-group>
В данном случае, определены предоставляемые сервисы роутером Bigpond, т.к. он сам не может об этом рассказать. Также для роутера определено статически имя в домене .local в файле: /etc/avahi/hosts

root@microserver# cat /etc/avahi/hosts
10.0.0.138 bigpond.local

После этого роутер доступен по адресу bigpond.local. Особенность роутера bigpond в том, что он не имеет hostname.

Публикация разнообразных сервисов, посредством avahi позволяет домашней сети приобрести удобства управления разнообразным оборудованием, потому что обычно все сетевые устройства имеют тот или иной интерфейс настройки и знать о них в одном месте (avahi-discovery и т.п.) очень удобно.


В моих условиях, демон avahi-daemon обязателен к установке, т.к. это резко упрощает взаимодействие между компьютерами.

Повышается удобство работы по протоколу ssh - ssh microserver.local, что часто избавляет от выяснения текущего ip-адреса и через какой интерфейс идёт подключение к микросерверу. А интерфейсом может быть много и на всех на них работает сервис mDNS.

Единственный недостаток - это продолжающаяся недоступность компьютеров по именам(hostname). ping mir & ping microserver - всё ещё не работают "из коробки".

И эту проблему может автоматически решить DNS-сервер в локальной домашней сети.

Централизованная система доменных имен DNS - bind9

Domain Name Service (DNS) - сервис сети Интернет, отображающий (преобразующий) ip-адреса в доменные имена (также и в полностью уточнённые доменные имена FQDN) и обратно.
Микросервер с установленным сервисом DNS выступает в роли сервера имен (name server).

Если объяснить просто, то DNS сервер, это программа ведения списка имен компьютеров, с возможностью обращения к нему через локальную (глобальную) сеть по стандартному протоколу. В частности, список имен (база данных имен), доступен по протоколу UDP на порту 53. Обращаясь с ip-адресом, можно получить  имя компьютера и наоборот.

Наиболее известный сервер DNS - BIND (Berkley Internet Naming Daemon).
Установка сервиса DNS bind9 и сопутствующих утилит.
root@microserver#apt-get install bind9
root@microserver#apt-get install dnsutils

Конфигурационные файлы BIND:
/etc/bind/named.conf
/etc/bind/named.conf.options
/etc/bind/named.conf.local

На сервере BIND существует возможность динамического обновления доменной зоны, информацией поставляемой DHCP сервером, о именах подключенных клиентов, что дает искомую возможность доступности по hostname.

Однако, конфигурацию BIND отложим на потом, т.к. есть более быстрый способ - DNSMasq.


DNSMasq - альтернатива связке BIND & DHCPd

DNSmasq - легкий DNS,DHCP,TFTP сервер, применим в небольших домашних сетях.
Возможности сервера позволяют автоматически вносить в список имен DNS, имена компьютеров обращающихся по протоколу DHCP. Это обеспечивает доступность нового компьютера всем компьютерам локальной сети по имени вида: mir, mir.home.


Один конфигурационный файл /etc/dnsmasq.conf

Установка сервера dnsmasq
root@microserver# apt-get install dnsmasq

Для того, чтобы новый сервер dnsmasq не конфликтовал с dhcpd сервером, тот надо остановить и исключить из автозагрузки, что можно сделать в файле: /etc/default/isc-dhcpd-server. Либо деинсталлировать, что менее полезно. Также, при использовании виртуализации, сервер dnsmasq используется в качестве dns-сервера для виртуальных машин и может вызывать конфликт с новой копией.


Остановка и запуск dnsmasq-сервера:
root@microserver#stop dnsmasq
root@microserver#start dnsmasq


Минимальная настройка конфигурации DNSMasq для микросервера:

root@microserver#nano /etc/dnsmasq.conf
# Конфигурация микросервера
# сервер: микросервер
# Определим интерфейсы на которых будет работать сервис DNS,DHCP 
# проводная сеть home (eth0)
interface=home
# беспроводная сеть ap (wlan0)
interface=ap

#Определим домен для локальной сети domain=home

# Определим диапазон выделяемых адресов для проводных клиентов
dhcp-range=192.168.3.11-192.168.3.111,12h
# Определим диапазон выделяемых адресов для беспроводных клиентов
dhcp-range=192.168.5.11-192.168.5.111,12h
no-hosts
# Определим конфигурацию для коммутатора cisco, заменить нули на нормальный MAC-адрес
dhcp-host=00:00:00:00:00:00, 192.168.3.2

Клиентский компьютер получивший настройки от микросервера:
Сетевые настройки проводной сети home
Видно, что маршрут по-умолчанию проходит через микросервер (192.168.3.1). DNS-сервер, разрешающий имена в адреса, также микросервер. Однако, маршрут по-умолчанию может быть скорректирован следующими настройками:

Окно "Маршруты"
Если опцию "Игнорировать автоматически полученные маршруты" отметить, то маршрут по-умолчанию не будет перенесен в таблицу маршрутов и команда ip route не покажет строку вида:
default via 192.168.3.1 dev home  proto static

После настройки имеет смысл провести ряд тестов:
С микросервера:
root@microserver# ping mir
root@microserver# ping cisco
С настольного компьютера:
i@mir$ ping microserver
i@mir$ ping cisco


NetBIOS Name server - NMBD

NMBD сервер имен для SMB/CIFS клиентов (обычно Windows компьютеры). NMBD отвечает на запросы "NetBIOS over IP", задаваемые клиентами Samba, SMB/CIFS такими как Windows Vista, Windows 7.
NetBIOS over IP - специальная адаптация раннего протокола NetBIOS к сетям TCP/IP.
Протокол является обеспечивающим участником процесса "Сетевое окружение" в Windows, со стороны микросервера.

NMBD слушает такие широковещательные запросы на порту 137 по протоколу UDP и если встречает в запросе собственное NetBIOS-имя, то возвращает IP-адрес компьютера, на котором запущен. По умолчанию, NetBIOS имя компьютера совпадает с hostname, но может быть изменено в конфигурации smb.conf.
NetBIOS микросервера = microserver
Также могут быть добавлены дополнительные имена NetBIOS к компьютеру. Для чего это может быть понадобиться?

В многосетевых компьютерах NMBD демон запускается на каждом интерфейсе и по идее возвращает IP-адрес интерфейса.

NMBD следует порядку разрешения NetBIOS имен, указанному в конфигурации smb.conf, также и с привлечением файл /etc/samba/lmhosts.

Файл /etc/samba/lmhosts - подобен файлу /etc/hosts, но только для имен NetBIOS.
Синтаксис текстового файла lmhosts можно просмотреть подробно в man lmhosts, но для понимания достаточно:
192.168.3.1 MICROSERVER

Файл lmhosts может быть использован для указание NetBIOS имени различных статических устройств, присутствие которых в сети Windows желательно, но они сами не могут конфигурировать свое NetBIOS имя (отсутствующий nmbd-демон) и разумеется для тестирования протокола Samba.

Действие  NMBD ограничивается сегментом сети, т.к. протокол широковещательный (multicast).


WINS - Windows Internet Name Service

NMBD может быть настроен как WINS сервер (Windows Internet Name Service) и как WINS proxy.

Преимущества WINS сервера в том, что этот сервер поддерживает динамическую базу данных NetBIOS-имен компьютеров, которые сами и регистрируют свои имена на WINS сервере, также поддерживает уникальность NetBIOS имен в локальной сети.

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


Функциональность WINS сервера запускается указанием директивы wins support = yes в конфигурационном файле /etc/samba/smb.conf. База имен WINS сервера хранится в файле /var/locks/wins.dat.
Присутствует опция wins hook, позволяющая организовать связь посредством внешней программы, для обновления DNS, при появлении новой записи в базе имен WINS.


Опция wins server более подходит для клиентской настройки Samba (например на компьютере mir). Указывает, сервер wins.

Указание о том, на каком сервере регистрировать свое имя, клиентский компьютер может получить при динамической конфигурации по протоколу DHCP, для этого в используются опции в /etc/dhcp/dhcpd.conf (при использовании isc-dhcp-server), на пример для микросервера:
...

option netbios-name-servers 192.168.3.1;
...
при использовании сервера DNSMasq в качестве DHCP:
...
dhcp-option=44,192.168.3.1
dhcp-option=44,192.168.5.1
dhcp-option=46,8
...
т.к. используется 2 интерфейса (home & ap). Опция dhcp-option=46,8  задает способ запроса NetBIOS имен, в данном случае - гибридный - через WINS-сервер и затем широковещательный.

Возможные значения опция 46:
1.B-node (Broadcast): Разрешение имен с помощью широковещательных запросов, WINS не используется.
2. P-node (Peer): Используется только WINS.
4. M-node (Mixed): Смешанный тип, сначала используется широковещательный запрос, затем в случае неудачи - WINS
8. H-node (Hybrid): WINS, а затем широковещательный запрос.

Вот вывод на стороне клиента, откуда видно что получен адрес wins сервера:
i@mir$ cat /var/log/syslog 


Sep  4 11:03:34 mir dhclient: DHCPACK of 192.168.3.80 from 192.168.3.1
Sep  4 11:03:34 mir dhclient: bound to 192.168.3.80 -- renewal in 20410 seconds.
Sep  4 11:03:34 mir NetworkManager[1237]: <info> (home): DHCPv4 state changed preinit -> reboot
Sep  4 11:03:34 mir NetworkManager[1237]: <info> Activation (home) Stage 4 of 5 (IP4 Configure Get) scheduled...
Sep  4 11:03:34 mir NetworkManager[1237]: <info> Activation (home) Stage 4 of 5 (IP4 Configure Get) started...
Sep  4 11:03:34 mir NetworkManager[1237]: <info>   address 192.168.3.80
Sep  4 11:03:34 mir NetworkManager[1237]: <info>   prefix 24 (255.255.255.0)
Sep  4 11:03:34 mir NetworkManager[1237]: <info>   gateway 192.168.3.1
Sep  4 11:03:34 mir NetworkManager[1237]: <info>   hostname 'mir'
Sep  4 11:03:34 mir NetworkManager[1237]: <info>   nameserver '192.168.3.1'
Sep  4 11:03:34 mir NetworkManager[1237]: <info>   domain name 'home'
Sep  4 11:03:34 mir NetworkManager[1237]: <info>   wins '192.168.5.1'
Sep  4 11:03:34 mir NetworkManager[1237]: <info> Activation (home) Stage 5 of 5 (IP Configure Commit) started...
...

А вот воспользуется ли какой-либо демон этой полученной информацией? Samba клиент по идее должен обновить опцию wins servers, но не факт. Ключевое слово по теме: dhcpcd-hook-samba. И да, в Ubuntu 12.04 эти изменения не вносятся, что и показывает содержимое клиентской конфигурации Samba:
i@mir$ cat /etc/samba/smb.conf | grep wins

Для исправления данной оплошности, надо сделать несколько изменений в клиентской конфигурации.
Существуют автоматически вызываемые скрипты, который выполняются, когда dhclient завершает работу, располагаются они в /etc/dhcp/dhclient-exit-hooks.d/. Там можно обнаружить скрипт обновления времени, например.

Достаточно создать скрипт,в этой папке, который будет автоматически редактировать файл /etc/samba/smb.conf на клиенте и вносить сведения о новом сервере wins:

Содержимое скрипта /etc/dhcp/dhclient-exit-hooks.d/smb-wins-update
i@mir$ cat /etc/dhcp/dhclient-exit-hooks.d/smb-wins-update

#!/bin/bash 
/usr/bin/sed 's/\(wins server = \)\([0-9][\.0-9]*\)/\1'$new_netbios_name_servers'/' </etc/samba/smb.conf >/tmp/smb.temp 
cp /tmp/smb.temp /etc/samba/smb.conf 


Незабываем сделать скрипт исполняемым:
i@mir$ chmod +x /etc/dhcp/dhclient-exit-hooks.d/smb-wins-update


Проверка - простым просмотром файла /etc/samba/smb.conf на клиенте, после подключения.


WINBIND

WINBIND демон (winbindd)  для разрешения имен с помощью Windows NT серверов, а также информации о пользователях и группах. Входит в пакет Samba.

Winbind используется совместно с Name Service Switch (переключатель-диспетчер служб имен).
В файле /etc/nsswitch.conf можно указать:
hosts: files dns wins
и если имя не удалось разрешить стандартными средствами linux, то будет использован wins сервер.
А вот какой WINS сервер будет использован зависит от настроек сети Windows.


Конфигурация windbind сервера выполняется в файле /etc/samba/smb.conf


Для домашней сети, использование winbind - избыточно и этот сервис можно деактивировать. В больших сетях, управляемых доменной политикой, winbind поможет подключить микросервер к Active Directory и позволит пользователям зарегистрированным в домене получать доступ к ресурсам микросервера под своими именами.

Воспользуемся командой net (man net). Видим, что в домашней сети не обнаружено доменов Windows:

root@microserver# net ads info
ads_connect: No logon servers
ads_connect: No logon servers
Didn't find the ldap server!

Проверить наличие WINS сервера в локальной сети:

i@mir$ wbinfo -p
Ping to winbindd succeeded


При запущенному сервере WINBIND, работают команды разрешения имен на микросервере:
root@microserver# wbinfo -N MICROSERVER
root@microserver# wbinfo -N MIR
При остановленном сервере WINBIND не работают:
root@microserver# wbinfo -N MICROSERVER

failed to call wbcResolveWinsByName: WBC_ERR_WINBIND_NOT_AVAILABLE
Could not lookup WINS by name MICROSERVER

Команда smbclient не зависит от работы winbind и можно просмотреть ресурсы микросервера: 


root@microserver# smbclient -N -L MICROSERVER


Anonymous login successful
Domain=[HOME] OS=[Unix] Server=[Samba 3.6.3]

Sharename       Type      Comment
---------       ----      -------
IPC$            IPC       IPC Service (hp proliant microserver)
avoska          Disk      авоська для обмена
Anonymous login successful
Domain=[HOME] OS=[Unix] Server=[Samba 3.6.3]

Server               Comment
---------            -------
MICROSERVER          hp proliant microserver

Workgroup            Master
---------            -------
HOME                 MICROSERVER



Замеченные проблемы
Редактирование файла /etc/nsswitch.conf может повлечь за собой недоступность компьютеров по имени, а также неявную неработоспособность многих программ.
Существует проблема взаимодействия домена .local системы mDNS и домена .local системы обычной DNS.
При входе через ssh (ssh microserver) выдается сообщение о подмене хоста (DNS spoofing).

Ресурсы

https://help.ubuntu.com/community/HowToZeroconf
http://0pointer.de/lennart/projects/nss-mdns/
Обзор службы WINS. http://technet.microsoft.com/ru-ru/library/cc725802(v=ws.10).aspx
DHCP options. http://www.opennet.ru/man.shtml?topic=dhcp-options&category=5&russian=0
Настройка взаимодействия Linux с Windows. Samba. http://pm4u.narod.ru/samba.htm
Порты протокола TCP/IP, используемые операционной системой Windows NT. http://support.microsoft.com/kb/150543/ru

Комментариев нет: