четверг, 15 апреля 2010 г.

Option 82 DHCP



Инсталляция и настройка DHCP сервера ISC-DHCP

Будем использовать dhcp-сервер ISC-DHCP (v3). ISC DHCP Server — наиболее распространнённый DHCP-сервер, из использующихся в UNIX/Linux-системах. Для нас сейчас важно и то, что это один из серверов, умеющих распознавать опцию 82.
Будем предполагать, что инсталляция и настройка сервера выполняется в Debian GNU/Linux. Пользователи других систем должны учесть, что процедура инсталляции и местоположение конфигурационных файлов могут несколько отличаться.


[править]Установка DHCP-сервера с поддержкой опции 82

В обычном случае установить откомпилированный DHCP-сервер из репозитория пакетов можно было бы с помощью команды:
%# apt-get install dhcp3-server 
и можно было бы считать, что на этом инсталляция сервера закончена, и можно переходить к его настройке. Однако, в том случае, если предполагается использование DHCP-ретранслятора (что обязательно, если будет использоваться опция 82), может потребоваться сборка пакета с включённой директивой USE_SOCKETS. Подробнее эта процедура описана ниже.


[править]Сборка с включённой директивой USE_SOCKETS

По умолчанию DHCP-сервер ожидает услышать запросы клиентов на широковещательном адрес 255.255.255.255. Однако, когда запрос перенаправляет DHCP-ретранслятор, запрос приходит непосредственно на адрес DHCP-сервера. Для того чтобы DHCP-сервер корректно обрабатывал информацию от DHCP-ретранслятора, его необходимо скомпилировать с использованием директивы
#define USE_SOCKETS  
и указать в конфигурационном файле local-address.
Скачиваем исходники DHCP-сервера:
%# apt-get source dhcp3-server 
Перед началом сборки исходников необходимо установить все пакеты, необходимые для успешной сборки пакета, для чего выполнить:
%# apt-get build-dep dhcp3-server 
Теперь необходимо в файле site.h раскомментировать директиву #define USE_SOCKETS:
%# vi dhcp3-3.0.6.dfsg/includes/site.h 
Перейти в каталог dhcp3-3.0.6.dfsg:
%# cd dhcp3-3.0.6.dfsg/ 
Для того чтобы собрать пакет необходимо выполнить:
%$ dpkg-buildpackage -rfakeroot -b 
или, если сборка производится root'ом:
%# dpkg-buildpackage -b 
После сборки пакеты должны быть установлены в системе (инсталлируем только common и server, так как нам не нужен DHCP-ретранслятор и DHCP-клиент):
%# dpkg -i dhcp3-common_3.0.6.dfsg-1_i386.deb dhcp3-server_3.0.6.dfsg-1_i386.deb  


[править]Настройка DHCP-сервера

Изображение:Dhcp_82.jpeg
Сразу же после инсталляции пакета, сервер может не заработать — сначала необходимо отредактировать его конфигурационный файл /etc/dhcp3/dhcpd.conf.
# Укажите адрес, на который DHCP-сервер ожидает получать запросы (адрес DHCP-сервера)  local-address 192.168.2.9;  # Укажите подсеть интерфейса, на котором запущен DHCP-сервер  subnet 192.168.2.0 netmask 255.255.255.0 { }  # Если сервер получит запрос, содержащий опцию 82, он сгенерирует сообщение в системный журнал #   if exists agent.circuit-id {  log ( info, concat( " Lease for ",                       binary-to-ascii (10, 8, ".", leased-address),                      " Switch port: ",                       binary-to-ascii (10, 8, ".", option agent.circuit-id),                       " Switch MAC: ",                      binary-to-ascii(16, 8, ".", option agent.remote-id))); }  # Запросы, пришедшие с 5го порта коммутатора:  class "port-5" {  match if binary-to-ascii (10, 8, "", suffix( option agent.circuit-id, 1)) = "5"; }  # Адрес для 5го порта:  pool {   range 192.168.1.55;   allow members of "port-5"; } 
Интерфейс, на котором будет работать DHCP-сервер, передается ему в качестве аргумента при вызове.
В Debian GNU/Linux аргументы и ключи вызова программ принято указывать в соответствующих файлах в каталоге /etc/default, в частности, конфигурационный файл, в котором находятся опции для нашего сервера, называется /etc/default/dhcp3-server.
При условии, что сервер будет слушать запросы на интерфейсе eth0, файл будет выглядеть так:
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACES="eth0" 
Можно указать несколько интерфейсов, запросы с которых будет обрабатывать сервер. Они должны быть разделены пробелом.
Теперь можно запускать сервер:
%# /etc/init.d/dhcp3-server start 
После сборки сервера с #define USE_SOCKETS:
udp     0   0 192.168.2.9:67    0.0.0.0:*   863/dhcpd3 udp     0   0 192.168.2.9:67    0.0.0.0:*   863/dhcpd3


Пример конфигурационного файла DHCP-сервера

ddns-update-style none; default-lease-time 600; max-lease-time 7200; log-facility local7; local-address 192.168.2.9; if exists agent.circuit-id {   log ( info, concat( "Lease for ", binary-to-ascii (10, 8, ".", leased-address),   " raw option-82 info is CID: ", binary-to-ascii (10, 8, ".", option agent.circuit-id), " AID: ",  binary-to-ascii(16, 8, ".", option agent.remote-id))); } subnet 192.168.2.0 netmask 255.255.255.0 {         range 192.168.2.20 192.168.2.40;         allow unknown-clients; }  subnet 192.168.1.0 netmask 255.255.255.0 {     class "port-5" {          match if binary-to-ascii (10, 8, "", suffix( option agent.circuit-id, 1)) = "5";     }     class "port-3" {         match if binary-to-ascii (10, 8, "", suffix( option agent.circuit-id, 1)) = "3";     }     class "port-45" {         match if binary-to-ascii (10, 8, "", suffix( option agent.circuit-id, 1)) = "45";     }      pool {         range 192.168.1.155;         allow members of "port-5";     }     pool {         range 192.168.1.133;         allow members of "port-3";     }     pool {         range 192.168.1.45;         allow members of "port-45";     } }

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

Отправить комментарий