Денис Колисниченко
Для чего нужен протокол DHCP? DHCP (Dynamic Host Configuration Protocol) - это протокол настройки
узла, который автоматически назначает IP-адреса компьютерам. Протокол DHCP - это дальнейшее
развитие протокола BOOTP. Последний разрешает бездисковым клиентам запускать и автоматически
конфигурировать протокол TCP/IP. Протокол DHCP централизовано назначает IP-адреса в вашей сети
и автоматически конфигурирует рабочие станции. Возможно, вы подумали, что в одной сети должен
быть только один сервер DHCP, потому что в противном случае между серверами возникнет конфликт,
а пострадавшим опять окажется клиент, который зависнет при загрузке. А вот и не так - в одной
сети может быть несколько серверов DHCP. И это не только не отразится на производительности сети,
но даже повысит надежность сети, если, например, один из серверов выйдет из строя.
Итак, установите пакет dhcp и включите поддержку динамических IP-адресов командой
echo "1" > /proc/sys/net/ipv4/ip_dynaddr. Ясное дело, ничего не нужно делать, если поддержка
динамических IP-адресов уже включена (в большинстве случаев это так). DHCP в Linux реализован
в виде демона сервера (dhcpd) и демона клиента (dhcpcd). Демон сервера непосредственно отвечает
за назначение IP-адресов клиентам, при входе и выходе их из сети. Клиетский демон, как явствует
из названия, запускается на стороне клиента.
Конфигурационным файлом для dhcpd является /etc/dhcp.conf. При запуске DHCP-сервера происходит
выделение IP-адресов согласно содержащимся в файле /etc/dhcp.conf установкам. Выделенные адреса
dhcpd регистрирует в файле dhcpd.leases, который обычно находится в каталоге /var/dhcpd.
Сейчас давайте рассмотрим простейшую конфигурацию, которую будем постепенно наращивать
(см. листинг 1). Обратите внимание на то что, чтобы внесенные вами в файл /etc/dhcp.conf
изменения вступили в силу, демон dhcpd необходимо остановить и запустить снова. При этом
используйте команду /etc/rc.d/init.d/dhcpd stop для останова демона, и команду
/etc/rc.d/init.d/dhcpd start для его запуска.
Листинг 1. Файл /etc/dhcpd.conf
Теперь будем постепенно усложнять конфигурацию. Каждая сетевая карточка имеет уникальный
собственный MAC-адрес. Допустим, вам нужно связать какой-то MAC-адрес с определенным
IP-адресом. Для этого воспользуйтесь конструкцией host:
Ее нужно вставить в ту конструкцию подсети subnet, которой принадлежит назначаемый
IP-адрес. Данная конструкция означает, что компьютеру с аппаратным адресом
xx:xx:xx:xx:xx:xx будет назначен IP-адрес 192.168.1.9. Например:
Данный пример показывает, что аппаратному адресу 00:40:C7:34:90:1E будет сопоставлен IP-адрес
192.168.0.9. Обратите внимание, что IP-адрес хоста myhost 192.168.0.9 относится к подсети
192.168.0.0 и включен в инструкцию subnet подсети 192.168.0.0, а не какой-либо другой сети!
Существует довольно удобная утилита для просмотра всех MAC-адресов сетевых адаптеров в
вашей сети -- программа TCPNetView. Эта программа разработана Александром Горлачем и загрузить
ее вы можете по адресу http://www.enet.ru/~gorlach/netview/ (если вы не можете скачать эту
программу, обратитесь ко мне). Правда, есть одно "но": эта программа работает под Windows.
В любом случае, если вы будете использовать эту программу, при настройке сервера вам не придется
подходить к каждому компьютеру, чтобы узнать его MAC-адрес.
Теперь, предположим, что вам необходимо обеспечить поддержку WINS, а на вашей машине установлен
сервер Samba. В этом случае в конструкцию subnet нужно включить следующие директивы:
Примечание. Служба WINS (Windows Internet Name Service) используется для разрешения (перевода)
имен NetBIOS в IP-адреса. Сервер WINS - это усовершенствованный сервер имен NetBIOS,
разработан Microsoft для снижения широковещательного трафика.
Пакет Samba предназначен для использования протокола SMB (Server Message Block), который
также еще называется протоколом NetBIOS. С помощью пакета Samba ваша машина, работающая
под управлением Linux, ничем не будет отличаться от рабочей станции или сервера сети Microsoft.
Вот практически и все. Правда, еще можно добавить пару незначительных опций:
Как обычно, дополнительную информацию можно получить, введя команду man dhcpd.conf. При
настройке клиентов Windows следует активизировать режим "Получить IP-адрес автоматически"
в свойствах TCP/IP (см. рис. 1). А при настройке Linux с помощью конфигуратора netconf -
включить режим DHCP (см. рис. 2).
Протокол DHCP подробно описан в RFC 1533, 1534, 1541, 1542, а протокол BOOTP описан в
RFC 1532. Окончательный вариант конфигурационного файла приведен в листинге 2.
Рис. 1. Настройка Windows-клиента
Рис. 2. Настройка Linux-клиента Вот практически и все. Все ваши вопросы и комментарии буду рад выслушать по
адресу dhsilabs@mail.ru.
# описание сети, указывающее какая из подсетей будет
# обслуживаться. Указывается сетевой адрес и маска сети
subnet 192.168.0.0 netmask 255.255.255.0 {
# маршрутизатор по умолчанию
option routers 192.168.0.1;
# маска подсети 255.255.255.0
option subnet-mask 255.255.255.0;
# устанавка домена по умолчанию и сервера NIS, если таковой используется
option nis-domain "domain.ru";
option domain-name "domain.ru";
# адрес DNS сервера, который будут использовать клиенты
option domain-name-servers 192.168.0.1;
# диапазон адресов для клиентов
# 192.168.0.10-192.168.0.250
range 192.168.0.10 192.168.0.254;
# сказать клиентам, чтобы отдали адрес через 21600 секунд (6 часов)
# после получения адреса
default-lease-time 21600;
# забрать адрес самому через 28800 секунд (8 часов)
max-lease-time 28800;
}
host myhost {
hardware ethernet xx:xx:xx:xx:xx:xx;
fixed-address 192.168.0.9;
}
subnet 192.168.0.0 netmask 255.255.255.0 {
# прочие опции
# …
#
host myhost {
hardware ethernet 00:40:C7:34:90:1E;
fixed-address 192.168.0.9;
}
}
option netbios-name-servers 192.168.0.1;
option netbios-dd-server 192.168.0.1;
option netbios-node-type 8;
# определяем широковещательный адрес
option broadcast-address 192.168.2.255;
# включаем IP-Forwarding
option ip-forwarding on;
# можно добавить глобальную опцию:
server-identifier server.domain.ua;
Листинг 2. Конфигурационный файл /etc/dhcpd.conf (окончательный вариант)
# Подсеть 192.168.0.0, маска сети 255.255.255.0
subnet 192.168.0.0 netmask 255.255.255.0 {
# маршрутизатор по умолчанию
option routers 192.168.0.1;
# маска подсети 255.255.255.0
option subnet-mask 255.255.255.0;
# устанаввка домена по умолчанию и сервера NIS, если таковой используется
option nis-domain "domain.ru";
option domain-name "domain.ru";
# задание широковещательного адреса
option broadcast-address 192.168.0.255;
# включение IP-Forwarding
option ip-forwarding on;
# глобальная опция server-identifier:
server-identifier server.domain.ru;
# адрес DNS сервера, который будут использовать клиенты
option domain-name-servers 192.168.0.1;
# диапазон адресов для клиентов
# 192.168.0.10-192.168.0.254
range 192.168.0.10 192.168.0.254;
# сказать клиентам, чтобы отдали адрес через 21600 секунд (6 часов)
# после получения адреса
default-lease-time 21600;
# забрать адрес самому через 28800 секунд (8 часов)
max-lease-time 28800;
option netbios-name-servers 192.168.0.1;
option netbios-dd-server 192.168.0.1;
option netbios-node-type 8;
#описание трех клиентов клиентов (dhcp50, dhcp51, dhcp52) и их аппаратных адресов
host dhcp50 {
hardware ethernet 00:40:C7:34:90:1E;
# обратите внимание на то, что вы должны использовать IP-адрес из указанного
# ранее диапазона адресов 192.168.0.10-254.
fixed-address 192.168.0.50;
}
host dhcp51 {
hardware ethernet 00:40:C7:34:90:1F;
fixed-address 192.168.0.51;
}
host dhcp52 {
hardware ethernet 00:40:C7:34:90:2A;
fixed-address 192.168.0.52;
}
}