Настройка DHCP сервера

Вы можете настроить сервер DHCP, используя файл конфигурации /etc/dhcpd.conf.

DHCP также использует файл /var/lib/dhcp/dhcpd.leases в качестве базы данных, хранящей аренды клиентов. За дополнительной информацией обратитесь к разделу База данных аренды.

Файл конфигурации

Настройка сервера DHCP начинается с создания файл конфигурации, содержащего сетевую информацию для клиентов. В файле могут быть описаны глобальные для всех клиентов параметры, или параметры каждой клиентской системы.

Файл конфигурации может содержать любые дополнительные символы табуляции и пустые строки, облегчающие форматирование. Ключевые слова нечувствительны к регистру, а строки, начинающиеся с символа решетки (#), являются комментариями.

В файле конфигурации существует два типа предложений:

Некоторые параметры должны начинаться с ключевого слова option. Ключевое слово option используется для указания необязательных параметров DHCP; тогда как параметры определяют значения, которые являются обязательными или управляют поведением DHCP сервера.

ВажноВажно
 

Если вы измените файл конфигурации, изменения не вступят в силу до перезапуска демона DHCP с помощью команды: service dhcpd restart.

Параметры (включая необязательные) объявленные перед разделом, заключенным в фигурные скобки ({ }), являются глобальными параметрами. Глобальные параметры действуют во всех разделах, следующих ниже.

На Рисунке 12-1 параметры routers, subnet-mask, domain-name, domain-name-servers и time-offset используются для объявлений host для apex и raleigh.

Как показано на Рисунке 12-1, вы можете объявить subnet (подсеть). Для каждой подсети в вашей сети вы должны включить в файл объявление subnet. Если вы не сделаете этого, попытка запустить DHCP сервер закончится неудачей.

В этом примере определяются глобальные параметры каждого DHCP клиента в подсети и диапазон (range). Клиенты получают IP адрес из указанного диапазона.


subnet 192.168.1.0 netmask 255.255.255.0 {option routers                  192.168.1.254;
        option subnet-mask              255.255.255.0;

        option domain-name              "example.com";
        option domain-name-servers       192.168.1.1;

        option time-offset              -5;     # Eastern Standard Time

	range 192.168.1.10 192.168.1.100;
}

Рисунок 12-1. Пример объявления подсети

Все подсети, находящиеся в одной физической сети, должны быть описаны в объявлении shared-network, как показано на Рисунке 12-2. Параметры, находящиеся внутри объявления shared-network, но снаружи закрытого объявления subnet, считаются глобальными параметрами. Имя (name) в объявлении shared-network должно быть названием, описывающим сеть, например, test-lab, относится к подсетям в окружении test lab.

shared-network name {
    option domain-name              "test.redhat.com";
    option domain-name-servers      ns1.redhat.com, ns2.redhat.com;
    option routers                  192.168.1.254;
    дополнительные параметры общей сети EXAMPLE
    subnet 192.168.1.0 netmask 255.255.255.0 {
        параметры подсети
        range 192.168.1.1 192.168.1.31;
    }
    subnet 192.168.1.32 netmask 255.255.255.0 {
        параметры подсети
        range 192.168.1.33 192.168.1.63;
    }
}

Рисунок 12-2. Пример описания общей сети

Как показано на Рисунке 12-3, объявление group используется для сопоставления глобальных параметров группе объявлений. Вы можете объединять общие сети, подсети, узлы или группы.

group {
   option routers                  192.168.1.254;
   option subnet-mask              255.255.255.0;

   option domain-name              "example.com";
   option domain-name-servers       192.168.1.1;

   option time-offset              -5;     # Eastern Standard Time

   host apex {
      option host-name "apex.example.com";
      hardware ethernet 00:A0:78:8E:9E:AA; 
      fixed-address 192.168.1.4;
   }

   host raleigh {
      option host-name "raleigh.example.com";
      hardware ethernet 00:A1:DD:74:C3:F2;
      fixed-address 192.168.1.6;
   }
}

Рисунок 12-3. Пример объявления группы

Чтобы настроить DHCP сервер, выдающий в аренду динамические IP адреса внутри подсети, измените Рисунок 12-4 в соответствии со своими параметрами. Здесь определены время аренды по умолчанию, максимальное время аренды и значения сетевых параметров клиентов. В этом примере IP адреса будут распределяться клиентским системам из диапазона 192.168.1.10 - 192.168.1.100.

default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "example.com";

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
}

Рисунок 12-4. Пример параметра range (диапазон)

Чтобы выдать клиенту IP адрес, исходя из MAC адреса его сетевой платы, используйте параметр hardware ethernet внутри объявления host. Как показано на Рисунке 12-5, в объявлении host apex определяется, что сетевая карта с MAC адресом 00:A0:78:8E:9E:AA должна всегда получать в аренду IP адрес 192.168.1.4.

Обратите внимание, вы также можете использовать необязательный параметр host-name для назначения клиенту имени узла.

host apex {
   option host-name "apex.example.com";
   hardware ethernet 00:A0:78:8E:9E:AA; 
   fixed-address 192.168.1.4;
}

Рисунок 12-5. Пример назначения статического IP адреса с помощью DHCP

ПодсказкаПодсказка
 

Вы можете использовать примерный файл конфигурации, включенный Red Hat Linux 7.2, в качестве отправной точки, а затем добавлять в него свои собственные настройки. Скопируйте его в подходящее место, выполнив команду:
cp /usr/share/doc/dhcp-<version-number>/dhcpd.conf.sample /etc/dhcpd.conf
(где <version-number> - номер используемой версии DHCP).

Полный список параметров, объявлений и их предназначение вы можете найти на странице man dhcp-options.

База данных аренды

В файле /var/lib/dhcp/dhcpd.leases на DHCP сервере находится база данных аренды адресов DHCP-клиентами. Этот файл не следует изменять вручную. Информация о DHCP аренде для каждого только что выданного IP адреса автоматически заносится в эту базу. Эта информация включает в себя продолжительность аренды адреса арендующим узлом, даты начала и конца аренды, а также MAC адрес сетевой карты, который был использован для получения аренды.

В базе данных аренды указывается не местное время, а время по Гринвичу (GMT).

Если при первом запуске службы DHCP база данных аренды не существует, запуск закончится неудачей. Выполните команду touch /var/lib/dhcpd.leases, чтобы создать этот файл до первого запуска сервера. Не пытайтесь создать новый файл базы данных аренды, если он уже существует и сервер работает.

База данных аренды время от времени инициализируется, поэтому она не слишком велика. Сначала информация о всех известных арендах сохраняется во временной базе данных. Затем файл dhcpd.leases переименовывается в dhcpd.leases~ и временная база переписывается в файл dhcpd.leases.

DHCP демон может быть убит или система может остановиться, после того как база данных аренды была переименована в резервный файл, но до того как записан новый файл. Если это произошло, файл dhcpd.leases, необходимый запуска службы, не будет существовать. Не создавайте новый файл аренды, если это произошло. Если вы сделаете это, вся информация об аренде будет утеряна, что может повлечь за собой множество проблем. Правильным решением будет переименовать резервный файл dhcpd.leases~ в dhcpd.leases, а затем запустить службу.

Запуск и остановка сервера

ВажноВажно
 

Если вы запускаете DHCP сервер в первый раз, запуск не удастся, если файл dhcpd.leases не существует. Выполните команду touch /var/lib/dhcp/dhcpd.leases, чтобы создать нужный файл перед первым запуском (и только перед первым) службы. Если файл будет существовать, вам не нужно выполнять это действие снова.

Чтобы запустить службу DHCP, выполните команду: /sbin/service dhcpd start. Чтобы остановить службу DHCP, выполните команду /sbin/service dhcpd stop. Если вы хотите, чтобы демон автоматически запускался при загрузке системы, обратитесь к Главе 8 за информацией об управлении службами.

Если в вашем компьютере несколько сетевых интерфейсов, но вы хотите чтобы DHCP сервер работал только на одном из них, вы можете изменить сценарий запуска так, чтобы служба работала только с этим устройством. В сценарии /etc/rc.d/init.d/dhcpd есть раздел, описывающий что происходит, при попытке запуска службы:

start() {
        # Start daemons.
        echo -n "Starting dhcpd: "
        daemon /usr/sbin/dhcpd
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/dhcpd
        return $RETVAL
}

Измените строку, которая запускает демон, вписав ethernet устройство, с которым будет работать DHCP сервер.

daemon /usr/sbin/dhcpd eth0

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

Агент ретрансляции DHCP

Агент ретрансляции DHCP(dhcrelay) позволяет вам ретранслировать DHCP и BOOTP запросы из подсети, в которой нет DHCP сервера в другую, или в несколько других подсетей, имеющих DHCP сервера.

Когда DHCP клиент запрашивает информацию, агент ретрансляции DHCP пересылает запрос списку DHCP серверов, указанных при запуске агента. Когда DHCP сервер возвращает ответ, он отправляется либо широковещательно либо направленно в сеть, из которой был получен первоначальный запрос.

Чтобы запустить агент ретрансляции DHCP, выполните команду: dhcrelay. Он также может быть запущен со следующими параметрами:

Таблица 12-1. Параметры агента ретрансляции

ПараметрОписание
-i Имена настраиваемых сетевых интерфейсов. Если интерфейс не указан, будут настроены все сетевые интерфейсы, из которых, если возможно, будут исключены не широковещательные.
-p Номер порта, который должен слушать dhcrelay. Агент ретрансляции DHCP посылает запросы серверу на этот порт и передаёт клиентам ответы на порт с номером на единицу больше.
-d Принудительный запуск dhcrelay всегда в активном (не фоновом) режиме.
-q Отключает отображение сетевых настроек dhcrelay при запуске.