DHCP позволяет устройствам в сети получать IP-адрес автоматически. В такой сети есть два участника: DHCP-клиент и DHCP-сервер. При получении IP-адреса, клиент посылает широковещательный запрос DISCOVER на поиск DHCP-сервера. Если сервер находится в одной подсети с компьютером, которому необходимо получить сетевые настройки, то проблем в данной ситуации не возникает. В противном случае, когда DHCP-сервер и DHCP-клиент находятся в разных подсетях, широковещательный запрос DISCOVER отброситься на ближайшем маршрутизаторе, так как маршрутизаторы не пропускают широковещательные запросы. Таким образом, необходим механизм, который бы пропускал определенные широковещательные запросы (в данном случае, протокола DHCP, 67/68 порты UDP) на нужный нам сервер.
Более подробно про работу протокола DHCP можно почитать в моей статье, а также здесь. Для примера рассмотри две схемы: в первой схеме – DHCP сервер находится за маршрутизатором в другой подсети, во второй схеме – DHCP-сервер и локальная сеть разнесены в разных VLAN.
Первая схема:
Конфигурация Router:
Router>enable - переходим в расширенный режим Router(config)conf t - переходим в режим конфигурации Router(config)#interface fa0/0 - настраиваем интерфейс в сторону LAN Router(config-if)#description LAN - описание интерфейса Router(config-if)#ip address 172.16.1.1 255.255.255.0 - задаем шлюз по-умолчанию Router(config-if)#no shutdown - включаем интерфейс Router(config-if)#ip helper-address 172.16.2.2 - перенаправляем широковещательные запросы Router(config-if)#exit Router(config)#interface fa0/1 - настраиваем интерфейс в сторону DHCP-server Router(config-if)#description DHCP-server Router(config-if)#ip address 172.16.2.1 255.255.255.0 Router(config-if)#no shutdown
По сути главная строчка в этой конфигурации ip-helper-address 172.16.2.2. Это команда означает, что все широковещательные запросы протокола UDP (в том числе и DHCP Discover), попадающие на порт fa0/0 (в сторону локальной подсети) будут пересылаться на хост 172.16.2.2 (адрес DHCP-server). Пересылаться будут следующие запросы:
- Time (udp 37)
- TACACS (udp 49)
- DNS (udp 53)
- TFTP (udp 69)
- NetBIOS name service (udp 137)
- NetBIOS datagram service (udp 138)
Если вы хотите запретить пересылать некоторые запросы, то воспользуйтесь командой no ip forward-protocol udp номер_порта. Например – запрет на пересылку DNS-запросов:
Router(config)#no ip forward-protocol udp 53
Рассмотрим как пакет DHCP-Discover находит нужный сервер. Компьютер PC0 подготавливает DHCP-запрос на автоматическое выделение IP-адреса.
Видим, что MAC-адрес назначения широковещательный FFFF.FFFF.FFFF – такой пакет отбросится на маршрутизаторе, если на нем не настроена ретрансляция.
Коммутатор перешлет широковещательный пакет на все порты, кроме того с которого был получен пакет. Компьютеры дропнут пакет, так как не выполняют функции DHCP-сервера. Маршрутизатор определит, что Ip-адрес назначения является широковещательным, а также, что пакет относится к DHCP-протоколу. Маршрутизатор видит, что пакет совпадает с helper-критерием и пересылает пакет на helper-адрес. Он смотрит в свою таблицу маршрутизации и видит что подсеть 172.16.2.1/24 находится на порту fa0/1. Маршрутизаор посылает пакет на указанный порт. В качестве Source Ip – маршрутизатор указывает свой адрес 172.16.1.1, в качестве Destination IP указывает IP-адрес DHCP-сервера 172.16.2.2.
Таблица маршрутизации Router:
DHCP-сервер в свою очередь посылает ответ DHCP-Request с предложенным Ip-адресом.
Конфигурация для Switch:
Switch(config)#interface range fa0/1 - fa0/4 - настраиваем порты в сторону PC Switch(config-if-range)#description PC Switch(config-if-range)#switchport mode access - переводим порты в режим доступа Switch(config-if-range)#switchport access vlan 10 - тегируем кадры 10 VLAN'ом Switch(config-if-range)#exit Switch(config)#interface fa0/5 - настраиваем порт в сторону DHCP-server Switch(config-if)#description DHCP-server Switch(config-if)#switchport mode access - переводим порты в режим доступа Switch(config-if)#switchport access vlan 20 - тегируем кадры 20 VLAN'ом Switch(config-if)#exit Switch(config)#interface fa0/24 - настраиваем порт в сторону Router Switch(config-if)#description Router Switch(config-if)#switchport mode trunk - настраиваем порт в режиме транка Switch(config-if)#switchport trunk allowed vlan 10,20 - пропускаем VLAN 10,20 Switch(config-if)#exit
Конфигурация для Router
Router(config)#interface fa0/0 Router(config-if)#no shutdown - включаем интерфейс Router(config-if)#exit Router(config)#interface fa0/0.10 - настраиваем сабинтерфейс для пользователей Router(config-subif)#description User-PC Router(config-subif)#encapsulation dot1q 10 - тегируем кадры 10 VLAN'ом Router(config-subif)#ip address 172.16.1.1 255.255.255.0 - задаем шлюз по-умолчанию Router(config-subif)#ip helper-address 172.16.2.2 - пересылаем широковещательные пакеты на сервер Router(config-subif)#exit Router(config)#interface fa0/0.20 - настраиваем сабинтерфейс для сервера Router(config-subif)#description DHCP-server Router(config-subif)#encapsulation dot1q 20 - тегируем кадры 20 VLAN'ом Router(config-subif)#ip address 172.16.2.1 255.255.255.0 - задаем шлюз по-умолчанию Router(config-subif)#exit
Настройки для второй схеме полностью аналогичны первой, разница лишь в том, что мы указываем команду ip helper-address 172.16.2.2 на сабинтерфейсе.