LXF120:DrBrown3

Материал из Linuxformat.

Перейти к: навигация, поиск

Содержание

Открываем DHCP

DHCP В руководстве «назад к основам» этого месяца мы поговорим о DHCP и узнаем, откуда ваш ноутбук, по всей вероятности, получил свой IP-адрес.

DHCP – сокращение от Dynamic Host Configuration Protocol (протокол динамической настройки хостов). Эта технология позволяет назначать компьютерам сетевую конфигурацию «на лету» вместо того, чтобы жестко прописывать ее в статических параметрах машины. Эти настройки назначаются в процессе загрузки клиента, а точнее, в момент запуска его сетевых интерфейсов. Наверное, самая очевидная из них – это IP-адрес, но DHCP может предоставить и другие, например, маску подсети и шлюз по умолчанию, и многие настройки уровня приложений, такие как адреса первичного и вторичного DNS-серверов, серверы времени NTP и серверы TFTP для загрузки PXE.

DHCP-сервер не назначает настройки навсегда, а сдает их в аренду на определенный срок. Клиент указывает этот срок в запросе, но максимальное время аренды в настройках сервера может быть меньше запрошенного клиентом. При желании продолжить пользоваться настройками, клиент должен повторно отправить запрос до того, как его время истечет. Если клиент этого не сделал, сервер по истечении срока аренды вправе назначить его IP-адрес другому клиенту, хотя передача ранее назначенного адреса – вещь не столь простая. Сначала сервер проверит, не используется ли этот адрес кем-то другим. Клиент также может явно отказаться от аренды DHCP и должен это cделать, если его сетевые интерфейсы корректно остановлены.

В былые времена, до появления NAT и использования пространства приватных IP-адресов 192.168.0.0/24 во внутренних сетях, IP-адреса могли быть дефицитным ресурсом, и установка короткого срока аренды (например, час или 10 минут) означало, что сеть могла растягивать свои скудные запасы IP-адресов, назначая их только компьютерам, активным в данный момент. Сейчас это меньшая проблема, и вы скорее увидите сроки аренды в день или даже неделю; тем не менее, этот механизм остается удобным для повторного использования адресов выключенных компьютеров. Классический сценарий – приходит человек из вашего офиса в Бобруйске, на денек подключает ноутбук к вашей сети, а потом едет обратно в Бобруйск.

Провайдер Dynamic DNS

Это немного не в тему, но если ваш провайдер назначает видимые извне IP-адреса по DHCP, то нет гарантии, что адрес каждый раз будет одним и тем же, поэтому вы не можете зарегистрировать в DNS статическую запись. Некоторые провайдеры предоставят вам статический адрес (обычно за дополнительную плату); или можно воспользоваться услугами провайдера Dynamic DNS (например, http://www.dyndns.com), чтобы зарегистрировать имя компьютера, которое будет постоянным всегда, даже если ваш IP-адрес изменился. Для этого на компьютер потребуется установить клиент DDNS, например, ddclient

Тем не менее, DHCP-серверы стараются выдавать тот же самый IP-адрес и те же настройки, которые были назначены в прошлый раз, клиенту, который периодически возникает в сети. Для этого они записывают сроки аренды в файл, где они привязываются к MAC-адресам клиентов.

Все это напоминает мне студенческие годы, когда книг в библиотеке было гораздо меньше, чем студентов. Однако взять всегда было что, при достаточно быстром обороте.

Если взглянуть на это с клиентской стороны, то у разъездного сотрудника офиса появляется еще более удобный способ использования DHCP. Он просто включает свой компьютер в ту сеть, рядом с которой оказывается, и получает подходящие настройки для работы в ней. Ему не нужно возиться с диалогами, чтобы ввести подходящие IP-адрес, адрес сервера DNS и так далее.

Сперва найдем свой сервер

Разбор пакета DHCPDISCOVER. Обратите внимание на широковещательный адрес назначения (255.255.255.255) и список параметров запроса

На рисунке показан типичный DHCP-обмен при запуске сетевого интерфейса. Клиент начинает с отправки пакета DHCPDISCOVER. Этот пакет широковещательный, так как клиент не знает адреса DHCP-сервера (он даже собственного адреса не знает!). DHCP-сервер по адресу 192.168.0.1 отвечает, предлагая срок аренды, и клиент отправляет второй пакет, с запросом на аренду. Наконец, сервер отвечает пакетом DHCPACK, предоставляя клиенту адрес 192.168.0.3, который затем связывается с сетевым интерфейсом (в данном случае, eth2):

$ sudo ifup eth2
Internet Systems Consortium DHCP Client V3.0.4
Copyright 2004-2006 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
Listening on LPF/eth2/00:10:60:60:3e:8e
Sending on LPF/eth2/00:10:60:60:3e:8e
Sending on Socket/fallback
DHCPDISCOVER on eth2 to 255.255.255.255 port 67
interval 5
DHCPOFFER from 192.168.0.1
DHCPREQUEST on eth2 to 255.255.255.255 port 67
DHCPACK from 192.168.0.1
bound to 192.168.0.3 -- renewal in 97583 seconds.

Временная диаграмма обмена пакетами DHCP. В этом примере два сервера DHCP предлагают аренду, и клиент выбирает первый отозвавшийся.

На следующем рисунке показан этот обмен, а на экранном снимке Wireshark пакет разобран детально. Кто хочет рассмотреть DHCP-обмен более подробно, обратите внимание на dhcpdump, утилиту пост-обработки вывода tcpdump для анализа перехваченных DHCP-пакетов.

Конфигурация сервера

Программа dhcp3 (версия 3 реализации DHCP от Internet Software Consortium) – широко используемый сервер DHCP. Рассмотрим самые важные фрагменты его конфигурационного файла (скорее всего, /etc/dhcp3/dhcpd.conf). В начале мы видим глобальные определения, применяемые ко всем подсетям, которые обслуживает сервер:

option domain-name “example.com”;
option domain-name-servers 192.168.122.1;
default-lease-time 600;
max-lease-time 7200;

Эти строки определяют, какую информацию сервер передаст клиенту в DHCPACK, тут все понятно.

Следующий фрагмент определяет одну подсеть, которую будет обслуживать сервер. Предполагается, что dhcp3 слушает порт на интерфейсе, подключенном к сети 192.168.122.0:

subnet 192.168.122.0 netmask 255.255.255.0 {
range 192.168.122.20 192.168.122.190;
option broadcast-address 192.168.122.255;
option routers 192.168.122.1;
}

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

Можно также привязать настройки (включая имя хоста и фиксированный IP-адрес) к заданному хосту по его MAC-адресу – фрагмент ниже показывает, как это сделать:

host lxfdesktop14 {
hardware ethernet 52:54:00:12:34:56;
option host-name “lxfdesktop14”;
fixed-address 192.168.122.181;
next-server 192.168.122.1;
filename “webserver/pxelinux.0”;
}

Параметры next-server и filename нужны для загрузки клиента по сети (PXE). Они задают IP-адрес TFTP-сервера и имя файла, который будет с него запрошен.

Подружим DHCP и DNS

Поправка LTSP

В LXF117 я писал о Linux Terminal Server Project и упоминал Atlanta Public Schools как пользователя этой технологии, назвав цифру в 2200 клиентов. Мы получили письмо от Джеймса Швайцера [James Schweitzer] с новыми данными – теперь у них 12 000 тонких клиентов, обслуживаемых 150 серверами в 54 школах. Даже если не брать во внимание сами цифры, число клиентов на сервер меня впечатляет. Спасибо, Джеймс!

У DNS и DHCP непростые отношения. И проблема в том, что DNS создавался из расчета, что IP-адрес компьютера остается постоянным достаточно долго (как минимум, несколько дней или недель), а DHCP идет вразрез с данным предположением. Чтобы решить эту проблему, динамический DNS позволяет сообщить связанному с ним DNS-серверу назначенный клиенту адрес. Этот протокольный метод обновления DNS описан в RFC 2136. Вот типичный фрагмент конфигурационного файла DHCP, позволяющего реализовать такое обновление:

ddns-update-style interim;
ddns-domainname “example.com”;
ddns-rev-domainname “in-addr.arpa”;
update-static-leases on;
zone example.com. {
primary 192.168.122.6; #update the local server
}
zone 122.168.192.in-addr.arpa. {
primary 192.168.122.6; #same for reverse addresses
}
Один – компания, два – толпа

Два конфликтующих DHCP-сервера в одной сети – это Плохая Идея: очевидно, что между ними начнутся гонки. С годами я обнаружил, что установка неконтролируемых DHCP-серверов (случайно или намеренно) в чужой сети – отличный способ позлить системного администратора. Чтобы заметить это, нужно время (должны истечь существующие сроки аренды или в сети должен появиться новичок), но в конце концов администратор будет ходить вокруг с обиженным видом, держа в руках свой ноутбук с обличительной трассировкой пакетов, и бормотать: «Кто получил 192.168.122.42?»

Конечно, на стороне DNS-сервера для динамического обновления нужно настроить еще кое-что, но здесь мы не будем в это углубляться.

Так как для поиска DHCP-сервера клиенты отправляют широковещательные запросы, а широковещательные пакеты скорее всего не пройдут через маршрутизаторы вашей сети, в каждой подсети должен быть DHCP-сервер. Альтернатива – запустить в подсети DHCP-ретранслятор (dhcrelay). Он слушает DHCP-запросы и перенаправляет их серверам DHCP из заданного списка. Так с помощью одного DHCP-сервера обеспечивается выделение адресов для всей сети.

Наконец, поскольку DHCP – критически важный сервис сети, вы можете задуматься о создании для него резервного. В случае с двумя серверами, адресные пространства которых не перекрываются, это довольно просто, но конфигурация реальной отработки отката с основного сервера на запасной, обрабатывающий тот же самый набор адресов, требует больше усилий и предполагает специальную секцию в файле конфигурации обоих серверов. Поддержка имеется только в третьей версии DHCP. Документация не особенно хороша, но по адресу http://www.madboa.com/geek/dhcp-failover есть неплохая статья. А если вам нужно официальное описание DHCP, прочтите RFC2131 (http://left.org.rfc/rfc2131.txt). LXF

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию