DHCP failover

Вводные данные:

DNS — сервера 10.10.10.10 и 10.10.10.100

DHCP primary 10.10.10.101

DHCP secondary 10.10.10.102

VLAN-ы пользователей 20,30 и 40

Домен champ.first

Шлюз по умолчанию на базе L3 коммутаторов с поддержкой dhcp option 82. Во всех VLAN’ах они имеют 1-й IP адрес

Настройка DHCP primary

  • Установим пакет «dhcp-server»:

apt-get update && apt-get install -y dhcp-server
  • Укажим сетевой интерефейс, через который будет работать DHCP-сервер

    • где «ens33» — имя интерфейса:

sed -i "s/DHCPDARGS=/DHCPDARGS=ens33/g" /etc/sysconfig/dhcpd
  • Пример конфигурационного файла с настройкой DHCP — сервера — расположен по пути «/etc/dhcp/dhcpd.conf.example»

    • возьмём его за основу:

cp /etc/dhcp/dhcpd.{conf.example,dhcpd.conf}
  • Для начала опишем, согласно входным данным, необходимые параметры для выдаваемых диапазонов:

    • файл «/etc/dhcp/dhcpd.conf» — будет выглядеть следующим образом:

option domain-name "champ.first";
option domain-name-servers 10.10.10.10, 10.10.10.100;

default-lease-time 6000;
max-lease-time 72000;

authoritative;

subnet 10.10.10.0 netmask 255.255.255.0 {}

# VLAN 20
subnet 10.10.20.0 netmask 255.255.255.0 {
  range 10.10.20.50 10.10.20.200;
  option routers 10.10.20.1;
}

# VLAN 30
subnet 10.10.30.0 netmask 255.255.255.0 {
  range 10.10.30.50 10.10.30.200;
  option routers 10.10.30.1;
}

# VLAN 40
subnet 10.10.40.0 netmask 255.255.255.0 {
  range 10.10.40.50 10.10.40.200;
  option routers 10.10.40.1;
}
  • При помощи утилиты «dhcpd» с ключём «-t» для проверки корректности его заполнения

    • ключи «-cf» для указания пути до проверяемого файла:

dhcpd -t -cf /etc/dhcp/dhcpd.conf

img

  • Модифицируем ранее созданный конфигурационный файл DHCP — сервера «/etc/dhcp/dhcpd.conf»:

    • В файле «/etc/dhcp/dhcpd.conf» — будем хранить только настройки отказоустойчивости;

    • Поскольку всё кроме настройки отказоустойчивости на dhcp1 и dhcp2 будет одинаковым — вынесем конфиги в отдельную дирректорию, затем эту дирректорию можно будет спокойно копировать на второй сервер:

mkdir /etc/dhcp/dhcpd.conf.d

cat /etc/dhcp/dhcpd.conf > /etc/dhcp/dhcpd.conf.d/subnets.conf
  • Для того чтобы основной файл /etc/dhcp/dhcpd.conf — ссылался на то что лежит в дирректории /etc/dhcp/dhcpd.conf.d/, сотрём в нём всё и пропишим опции include:

echo include \"/etc/dhcp/dhcpd.conf.d/subnets.conf\"\; > /etc/dhcp/dhcpd.conf
  • Теперь прописываем опции касающиеся отказоустойчивости в «/etc/dhcp/dhcpd.conf» выше опций include:

failover peer "dhcp-failover" {
     primary;                       # Основной сервер
     address 10.10.10.101;          # Адрес текущего сервера, который будет использоваться для обмена информацией между DHCP - серверами
     port 519;                      # Порт на котором будет слушать этот сервер
     peer address 10.10.10.102;     # Адрес другого сервера (secondary)
     peer port 520;                 # Порт другого сервера (secondary)
     max-response-delay 60;         # Сколько секунд прождать, чтобы посчитать второй сервер недоступным
     max-unacked-updates 10;        # Сколько максимум пакетов bind-update может отправить второй сервер
     mclt 3600;                     # Максимальное время на которое одному серверу разрешено время lease, не сказав об этом второму серверу (только на primary указывается)
     split 128;                     # Распределение адресов 50/50% (только на primary указывается)
     load balance max seconds 3;    # Если пришёл DHCPDISCOVER или DHCOREQUEST и в течение 3-х секунд второй сервер не ответил, хотя очередь была его, то балансировка игнорируется и клиенту отвечает этот сервер
}

P.S. В итоге получается вот такой вот конфиг, а общая часть которая должна быть одинаковой на dhcp1 и dhcp2 — вынесена в отдельные файлы в директории /etc/dhcp/dhcpd.conf.d/, а то что будет отличаться в зависимости от primary и secondary будет описано в /etc/dhcp/dhcpd.conf

  • Необходимо указать failover peer для subnet-ов, в файле «/etc/dhcp/dhcpd.conf.d/subnets.conf»:

...
# VLAN 20
subnet 10.10.20.0 netmask 255.255.255.0 {
  option routers 10.10.20.1;
  pool {
    failover peer "dhcp-failover";
    range 10.10.20.50 10.10.20.200;
  }
}

# VLAN 30
subnet 10.10.30.0 netmask 255.255.255.0 {
  option routers 10.10.30.1;
  pool {
    failover peer "dhcp-failover";
    range 10.10.30.50 10.10.30.200;
  }
}

# VLAN 40
subnet 10.10.40.0 netmask 255.255.255.0 {
  option routers 10.10.40.1;
  pool {
    failover peer "dhcp-failover";
    range 10.10.40.50 10.10.40.200;
  }
}
...

Затем вновь проверяем:

dhcpd -t -cf /etc/dhcp/dhcpd.conf

После чего включаем и доабвляем в автозагрузку DHCP — сервер:

systemctl enable --now dhcpd

systemctl status dhcpd

img

Настройка DHCP secondary

  • Установим пакет «dhcp-server»:

apt-get update && apt-get install -y dhcp-server
  • Укажим сетевой интерефейс, через который будет работать DHCP-сервер

    • где «ens33» — имя интерфейса:

sed -i "s/DHCPDARGS=/DHCPDARGS=ens33/g" /etc/sysconfig/dhcpd

Копирует настройки dhcpd.conf и директорию dhcpd.conf.d c DHCP primary на DHCP secondary — сервер:

scp -r /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.d root@10.10.10.102:/etc/dhcp/

P.S. Если будут вноситься какие-либо изменения в конфигурацию DHCP — сервера, то эти файлы необходимо будет копировать и на второй сервер.

Редактируем параметры в /etc/dhcp/dhcpd.conf на DHCP secondary — для настройки этого сервера как secondary:

failover peer "dhcp-failover" {
    secondary;
    address 10.10.10.102;
    port 520;
    peer address 10.10.10.101;
    peer port 519;
    max-response-delay 60;
    max-unacked-updates 10;
    load balance max seconds 3;
}

include "/etc/dhcp/dhcpd.conf.d/subnets.conf";

Проверяем:

dhcpd -t -cf /etc/dhcp/dhcpd.conf

После чего включаем и доабвляем в автозагрузку DHCP — сервер:

systemctl enable --now dhcpd

systemctl status dhcpd

img

Должны увидеть сообщение Both servers normal — именно оно нам говоит о том, что сервера видят друг друга