Настройка failover для DHCP-сервера на ESR-200 - АлтунинВВ.Блог - всё об IT-технологиях!
Четверг, 20 августа 2020 13:08

Настройка failover для DHCP-сервера на ESR-200

Россия

DHCP-сервер является важнейшим сервисом любой большой ЛВС. Прописывать вручную ip-адреса на каждом устройстве в сети из 100 и более ПК превращается в сущий кошмар для системного администратора, поэтому без DHCP-сервера не обойтись. Как правило используется один DHCP-сервер. Со сроком аренды ip-адреса 1 день он нормально справляется со своими функциями.

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

Тут нам на помощь и приходит failover. Этот механизм позволяет добавить резервный DHCP-сервер, на который, в случае аварии, будет осуществлено автоматическое переключение.

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

В этой статье мы рассмотрим настройку failover для DHCP-сервера на ESR-200.

Для настройки failover необходимы два ESR-200.

Так же нам потребуется GNS3, как его настроить читайте в статье.

Оба ESR-200 предварительно настроены, вот их конфигурация:

172.16.1.101: 

syslog file ESR debug
syslog monitor debug
hostname esr101
security zone LAN
  description "LAN"
exit

object-group service SSH
  description "SSH"
  port-range 22
exit
object-group service dhcp_server
  port-range 67
exit
object-group service dhcp_client
  port-range 68
exit

object-group network MYLAN
  description "MYLAN "
  ip prefix 172.16.1.0/24
exit


interface gigabitethernet 1/0/1
  description "LAN"
  security-zone LAN
  ip address 172.16.1.101/24
  ip address 172.16.200.252/28
exit
interface gigabitethernet 1/0/2
  shutdown
exit
interface gigabitethernet 1/0/4
  shutdown
exit
interface gigabitethernet 1/0/5
  shutdown
exit
interface gigabitethernet 1/0/6
  shutdown
exit
interface gigabitethernet 1/0/7
  shutdown
exit
interface gigabitethernet 1/0/8
  shutdown
exit
security zone-pair LAN self
  rule 1
    description "ICMP"
    action permit
    match protocol icmp
    match source-address any
    match destination-address any
    enable
  exit
  rule 2
    description "SSH"
    action permit
    match protocol tcp
    match source-address MYLAN
    match destination-address any
    match source-port any
    match destination-port SSH
    enable
  exit
  rule 30
    action permit
    match protocol udp
    match source-address any
    match destination-address any
    match source-port dhcp_client
    match destination-port dhcp_server
    enable
  exit
exit

ip dhcp-server pool LAN_POOL
  network 172.16.100.0/27
  default-lease-time 001:00:00
  address-range 172.16.100.1-172.16.100.30
  default-router 172.16.100.30
  dns-server 8.8.8.8
exit

ip route 0.0.0.0/0 172.16.200.253

ip ssh server

 172.16.1.102:

syslog file ESR debug
syslog monitor debug
hostname esr102
security zone LAN
  description "LAN"
exit

object-group service SSH
  description "SSH"
  port-range 22
exit
object-group service dhcp_server
  port-range 67
exit
object-group service dhcp_client
  port-range 68
exit

object-group network MYLAN
  description "MYLAN "
  ip prefix 172.16.1.0/24
exit


interface gigabitethernet 1/0/1
  description "LAN"
  security-zone LAN
  ip address 172.16.1.102/24
  ip address 172.16.200.251/28
exit
interface gigabitethernet 1/0/2
  shutdown
exit
interface gigabitethernet 1/0/3
  shutdown
exit
interface gigabitethernet 1/0/4
  shutdown
exit
interface gigabitethernet 1/0/5
  shutdown
exit
interface gigabitethernet 1/0/6
  shutdown
exit
interface gigabitethernet 1/0/7
  shutdown
exit
interface gigabitethernet 1/0/8
  shutdown
exit
security zone-pair LAN self
  rule 1
    description "ICMP"
    action permit
    match protocol icmp
    match source-address any
    match destination-address any
    enable
  exit
  rule 2
    description "SSH"
    action permit
    match protocol tcp
    match source-address MYLAN
    match destination-address any
    match source-port any
    match destination-port SSH
    enable
  exit
  rule 30
    action permit
    match protocol udp
    match source-address any
    match destination-address any
    match source-port dhcp_client
    match destination-port dhcp_server
    enable
  exit
exit

ip dhcp-server pool LAN_POOL
  network 172.16.100.0/27
  default-lease-time 001:00:00
  address-range 172.16.100.1-172.16.100.30
  default-router 172.16.100.30
  dns-server 8.8.8.8
exit

ip route 0.0.0.0/0 172.16.200.253

ip ssh server

Как видите, кроме ip-адресов, конфигурация ESR-200 идентична.

Обратите внимание, что включен вывод отладочной информации в консоль, это нам потребуется, для того, чтобы убедиться в том, что всё работает как положено!

Проверим доступность с каждого из устройств:

172.16.1.101: 

esr:esr-200(config)# do ping 172.16.1.102
PING 172.16.1.102 (172.16.1.102) 56(84) bytes of data.
!!!!!
--- 172.16.1.102 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 0.171/0.177/0.184/0.009 ms

172.16.1.102:

esr:esr-200(config)# ping 172.16.1.101
Syntax error: Unknown command
esr:esr-200(config)# do ping 172.16.1.101
PING 172.16.1.101 (172.16.1.101) 56(84) bytes of data.
!!!!!
--- 172.16.1.101 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 0.135/0.172/0.270/0.052 ms

Связь есть.

Настройка сервера времени 

Самое главное при настройке failover это одинаковое, до миллисекунд время на всех устройствах. Для этого нам потребуется настроить NTP-сервер с которого ESR-200 будут синхронизировать свое время.

Здесь я подразумеваю, что виртуальная машина GNS3 у вас настроена согласно предыдущей статье:

  • eth0 – management (тип виртуального коммутатора внутренний)
  • eth1 – GNS_LAN в моем случае это сетевой USB-адаптер (тип виртуального коммутатора внешний)
  • eth2 – WAN в моем случае это сетевая карта моего ПК (тип виртуального коммутатора внешний)

Мы будем использовать eth1 

Создадим новый проект в клиенте GNS3

Перетащим устройства:

  • Mikrotik CHR 6.47
  • Cloud
  • Два VPCS
  • Ethernet switch

Соединим их как указано на рисунке:

2020-08-19_21-05-24.png

Нам так же потребуется пакет с NTP-сервером для микротика, скачать его можно по этой ссылке:

https://download.mikrotik.com/routeros/6.47/all_packages-x86-6.47.zip

Обратите внимание, вы должны скачать архив именно для той версии, что сейчас у вас установлена в GNS3.

Откройте архив all_packages-x86-6.47.zip и извлеките из него файл ntp-6.47.npk

Запустите микротик в GNS3, соединитесь с микротиком через Winbox, откройте пункт меню File и перетащите в открывшееся окно файл ntp-6.47.npk

2020-08-19_19-46-52.png

Теперь просто перезагрузите mikrotik.

После его запуска откройте консоль

Скопируйте – вставьте в putty конфигурацию маршрутизатора:

/interface ethernet
set [ find default-name=ether1 ] disable-running-check=no
set [ find default-name=ether2 ] disable-running-check=no

/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik

/ip address
add address=172.16.200.253/28 interface=ether1 network=172.16.200.240

/ip dhcp-client disable 0

Включим NTP-сервер

/system ntp server set enabled=yes

Перейдем к нашим ESR-200

Проверим доступность микротика с ESR-200 

esr:esr101# ping 172.16.200.253
PING 172.16.200.253 (172.16.200.253) 56(84) bytes of data.
!!!!!
--- 172.16.200.253 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 2.291/2.390/2.544/0.095 ms

Выставим время и дату на микротике, для наглядности установим 01.01.2020 00:00:00

На самом деле, какое время будет стоять не важно, главное, чтобы оно было синхронно на ESR-200

 

/system clock set date=jan/01/2020
/system clock set time=00:00:00

Настроим оба ESR-200 на использование этого сервера

clock timezone gmt +11
ntp enable
ntp logging
ntp server 172.16.200.253
exit
do com
do con

В консоли видим, что у нас настройки применились:

 

esr:esr102(config)# 2020-08-19T21:51:58+11:00 %NTPD-I-PEER: Peer 172.16.200.253 is unreachable
2020-08-19T21:51:58+11:00 %NTPD-I-PEER: Peer 172.16.200.253 is reachable

Теперь осталось подождать, когда ESR-200 запросит время с сервера.

2020-08-19T21:52:01+11:00 %NTPD-I-PEER: Peer 172.16.200.253 is reachable
2019-08-19T21:55:17+11:00 %NTPD-I-PEER: NTP synced to peer 172.16.200.253
2020-01-01T11:06:51+11:00 %NTPD-I-PEER: System time was synchronized by NTP Peer 172.16.200.253
2020-01-01T11:06:51+11:00 %NTPD-I-PEER: Peer 172.16.200.253 is reachable

Проверяем дату 

esr:esr101(config)# do sh date
Wednesday 11:07:39 GMT+11 January 01 2020

и

esr:esr102(config)# do sh date
Wednesday 11:07:46 GMT+11 January 01 2020

 Время на устройствах обновилось.

Переведем DHCP-сервера в режим failover, при этом определим роли:

172.16.1.101 – primary

172.16.1.102 – secondary

172.16.1.101: 

ip dhcp-server failover role primary

 172.16.1.102:

ip dhcp-server failover role secondary

 Вообще, в идеале, ESR-200 следовало бы соединить отдельным кабелем, и назначить им подсеть, которая нигде больше не используется, но для этой статьи мы будем использовать подсеть 172.16.1.0/24

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

172.16.1.101: 

ip dhcp-server failover local-address 172.16.1.101
ip dhcp-server failover remote-address 172.16.1.102

 172.16.1.102:

ip dhcp-server failover local-address 172.16.1.102
ip dhcp-server failover remote-address 172.16.1.101

Включаем failover

172.16.1.101:

ip dhcp-server failover
do com
do con

172.16.1.102:

ip dhcp-server failover
do com
do con

Для чистоты эксперимента перезагрузим оба ESR-200.

Я рекомендую это сделать во избежание необъяснимых ошибок и глюков, например, у меня для всех устройств выводилась подобная ошибка:

2020-08-19T21:31:47+11:00 DHCPDISCOVER from 0c:44:a7:30:85:00 via gigabitethernet 1/0/1: unknown network segment

Помогла только перезагрузка ESR-200.

esr:esr102# reload system

Включим dhcp:

172.16.1.101:

ip dhcp-server
do com
do con

В консоли видим: 

esr:esr101(config)# 2020-01-02T00:25:01+11:00 Wrote 0 class decls to leases file.
2020-01-02T00:25:01+11:00 Wrote 19 leases to leases file.
2020-01-02T00:25:01+11:00 failover peer dhcp-failover: I move from normal to startup
2020-01-02T00:25:01+11:00 Server starting service.
2020-01-02T00:25:17+11:00 failover peer dhcp-failover: I move from startup to communications-interrupted

172.16.1.102:

ip dhcp-server
do com
do con

В консоли видим:

2020-01-02T00:25:42+11:00 %CLI-I-CRIT: user admin from ssh 172.16.1.1 input: do commit
2020-01-02T00:25:45+11:00 <global_event_wait_try> (/config_applied)
2020-01-02T00:25:45+11:00 <global_event_wait_try> after wait (/config_applied), rc = 0
2020-01-02T00:25:45+11:00 Wrote 0 class decls to leases file.
2020-01-02T00:25:45+11:00 Wrote 19 leases to leases file.
2020-01-02T00:25:45+11:00 failover peer dhcp-failover: I move from communications-interrupted to startup
2020-01-02T00:25:45+11:00 Server starting service.
2020-01-02T00:25:45+11:00 failover peer dhcp-failover: peer moves from normal to communications-interrupted
2020-01-02T00:25:45+11:00 failover peer dhcp-failover: I move from startup to normal
2020-01-02T00:25:45+11:00 balancing pool eed7b0 LAN_POOL  total 30  free 15  backup 12  lts -1  max-own (+/-)3
2020-01-02T00:25:45+11:00 balanced pool eed7b0 LAN_POOL  total 30  free 15  backup 12  lts -1  max-misbal 4
2020-01-02T00:25:45+11:00 failover peer dhcp-failover: peer moves from communications-interrupted to normal
2020-01-02T00:25:45+11:00 failover peer dhcp-failover: Both servers normal

Оба DHCP-сервера перешли в нормальный режим работы.  

Я работал с устройствами, на которых уже ранее был настрое failover, так что у вас вывод может слегка отличаться от моего.

Попробуем получить ip-адрес на PC1: 

PC1> dhcp

DDORA IP 172.16.100.20/27 GW 172.16.100.30

В консоли мы видим:

esr101:

2020-01-02T00:30:04+11:00 DHCPDISCOVER from 00:50:79:66:68:00 (PC11) via gigabit       ethernet 1/0/1
2020-01-02T00:30:05+11:00 DHCPOFFER on 172.16.100.20 to 00:50:79:66:68:00 (PC11)        via gigabitethernet 1/0/1
2020-01-02T00:30:08+11:00 DHCPREQUEST for 172.16.100.20 (172.16.1.101) from 00:5       0:79:66:68:00 (PC11) via gigabitethernet 1/0/1
2020-01-02T00:30:08+11:00 DHCPACK on 172.16.100.20 to 00:50:79:66:68:00 (PC11) v       ia gigabitethernet 1/0/1

esr102:

esr:esr102# 2020-01-02T00:30:04+11:00 DHCPDISCOVER from 00:50:79:66:68:00 via gigabitethernet 1/0/1: load balance to peer dhcp-failover
2020-01-02T00:30:05+11:00 DHCPDISCOVER from 00:50:79:66:68:00 via gigabitethernet 1/0/1: load balance to peer dhcp-failover

Но если мы запросим адрес для PC2 

PC2> dhcp

DDORA IP 172.16.100.16/27 GW 172.16.100.30

то выдаст его esr102

2020-01-02T00:31:11+11:00 DHCPDISCOVER from 00:50:79:66:68:01 (PC21) via gigabitethernet 1/0/1
2020-01-02T00:31:13+11:00 DHCPOFFER on 172.16.100.16 to 00:50:79:66:68:01 (PC21) via gigabitethernet 1/0/1
2020-01-02T00:31:15+11:00 DHCPREQUEST for 172.16.100.16 (172.16.1.102) from 00:50:79:66:68:01 (PC21) via gigabitethernet 1/0/1
2020-01-02T00:31:15+11:00 DHCPACK on 172.16.100.16 to 00:50:79:66:68:01 (PC21) via gigabitethernet 1/0/1

Таким образом и работает балансировка, все запросы по очереди направляются на разные DHCP-сервера.

Проверяем статус failover

do show ip dhcp server failover
esr:esr101(config)# do show ip dhcp server failover
Local server:
    State:                       Normal
    Last state change:           00:25:45 02.01.2020
Remote server:
    State:                       Normal
    Last state change:           00:25:45 02.01.2020

и

esr:esr102(config)#  do show ip dhcp server failover
Local server:
    State:                       Normal
    Last state change:           00:21:37 02.01.2020
Remote server:
    State:                       Normal
    Last state change:           00:25:45 02.01.2020

Как видите всё в порядке.

Добавим статический адрес в DHCP-пул на esr101

config
ip dhcp-server pool LAN_POOL
address 172.16.100.12 mac-address 00:50:79:66:68:00
exit
do com
do con

В консоли видим:

2020-01-02T00:34:58+11:00 %CLI-I-CRIT: user admin from ssh 172.16.1.1 input: do commit
2020-01-02T00:35:01+11:00 lease 172.16.100.12: no subnet.
2020-01-02T00:35:01+11:00 Wrote 0 class decls to leases file.
2020-01-02T00:35:01+11:00 Wrote 0 deleted host decls to leases file.
2020-01-02T00:35:01+11:00 Wrote 0 new dynamic host decls to leases file.
2020-01-02T00:35:01+11:00 Wrote 19 leases to leases file.
2020-01-02T00:35:01+11:00 failover peer dhcp-failover: I move from normal to startup
2020-01-02T00:35:01+11:00 Server starting service.
2020-01-02T00:35:01+11:00 failover peer dhcp-failover: peer moves from normal to communications-interrupted
2020-01-02T00:35:01+11:00 failover peer dhcp-failover: I move from startup to normal
2020-01-02T00:35:01+11:00 balancing pool bfd978 LAN_POOL  total 29  free 13  backup 11  lts 1  max-own (+/-)2
2020-01-02T00:35:01+11:00 balanced pool bfd978 LAN_POOL  total 29  free 12  backup 12  lts 0  max-misbal 4
2020-01-02T00:35:01+11:00 Sending updates to dhcp-failover.
2020-01-02T00:35:01+11:00 failover peer dhcp-failover: peer moves from communications-interrupted to normal
2020-01-02T00:35:01+11:00 failover peer dhcp-failover: Both servers normal

Теперь обновим адрес на PC1

PC1> dhcp

DORA IP 172.16.100.12/27 GW 172.16.100.30

Работает, теперь этому устройству будет выдаваться только этот адрес!

Тестирование отказоустойчивости

Проверим ситуацию, когда одно из устройств отключается от сети.

Отключим кабель из порта 1 на esr101

На esr102 в консоли:

2020-01-02T00:58:00+11:00 timeout waiting for failover peer dhcp-failover
2020-01-02T00:58:00+11:00 peer dhcp-failover: disconnected
2020-01-02T00:58:00+11:00 failover peer dhcp-failover: I move from normal to communications-interrupted

Наш failover перешел в состояние communications-interrupted

Попробуем обновить DHCP на PC1

PC1> dhcp

DDORA IP 172.16.100.24/27 GW 172.16.100.30

Как видите, так как на esr102 не приписан статический ip, был выдан первый свободный адрес.

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

Так что каждый раз, когда вы добавляете статический ip-адрес на один из ESR-200 вам придётся повторить эту же операцию и на другом.

Подключим кабель обратно к esr101.

esr:esr102# 2020-01-02T01:29:55+11:00 Wrote 0 class decls to leases file.
2020-01-02T01:29:55+11:00 Wrote 22 leases to leases file.
2020-01-02T01:29:55+11:00 DHCPREQUEST for 172.16.100.23 (172.16.1.102) from 00:50:79:66:68:00 (PC11) via gigabitethernet 1/0/1
2020-01-02T01:29:55+11:00 DHCPACK on 172.16.100.23 to 00:50:79:66:68:00 (PC11) via gigabitethernet 1/0/1
2020-01-02T01:33:05+11:00 %NTPD-I-PEER: System time was synchronized by NTP Peer 172.16.200.253
2020-01-02T01:33:21+11:00 failover peer dhcp-failover: peer moves from normal to communications-interrupted
2020-01-02T01:33:21+11:00 failover peer dhcp-failover: I move from communications-interrupted to normal
2020-01-02T01:33:21+11:00 balancing pool eed7b0 LAN_POOL  total 30  free 15  backup 12  lts -1  max-own (+/-)3
2020-01-02T01:33:21+11:00 balanced pool eed7b0 LAN_POOL  total 30  free 15  backup 12  lts -1  max-misbal 4
2020-01-02T01:33:21+11:00 Sending updates to dhcp-failover.
2020-01-02T01:33:21+11:00 failover peer dhcp-failover: peer moves from communications-interrupted to normal
2020-01-02T01:33:21+11:00 failover peer dhcp-failover: Both servers normal

Как только связь между устройствами восстановилась, failover опять перешел в состояние normal

Обновим ip-адрес на PC1

PC1> dhcp

DORA IP 172.16.100.12/27 GW 172.16.100.30

Нам опять выдан статический ip-адрес

Заключение

Сегодня мы рассмотрели настройку failover для DHCP-сервера на ESR-200

Установили на mikrotik сервер времени и синхронизировали время на esr101 и esr102

Прописали конфигурацию для failover на esr101 и esr102

Проверили работоспособность failover и получение ip-адресов устройствами

Рассмотрели сценарий, при котором отключается одно из устройств

Проверили как раздаются статические ip-адреса, если они прописаны на отключённом устройстве

Включили отключенное устройство и убедились, что статический адрес снова выдается PC1

 

Прочитано 218 раз Последнее изменение Четверг, 20 августа 2020 15:53