понедельник, 6 апреля 2009 г.

dhcp и ddns

Речь идет о двух системах - клиент под Linux и сервер Windows. Достаточно стандартная ситуация: dhcp сервер раздает ip адреса и регистрирует имена компьютеров в dns (реализция ddns от Microsoft). При настройках dhcp по умолчанию, в dns регистрируются клиенты dhcp которые делают об этом специальный запрос dhcp. Суть проблемы - клиент под Linux, получая адрес от dhcp сервера, не регистрируется в dns.

Решение проблемы от Microsoft - в настройках dhcp сервера указать необходимость регистрации в dns клиентов dhcp не поддерживающих запросы обновления.

Решение проблемы от меня =) - я решил, а правильно это или нет, кто виноват и что делать оставим за кадром.

Пройдя путь решения по Misrosoft-овски я удивился, что продвинутый, в сетевом плане, Linux в достаточно тревиальном вопросе оказался, мягко говоря, не на высоте. Т.к. у меня Gentoo, то мой Gentoo-way был тернист =).

Первое, что было сделано, это освежение в памяти настроек dhcp. По дукументации, gentoo x86 handbook, предлагается использовать один из 3-х доступных dhcp клиентов: dhclient, dhcpcd или pump. Так же, в документации, есть простенькая табличка, в которой приведена краткая характеристика каждого из клиентов, из которой следует:

  • dhclient - создан ISC, теже люди, что и BIND делают. Очень гибкий, много настроек, но не умеет получать ntp и не отправляет имя хоста.
  • dhcpcd - основной клиент Gentoo, и активно развивается Gentoo, но имеет ряд багов (тормозит и падает).
  • pump - легкий, но не надежный и мало, что умеет

Естественно оказалось, что у меня используется именно dhcpcd. Когда выбирал, pump был отброшен из за нелестных отзывов, а dhclient из за того, что он входит в пакет dhcp, который еще и сервер, а лишнего на компьютер ставить не хотелось.

Из описания dhcpcd следует, что он не передает некий hostname. Как можно получать ip адрес и не передавать hostname я не понял, т.к. в dhcp регистрируется компьютер с именем. Т.к. для регистрации в dns необходимо слать специальный запрос, в man-е к dhcpcd нашел необходимую опцию "-F both" и внес ее в настроечный файл /etc/conf.d/net.

#/etc/conf.d/net
modules=( "dhcpcd" )
config_eth0=( "dhcp" )
dhcpcd_eth0="-F both"

Для проверки сделанных настроек удалил из dhcp выданную лицензию перестартовал dhcp и свой сетевой интерфейс, но желаемого результата не достиг, т.е. по моему имени адрес на dns сервере не разрешается.

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

Ok, меня предупреждали про проблемы с hosname, ставлю dhclient и изменяю в /etc/conf.d/net используемый модуль modules=( "dhclient" ). Долго читаю man-ы =). Для настройки dhclienta используется файл /etc/dhcp/dhclient.conf в котором необходимо указать опции регистрации в полученного ip адреса в dns. Вот тут и становится ясна суть проблемы =). Привожу содержание правильного конфигурационного файла dhclient для регистрации Linux компьютера в dns через dhcp по Microsoft:

#/etc/dhcp/dhclient.conf
send fqdn.fqdn "host.domain";
send fqdn.server-update on;
send fqdn.encoded off;

В send fqdn.fqdn указывается польное fqdn имя вашего компьютера. Строка "send fqdn.server-update on;" говорит о необходимости отправки запроса на обновление имени компьютера в dns. Ну и наконец, самая главная опция, которая решает все мои проблемы - fqdn.encoded, устанваливается в off.

Оказывается, что существует два способа передачи fqdn имени компьюетра. Это регламентируется в rfc 4702 The Dynamic Host Configuration Protocol (DHCP) Client. В этом документе описано, что при передаче имени, необходимо неким образом модифицировать передаваемое строку fqdn и считать ранее используемый варинт, отправка ascii строки, устаревшим и не используемым в современных dhcp клиентах.

Клиент dhcpcd отправляет fqdn в кодироанном виде по умолчанию, а опции запрещающей кодирование нет. В клиенте dhclient можно указать как отправлять fqdn на сервер.

В результате, Gento-way выглядит так: при необходимости регистрации имени компьютера с полученным по dhcp адресом в dns Microsoft, необходимо использовать клиента dhcp - dhclient, с указанными опции обязательной регистрации в dns и передачи fqdn без кодирования.

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