DHCP. Option 82. Centos 7 DHCP-сервер + Mikrotik DHCP-Relay. Получение DHCP-клиентами IP-адресов из разных диапазонов: различия между версиями
Cless (обсуждение | вклад) |
Cless (обсуждение | вклад) |
||
| (не показано 7 промежуточных версий этого же участника) | |||
| Строка 4: | Строка 4: | ||
[[Категория:Linux]] | [[Категория:Linux]] | ||
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__ | __ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__ | ||
== Ссылки == | |||
http://www.miquels.cistron.nl/isc-dhcpd/ | |||
http://xgu.ru/wiki/%D0%9E%D0%BF%D1%86%D0%B8%D1%8F_82_DHCP | |||
== Описание == | == Описание == | ||
| Строка 25: | Строка 30: | ||
* '''MikroTik-Cless eth 0/3 - ether2''' | * '''MikroTik-Cless eth 0/3 - ether2''' | ||
* '''MikroTik-Cless eth 0/4 - ether3''' | * '''MikroTik-Cless eth 0/4 - ether3''' | ||
*'''MikroTik-Cless eth 0/5 - ether4''' | |||
Также можно на DHCP-сервере Centos 7 определить приходящие agent.circuit-id и agent.remote-id в пакетах DHCP через tcpdump | |||
Запустим в консоли | |||
<code>tcpdump -i eth0 -vvv -s 1500 '((port 67 or port 68) and (udp[8:1] = 0x1))'</code> | |||
Далее запустим DHCP-клиенте на устройстве клиенте и увидим в выводе tcpdump примерно следующее: | |||
... | |||
'''Circuit-ID''' SubOption 1, length 22: '''MikroTik-Cless eth 0/3''' | |||
'''Remote-ID''' SubOption 2, length 34: '''ether2-lan_cless-switch-ap-111-224''' | |||
... | |||
Способа определить соответствие agent.circuit-id и физических портов именно на Mikrotik мне не удалось | |||
Разобраться | Разобраться | ||
== Входные данные == | == Входные данные == | ||
| Строка 34: | Строка 51: | ||
'''192.168.17.186''' - Centos 7 с DHCP-сервером ISC-DHCP | '''192.168.17.186''' - Centos 7 с DHCP-сервером ISC-DHCP | ||
'''192.168.111.1''' - | '''Mikrotik свитч c DHCP-Relay (с бриджами и адресами на этих бриджах - 192.168.111.1 и 192.168.222.1)''' - к его портам подключены DHCP-клиенты, которые будут получать IP из диапазонов 192.168.111.0/24 и 192.168.222.0/24 | ||
'''pc1, pc2''' - DHCP-клиенты из сети 192.168.111.0/24, подключенные к портам ether2,ether3 устройства Mikrotik DHCP-Relay | '''pc1, pc2''' - DHCP-клиенты из сети 192.168.111.0/24, подключенные к портам ether2,ether3 устройства Mikrotik DHCP-Relay | ||
'''pc3''' - DHCP-клиент из сети 192.168.222.0/24, подключенный к порту ether4 устройства Mikrotik DHCP-Relay | |||
== Настройка == | == Настройка == | ||
=== DHCP-сервер === | === Centos 7 DHCP-сервер === | ||
<code>yum install dhcp</code> | <code>yum install dhcp</code> | ||
| Строка 69: | Строка 88: | ||
shared-network "192.168.111.0" { | shared-network "192.168.111.0" { | ||
subnet 192.168.111.0 netmask 255.255.255.0 { | subnet 192.168.111.0 netmask 255.255.255.0 { | ||
option broadcast-address 192.168.111.255; | option broadcast-address 192.168.111.255; | ||
option routers 192.168.111.1; | option routers 192.168.111.1; | ||
| Строка 74: | Строка 94: | ||
option domain-name-servers 192.168.111.1,77.88.8.8; | option domain-name-servers 192.168.111.1,77.88.8.8; | ||
# Mikrotik Port MikroTik-Cless eth 0/3 (ether2) | |||
class " | class "MikroTik-Cless eth 0/3" { | ||
match if option agent.circuit-id = " | match if option agent.circuit-id = "MikroTik-Cless eth 0/3"; | ||
} | } | ||
pool { | pool { | ||
allow members of " | allow members of "MikroTik-Cless eth 0/3"; | ||
range | range 192.168.111.100 192.168.111.109; | ||
} | } | ||
# Mikrotik Port MikroTik-Cless eth 0/4 (ether3) | |||
class " | class "MikroTik-Cless eth 0/4" { | ||
match if option agent.circuit-id = " | match if option agent.circuit-id = "MikroTik-Cless eth 0/4"; | ||
} | } | ||
pool { | pool { | ||
allow members of " | allow members of "MikroTik-Cless eth 0/4"; | ||
range | range 192.168.111.110 192.168.111.119; | ||
} | |||
} | |||
} | |||
shared-network "192.168.222.0" { | |||
subnet 192.168.222.0 netmask 255.255.255.0 { | |||
option broadcast-address 192.168.222.255; | |||
option routers 192.168.222.1; | |||
option subnet-mask 255.255.255.0; | |||
option domain-name-servers 192.168.222.1,77.88.8.8; | |||
# Mikrotik Port MikroTik-Cless eth 0/5 (ether4) | |||
class "MikroTik-Cless eth 0/5" { | |||
match if option agent.circuit-id = "MikroTik-Cless eth 0/5"; | |||
} | |||
pool { | |||
allow members of "MikroTik-Cless eth 0/5"; | |||
range 192.168.222.100 192.168.222.109; | |||
} | } | ||
} | } | ||
| Строка 108: | Строка 149: | ||
=== Mikrotik DHCP-Relay === | === Mikrotik DHCP-Relay === | ||
DHCP-сервер необходимо выключить | <blockquote>DHCP-сервер на Mikrotik DHCP-Relay необходимо выключить (если он был включен)!</blockquote><blockquote>DHCP-сервер на Centos 7 192.168.17.186 и Mikrotik DHCP-Relay (оба интерфейса с адресами 192.168.111.1 и 192.168.222.1) должны видеть друг друга по L3! Проверить сразу доступность пингами!</blockquote> | ||
Бридж, в порты которого будут приходить клиенты, в зависимости от того, с какой порт они придут - они будут получать IP из разных диапазонов | ==== Бридж сети 192.168.111.0/24, в порты которого будут приходить клиенты, в зависимости от того, с какой порт они придут - они будут получать IP из разных диапазонов сети 192.168.111.0/24 ==== | ||
IP-адрес бриджа | |||
<code>/ip address</code> | |||
<code>add address=192.168.111.1/24 interface=bridge-local-111</code> | |||
Включаем на бридже dhcp-option82 и dhcp-snooping | Включаем на бридже dhcp-option82 и dhcp-snooping | ||
| Строка 116: | Строка 162: | ||
<code>/interface bridge</code> | <code>/interface bridge</code> | ||
<code>add add-dhcp-option82=yes dhcp-snooping=yes fast-forward=no mtu=1500 name=bridge-local</code> | <code>add add-dhcp-option82=yes dhcp-snooping=yes fast-forward=no mtu=1500 name=bridge-local-111</code> | ||
Добавляем порты в бридж | Добавляем порты в бридж сети | ||
<code>/interface bridge port</code> | <code>/interface bridge port</code> | ||
<code>add bridge=bridge-local hw=no interface=ether2</code> | <code>add bridge=bridge-local-111 hw=no interface=ether2</code> | ||
<code>add bridge=bridge-local hw=no interface=ether3</code> | <code>add bridge=bridge-local-111 hw=no interface=ether3</code> | ||
Теоретически необходимо включить опцию trusted=yes на физических портах, она необходимо для разрешения и запрета запросов DHCP-snooping на физических интерфейсах | Теоретически необходимо включить опцию trusted=yes на физических портах, она необходимо для разрешения и запрета запросов DHCP-snooping на физических интерфейсах | ||
| Строка 132: | Строка 178: | ||
<code>/interface bridge port</code> | <code>/interface bridge port</code> | ||
<code>add bridge=bridge-local hw=no interface=ether2 trusted=yes</code> | <code>add bridge=bridge-local-111 hw=no interface=ether2 trusted=yes</code> | ||
<code>add bridge=bridge-local-111 hw=no interface=ether3 trusted=yes</code> | |||
Включаем dhcp-relay '''relay1''' | |||
<code>/ip dhcp-relay</code> | |||
<code>add dhcp-server=192.168.17.186 disabled=no interface=bridge-local-111 local-address=192.168.111.1 name='''relay1'''</code> | |||
==== Бридж сети 192.168.222.0/24, в порты которого будут приходить клиенты, в зависимости от того, с какой порт они придут - они будут получать IP из диапазона сети 192.168.222.0/24 ==== | |||
IP-адрес бриджа | |||
<code>/ip address</code> | |||
<code>add address=192.168.222.1/24 interface=bridge-local-222</code> | |||
Включаем на бридже dhcp-option82 и dhcp-snooping | |||
<code>/interface bridge</code> | |||
<code>add add-dhcp-option82=yes dhcp-snooping=yes fast-forward=no mtu=1500 name=bridge-local-222</code> | |||
Добавляем порты в бридж сети | |||
<code>/interface bridge port</code> | |||
<code>add bridge=bridge-local-222 hw=no interface=ether4</code> | |||
Теоретически необходимо включить опцию trusted=yes на физических портах, она необходимо для разрешения и запрета запросов DHCP-snooping на физических интерфейсах | |||
Включаем dhcp-relay | Но у меня Option 82 заработала без этой этого | ||
<code>/interface bridge port</code> | |||
<code>add bridge=bridge-local-222 hw=no interface=ether4 trusted=yes</code> | |||
Включаем dhcp-relay '''relay2''' | |||
<code>/ip dhcp-relay</code> | <code>/ip dhcp-relay</code> | ||
<code>add dhcp-server=192.168.17.186 disabled=no interface=bridge-local local-address=192.168. | <code>add dhcp-server=192.168.17.186 disabled=no interface=bridge-local-222 local-address=192.168.222.1 name='''relay2'''</code> | ||
== Проверка == | == Проверка == | ||
=== PC1 === | === PC1 === | ||
На pc1 (который подключен в ether2 устройства Mikrotik DHCP-Relay) включаем DHCP-клиент | На '''pc1''' (который подключен в '''ether2''' устройства Mikrotik DHCP-Relay) включаем DHCP-клиент | ||
pc1 должен получить IP из диапазона 192.168.111.100-192.168.111.109 | '''pc1''' должен получить IP из диапазона 192.168.111.100-192.168.111.109 | ||
=== DHCP-сервер === | === DHCP-сервер === | ||
| Строка 191: | Строка 270: | ||
=== PC2 === | === PC2 === | ||
На '''pc2''' (который подключен в '''ether3''' устройства Mikrotik DHCP-Relay) включаем DHCP-клиент | |||
'''pc2''' должен получить IP из диапазона 192.168.111.110-192.168.111.119 | |||
=== PC3 === | |||
На '''pc3''' (который подключен в '''ether4''' устройства Mikrotik DHCP-Relay) включаем DHCP-клиент | |||
'''pc3''' должен получить IP из диапазона 192.168.222.100-192.168.222.109 | |||
Текущая версия на 11:31, 17 августа 2022
Ссылки
http://www.miquels.cistron.nl/isc-dhcpd/
http://xgu.ru/wiki/%D0%9E%D0%BF%D1%86%D0%B8%D1%8F_82_DHCP
Описание
Настроим один DHCP-сервер на Centos 7 для выдачи ip-адресов из разных диапазонов в зависимости от того, с какого порта на свитче Mikrotik с настроенным DHCP-relay приходит запрос от клиента (DHCP-relay и DHCP-сервер могут быть в разных подсетях (широковещательных доменах L2))
DHCP-Relay в пакете DHCP отправляет на DHCP-сервер:
- agent.circuit-id (Имя устройства Mikrotik DHCP-Relay и порта Mikrotik DHCP-Relay, в который пришел DHCP запрос от клиента - в нашем случае "MikroTik-Cless eth 0/3")
- agent.remote-id (Имя порта Mikrotik DHCP-Relay, в который пришел DHCP запрос от клиента - в нашем случае "ether2")
DHCP-сервер на основании agent.circuit-id определяет из какого диапазона выдать IP-адрес исходя из правил (в нашем случае: match if option agent.circuit-id = "MikroTik-Cless eth 0/3";)
Для определения agent.circuit-id на Mikrotik для того (чтобы можно было на DHCP-сервер Linux фильтровать порты как показанов ниже в инструкции) можно включить DHCP-сервер на бридже Mikrotik (перед этим отключив службу DHCP-Relay) предварительно включив опции add-dhcp-option82=yes, dhcp-snooping=yes:
/interface bridge add add-dhcp-option82=yes dhcp-snooping=yes fast-forward=no mtu=1500 name=bridge-local
Подключимся клиентом DHCP к этому DHCP-серверу
После этого в Leases DHCP-сервера увидим заполненные поля agent.circuit-id и agent.remote-id:
- MikroTik-Cless eth 0/3 - ether2
- MikroTik-Cless eth 0/4 - ether3
- MikroTik-Cless eth 0/5 - ether4
Также можно на DHCP-сервере Centos 7 определить приходящие agent.circuit-id и agent.remote-id в пакетах DHCP через tcpdump
Запустим в консоли
tcpdump -i eth0 -vvv -s 1500 '((port 67 or port 68) and (udp[8:1] = 0x1))'
Далее запустим DHCP-клиенте на устройстве клиенте и увидим в выводе tcpdump примерно следующее:
...
Circuit-ID SubOption 1, length 22: MikroTik-Cless eth 0/3
Remote-ID SubOption 2, length 34: ether2-lan_cless-switch-ap-111-224
...
Способа определить соответствие agent.circuit-id и физических портов именно на Mikrotik мне не удалось
Разобраться
Входные данные
192.168.17.186 - Centos 7 с DHCP-сервером ISC-DHCP
Mikrotik свитч c DHCP-Relay (с бриджами и адресами на этих бриджах - 192.168.111.1 и 192.168.222.1) - к его портам подключены DHCP-клиенты, которые будут получать IP из диапазонов 192.168.111.0/24 и 192.168.222.0/24
pc1, pc2 - DHCP-клиенты из сети 192.168.111.0/24, подключенные к портам ether2,ether3 устройства Mikrotik DHCP-Relay
pc3 - DHCP-клиент из сети 192.168.222.0/24, подключенный к порту ether4 устройства Mikrotik DHCP-Relay
Настройка
Centos 7 DHCP-сервер
yum install dhcp
nano /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
# see 'man 5 dhcpd.conf'
ddns-update-style interim;
log-facility local7;
lease-file-name "/var/log/dhcpd.leases";
stash-agent-options true;
local-address 192.168.17.186;
subnet 192.168.17.0 netmask 255.255.255.0 {
}
if exists agent.circuit-id
{
log ( info, concat( " Lease for ",
binary-to-ascii (10, 8, ".", leased-address),
" Switch port: ",
binary-to-ascii (10, 8, ".", option agent.circuit-id),
" Switch MAC: ",
binary-to-ascii(16, 8, ".", option agent.remote-id)));
}
shared-network "192.168.111.0" {
subnet 192.168.111.0 netmask 255.255.255.0 {
option broadcast-address 192.168.111.255;
option routers 192.168.111.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.111.1,77.88.8.8;
# Mikrotik Port MikroTik-Cless eth 0/3 (ether2)
class "MikroTik-Cless eth 0/3" {
match if option agent.circuit-id = "MikroTik-Cless eth 0/3";
}
pool {
allow members of "MikroTik-Cless eth 0/3";
range 192.168.111.100 192.168.111.109;
}
# Mikrotik Port MikroTik-Cless eth 0/4 (ether3)
class "MikroTik-Cless eth 0/4" {
match if option agent.circuit-id = "MikroTik-Cless eth 0/4";
}
pool {
allow members of "MikroTik-Cless eth 0/4";
range 192.168.111.110 192.168.111.119;
}
}
}
shared-network "192.168.222.0" {
subnet 192.168.222.0 netmask 255.255.255.0 {
option broadcast-address 192.168.222.255;
option routers 192.168.222.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.222.1,77.88.8.8;
# Mikrotik Port MikroTik-Cless eth 0/5 (ether4)
class "MikroTik-Cless eth 0/5" {
match if option agent.circuit-id = "MikroTik-Cless eth 0/5";
}
pool {
allow members of "MikroTik-Cless eth 0/5";
range 192.168.222.100 192.168.222.109;
}
}
}
Перезапуск службы
systemctl enable dhcpd.service
systemctl restart dhcpd.service
Проверяем что открыты порты DHCP
netstat -luptn
... udp 0 0 192.168.17.186:67 0.0.0.0:* 17546/dhcpd udp 0 0 0.0.0.0:68 0.0.0.0:* 720/dhclient ...
Mikrotik DHCP-Relay
DHCP-сервер на Mikrotik DHCP-Relay необходимо выключить (если он был включен)!
DHCP-сервер на Centos 7 192.168.17.186 и Mikrotik DHCP-Relay (оба интерфейса с адресами 192.168.111.1 и 192.168.222.1) должны видеть друг друга по L3! Проверить сразу доступность пингами!
Бридж сети 192.168.111.0/24, в порты которого будут приходить клиенты, в зависимости от того, с какой порт они придут - они будут получать IP из разных диапазонов сети 192.168.111.0/24
IP-адрес бриджа
/ip address
add address=192.168.111.1/24 interface=bridge-local-111
Включаем на бридже dhcp-option82 и dhcp-snooping
/interface bridge
add add-dhcp-option82=yes dhcp-snooping=yes fast-forward=no mtu=1500 name=bridge-local-111
Добавляем порты в бридж сети
/interface bridge port
add bridge=bridge-local-111 hw=no interface=ether2
add bridge=bridge-local-111 hw=no interface=ether3
Теоретически необходимо включить опцию trusted=yes на физических портах, она необходимо для разрешения и запрета запросов DHCP-snooping на физических интерфейсах
Но у меня Option 82 заработала без этого
/interface bridge port
add bridge=bridge-local-111 hw=no interface=ether2 trusted=yes
add bridge=bridge-local-111 hw=no interface=ether3 trusted=yes
Включаем dhcp-relay relay1
/ip dhcp-relay
add dhcp-server=192.168.17.186 disabled=no interface=bridge-local-111 local-address=192.168.111.1 name=relay1
Бридж сети 192.168.222.0/24, в порты которого будут приходить клиенты, в зависимости от того, с какой порт они придут - они будут получать IP из диапазона сети 192.168.222.0/24
IP-адрес бриджа
/ip address
add address=192.168.222.1/24 interface=bridge-local-222
Включаем на бридже dhcp-option82 и dhcp-snooping
/interface bridge
add add-dhcp-option82=yes dhcp-snooping=yes fast-forward=no mtu=1500 name=bridge-local-222
Добавляем порты в бридж сети
/interface bridge port
add bridge=bridge-local-222 hw=no interface=ether4
Теоретически необходимо включить опцию trusted=yes на физических портах, она необходимо для разрешения и запрета запросов DHCP-snooping на физических интерфейсах
Но у меня Option 82 заработала без этой этого
/interface bridge port
add bridge=bridge-local-222 hw=no interface=ether4 trusted=yes
Включаем dhcp-relay relay2
/ip dhcp-relay
add dhcp-server=192.168.17.186 disabled=no interface=bridge-local-222 local-address=192.168.222.1 name=relay2
Проверка
PC1
На pc1 (который подключен в ether2 устройства Mikrotik DHCP-Relay) включаем DHCP-клиент
pc1 должен получить IP из диапазона 192.168.111.100-192.168.111.109
DHCP-сервер
Смотрим что пакеты приходят на DHCP-сервер
tcpdump -i eth0 -vvv -s 1500 '((port 67 or port 68) and (udp[8:1] = 0x1))'
... tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes 12:45:17.983356 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto UDP (17), length 382) 192.168.17.7.bootps > centos7-test01.bootps: [udp sum ok] BOOTP/DHCP, Request from cc:2d:e0:39:20:c0 (oui Unknown), length 354, hops 1, xid 0x1668a948, Flags [Broadcast] (0x8000) Gateway-IP 192.168.111.1 Client-Ethernet-Address cc:2d:e0:39:20:c0 (oui Unknown) Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Discover Parameter-Request Option 55, length 8: Subnet-Mask, Classless-Static-Route, Default-Gateway, Static-Route Domain-Name-Server, NTP, Option 138, Vendor-Option Hostname Option 12, length 27: "cless_home_hap-mini-111-212" Client-ID Option 61, length 7: ether cc:2d:e0:39:20:c0 Agent-Information Option 82, length 60: Circuit-ID SubOption 1, length 22: MikroTik-Cless eth 0/3 Remote-ID SubOption 2, length 34: ether2 END Option 255, length 0 ...
Смотрим лог DHCP-сервера
watch -n1 tail -n50 /var/log/messages
... Aug 14 12:46:49 centos7-test01 dhcpd: Lease for 192.168.111.101 Switch port: 77.105.107.114.111.84.105.107.45.67.108.101.115.115.32.101.116.104.32.48.47.51 Switch MAC: 65.74.68.65.72.32.2d.6c.61.6e.5f .63.6c.65.73.73.2d.73.77.69.74.63.68.2d.61.70.2d.31.31.31.2d.32.32.34 Aug 14 12:46:49 centos7-test01 dhcpd: DHCPDISCOVER from cc:2d:e0:39:20:c0 via 192.168.111.1 Aug 14 12:46:50 centos7-test01 dhcpd: DHCPOFFER on 192.168.111.101 to cc:2d:e0:39:20:c0 (cless_home_hap-mini-111-212) via 192.168.111.1 Aug 14 12:46:50 centos7-test01 dhcpd: Lease for 192.168.111.101 Switch port: 77.105.107.114.111.84.105.107.45.67.108.101.115.115.32.101.116.104.32.48.47.51 Switch MAC: 65.74.68.65.72.32.2d.6c.61.6e.5f .63.6c.65.73.73.2d.73.77.69.74.63.68.2d.61.70.2d.31.31.31.2d.32.32.34 Aug 14 12:46:50 centos7-test01 dhcpd: DHCPDISCOVER from cc:2d:e0:39:20:c0 (cless_home_hap-mini-111-212) via 192.168.111.1 Aug 14 12:46:50 centos7-test01 dhcpd: DHCPOFFER on 192.168.111.101 to cc:2d:e0:39:20:c0 (cless_home_hap-mini-111-212) via 192.168.111.1 Aug 14 12:46:50 centos7-test01 dhcpd: Lease for 192.168.111.101 Switch port: 77.105.107.114.111.84.105.107.45.67.108.101.115.115.32.101.116.104.32.48.47.51 Switch MAC: 65.74.68.65.72.32.2d.6c.61.6e.5f .63.6c.65.73.73.2d.73.77.69.74.63.68.2d.61.70.2d.31.31.31.2d.32.32.34 Aug 14 12:46:50 centos7-test01 dhcpd: DHCPREQUEST for 192.168.111.101 (192.168.17.186) from cc:2d:e0:39:20:c0 (cless_home_hap-mini-111-212) via 192.168.111.1 Aug 14 12:46:50 centos7-test01 dhcpd: DHCPACK on 192.168.111.101 to cc:2d:e0:39:20:c0 (cless_home_hap-mini-111-212) via 192.168.111.1 ...
PC2
На pc2 (который подключен в ether3 устройства Mikrotik DHCP-Relay) включаем DHCP-клиент
pc2 должен получить IP из диапазона 192.168.111.110-192.168.111.119
PC3
На pc3 (который подключен в ether4 устройства Mikrotik DHCP-Relay) включаем DHCP-клиент
pc3 должен получить IP из диапазона 192.168.222.100-192.168.222.109