 | Конфигурация DHCP
Общее о протоколе
Подобно большинству сетевых протоколов, Dynamic Host Configuration Protocol (DHCP) -- это клиент/серверный интерфейс. Клиент DHCP является намного более простой программой, как по устройству, так и для настройки, нежели сервер DHCP. В сущности, вся работа клиента DHCP состоит в рассылке сообщения DHCPDISCOVER по локальной физической подсети, и ожидания ответа.
Сообщение DHCPDISCOVER может содержать параметры, которые содержат желаемое значение для сетевого адреса и продолжительности аренды. Если серверы получает сообщение DHCPDISCOVER, то он должен ответить соответствующему MAC адресу сообщением DHCPOFFER. Клиент, в свою очередь, отвечает сообщением DHCPREQUEST одному из предлагающих серверов, обычно первому (и единственному) серверу, приславшему ответ.
Главные параметры конфигурации, которые использует клиент, он получает в сообщении DHCPACK. При этом клиент получает собственный IP-адрес и с этого момента может взаимодействовать не только на уровне Data Link Layer (Ethernet), но и на уровне Network Layer (IP) как полноценный участник IP-сети.
Процесс на клиенте
Клиент DHCP обычно требует только настройки информации, которую он желает получать. Например, дистрибутив на основе Debian обычно использует клиента DHCP, dhclient, который сконфигурирован файлом /etc/dhcp3/dhclient.conf. Образец файла, распространяемые с пакетом dhcp3-client, имеет все опции, кроме одной, закомментированными. Единственная задействованная опция, скорее всего, имеет вид:
Listing 1. Опции для dhclient.conf
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
netbios-name-servers, netbios-scope;
|
В этом примере, конфигурации по умолчанию, клиент, по существу, говорит: "спрашивайте все, что возможно". В переговорных сообщениях, сообщение DHCPACK от сервера будет содержать информацию для всех таких запрошенных значений, которые клиент сможет использовать по мере получения. IP-адрес клиента содержится в списке, поскольку эта конфигурация всегда есть предмет переговоров.
Наряду с указанием максимального времени и параметрами времени аренды (а также некоторыми другми), клиент может, но, в большинстве случаев, не обязан, наложить некоторые ограничения на IP-адрес, который он хочет использовать. Для того, чтобы исключить определенный адрес, можно записать reject 192.33.137.209;. Для указания явного адреса, который хочет использовать клиент, следует записать fixed-address 192.5.5.213;.
Клиент может отклонить предложение аренды сообщением DHCPDECLINE, но сервера попытаются удовлетворить запросы везде, где это возможно. DHCP-сервер может также сделать фиксированное присваивание определенного IP-адреса к запрашиваемому MAC-адресу; настройка IP-адресов по машинам чаще производится конфигурацией сервера, чем конфигурацией клиента.
Чтобы отслеживать полученные аренды, dhclient хранит список аренд, которые были присвоены в файле /var/lib/dhcp3/dhclient.leases (путь может отличаться в различных дистрибутивах); таким образом, не просроченная DHCP аренда не теряется, даже если система отсоединяется от физической сети и/или перезагружается.
Процесс на сервере
Сервер DHCP должен знать немного больше своих опций, поскольку он обеспечивает клиентов различной информацией во время DHCP аренды, и также должен быть уверен, что клиенты получили уникальные IP-адреса. Сервер DHCPобычно запускается как демон, dhcpd, и черпает информацию о своей конфигурации из /etc/dhcpd.conf (этот путь может варьироваться, в зависимости от дистрибутива). Один демон dhcpd может, тем не менее, поддерживать несколько подсетей, обычно когда к серверу подсоединяются многие физические сети; однако зачастую все-таки один сервер управляет одной подсетью. Listing 2 -- фактически полный пример конфигурации сервера.
Listing 2. Конфигурационные опции dhcpd.conf
# default/max lease in seconds: day/week
default-lease-time 86400;
max-lease-time 604800;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.2.255;
option routers 192.168.2.1;
# DNS locally, fallback to outside local domain
option domain-name-servers 192.168.2.1, 151.203.0.84;
option domain-name "example.com";
# Set the subnet in which IP address are pooled
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.100 192.168.2.199;
}
# Assign a fixed IP to a couple machines by MAC address
group {
use-host-decl-names true;
host first.example.com {
hardware ethernet 00:00:c1:a2:de:10;
fixed-address 192.168.2.200;
}
host second.example.com {
hardware ethernet 00:dd:cc:a1:78:34;
fixed-address 192.168.2.201;
}
|
Когда клиент высылает широковещательное сообщение серверу с такой конфигурацией, он либо получит в аренду 192.168.2.200, или 192.168.2.201, если он имеет указанный MAC-адрес, либо получит в аренду доступный адрес в диапазоне с 192.168.2.100 по 192.168.2.199.
Клиент также может использовать сообщение DHCPINFORM, чтобы сообщить серверу, что он уже имеет назначенный (вручную) IP-адрес, но хотел бы получить другую конфигурационную информацию. Обратите внимание, что сообщать серверу о том, что клиент использует определенный IP-адрес -- совсем не то же, что запрашивание определенного IP-адреса; в последнем случае сервер может дать согласие на запрос, а может и не дать, в зависимости от существующих арендах. А в первом случае сервер не не имеет голоса в принятии решения, и, по сути, аренда не предоставляется (однако сервер попытается избежать присваивания новым клиентам тех IP-адресов, которые используются).
Когда истекает срок действия аренды, клиенты и сервера должны договориться о новых арендах, а параметры конфигурации остаются в силе. Более короткие аренды могут использоваться там, где конфигурационная информация на сервере вероятно изменяется (например, на динамическом DNS посредством внешнего WAN). Клиент может элегантно прекратить аренду путем послания сообщения DHCPRELEASE, но для корректной работы не требуется и этого (клиенты иногда сбоят, перезагружаются, или, в конце концов, разъединяются и не могут послать такое сообщение).
При отсутствии высвобождающего сообщения аренда поддерживается сервером, пока истекут условия, на которых она была получена, так что перезагруженная машина зачастую продолжает использовать свою предшествующую аренду (которая хранится в dhclient.leases как на сервере, так и на клиенте).
|  |