Настройка failover для DHCP-сервера на ESR-200
DHCP-сервер является важнейшим сервисом любой большой ЛВС. Прописывать вручную ip-адреса на каждом устройстве в сети из 100 и более ПК превращается в сущий кошмар для системного администратора, поэтому без DHCP-сервера не обойтись. Как правило используется один DHCP-сервер.
В случае выхода из строя DHCP-сервера по окончании срока аренды IP-адреса ПК потеряют доступ в сеть.
Если, возникает потребность в непрерывном функционировании сети, когда даже час простоя может обернуться миллионными убытками необходимо резервировать всё критически важные сервисы локальной сети. Тут нам на помощь и приходит failover. Этот механизм резервирования, который позволяет добавить резервный DHCP-сервер, на который, в случае аварии, будет осуществлено автоматическое переключение.
Сегодня мы рассмотрим настройку failover для DHCP-сервера в ESR-200-FSTEC.
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
Соединим их как указано на рисунке:
Нам так же потребуется пакет с 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
Теперь просто перезагрузите 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.
Добавить комментарий