Morty Posted December 20, 2020 Posted December 20, 2020 (edited) Всем привет! Имеется: 1)Linux Router (10.0.0.1/24; 10.0.1.1/24; 10.0.2.1/24) 2)Linux ISC DHCP server 4.4.2 собранный из исходников с использованием USE_SOCKETS (10.0.0.2/24) 3)Dlink DGS-3000-28XS (10.0.1.2/24) 4)Клиентские устройства (10.0.2.2/24 - 10.0.2.250/24) На DGS-3000-28XS необходимо настроить Relay + option 82, чтобы была связка IP + порт: 1 порт - 10.0.2.2/24 2 порт - 10.0.2.3/24 ... 24 порт - 10.0.2.25/24 Настраиваю dhcp_relay на Dlink: config dhcp_relay add ipif System 10.0.0.2 config dhcp_relay option_82 state enable enable dhcp_relay Конфиг ISC DHCP: local-address 10.0.0.2; authoritative; ddns-update-style none; log-facility local7; default-lease-time 43200; max-lease-time 43200; class "SW0Port1" { match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "00:19:5b:fd:b0:6e" and binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) = "1"; } shared-network net0 { subnet 10.0.2.0 netmask 255.255.255.0 { option routers 10.0.2.1; pool { range 10.0.2.2; allow members of "SW0Port1"; } } Подключаю клиента к 1 порту коммутатора. Клиент не получает IP-адрес. В логах DHCP сервера тишина. Сделал tcpdump на DHCP сервере, пакет с option 82 в котором содержится Agent Circuit ID и Agent Remote ID прилетает. Но dhcp сервер никак не реагирует. iptables на DHCP сервере отключен. В чём я ошибся? Edited December 20, 2020 by zervu1boris Вставить ник Quote
zhenya` Posted December 20, 2020 Posted December 20, 2020 В отдельный шаред нетворк добавьте сабнет интерфейса дхцп сервера. Вставить ник Quote
_J_ Posted December 20, 2020 Posted December 20, 2020 Попробуйте заменить match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "00:19:5b:fd:b0:6e" на match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "0:19:5b:fd:b0:6e" Убираем лидирующий 0 в октете Вставить ник Quote
Morty Posted December 21, 2020 Author Posted December 21, 2020 20 часов назад, zhenya` сказал: В отдельный шаред нетворк добавьте сабнет интерфейса дхцп сервера. Сделал сначала так: shared-network net1 { subnet 10.0.1.0 netmask 255.255.255.0 { } } Получил: DHCPDISCOVER from e8:03:9a:18:82:4b via 10.0.0.2: network net1: no free leases Потом сделал так: shared-network net1 { subnet 10.0.1.0 netmask 255.255.255.0 { range 10.0.1.2 10.0.1.10; option routers 10.0.1.1; } } Клиент получил IP-адрес 10.0.1.3. А должен был получить 10.0.2.2 15 часов назад, _J_ сказал: Попробуйте заменить match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "00:19:5b:fd:b0:6e" на match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "0:19:5b:fd:b0:6e" Убираем лидирующий 0 в октете Пока убрал проверку мака, сделал только по номеру порта Вставить ник Quote
zhenya` Posted December 21, 2020 Posted December 21, 2020 Сабнет пустой сделайте и в один шареднетворк. Вставить ник Quote
Morty Posted December 23, 2020 Author Posted December 23, 2020 В 21.12.2020 в 17:36, zhenya` сказал: Сабнет пустой сделайте и в один шареднетворк. Спасибо, заработало! local-address 10.0.1.2; class "SW0Port1" { match if binary-to-ascii(10, 8, "", suffix( option agent.circuit-id, 1)) = "1"; } shared-network net { subnet 10.0.1.0 netmask 255.255.255.0 { } subnet 10.0.2.0 netmask 255.255.255.0 { option routers 10.0.2.1; pool { range 10.0.2.2; allow members of "SW0Port1"; } } } Вставить ник Quote
Morty Posted December 23, 2020 Author Posted December 23, 2020 (edited) Теперь есть другой вопрос. У нас половина сети построена на управляемых свитчах, а половина на неуправляемых. В неуправляемом сегменте реализована авторизация клиентов с помощью IP + MAC. Вопрос стоит в том, как настроить dhcp сервер так, чтобы можно было выдавать IP по порту и выдавать IP в соответствии с МАКом, и чтоб всё это работало через relay. У меня в голове крутится только такой вариант: local-address 10.0.1.2; class "SW0Port1" { match if binary-to-ascii(10, 8, "", suffix( option agent.circuit-id, 1)) = "1"; } shared-network net { subnet 10.0.1.0 netmask 255.255.255.0 { } subnet 10.0.2.0 netmask 255.255.255.0 { option routers 10.0.2.1; pool { range 10.0.2.2; allow members of "SW0Port1"; } host id1 { hardware ethernet e8:03:9a:18:82:4b; fixed-address 10.0.2.121; option routers 10.0.2.1;} } } Но при таком варианте IP-адрес будет выдан из любого влана Edited December 23, 2020 by zervu1boris Вставить ник Quote
passer Posted December 24, 2020 Posted December 24, 2020 В 23.12.2020 в 12:10, zervu1boris сказал: как настроить dhcp сервер так, чтобы можно было выдавать IP по порту и выдавать IP в соответствии с МАКом, и чтоб всё это работало через relay. deny unknown clients для dhcp-сервера обслуживающего неуправляемые свитчи обязательно! а для подсетки с opt82 allow unknown-clients точно также необходимо. Можете попробовать совместить, но мне когда-то проще было 2 отдельных dhcp-сервера держать. Вставить ник Quote
Morty Posted December 24, 2020 Author Posted December 24, 2020 (edited) Всем спасибо! Удалось реализовать. Пока не знаю на сколько это правильно, нагрузка на CPU покажет. Может кому-то пригодится: local-address 10.0.1.2; class "SW0Port1" { match if binary-to-ascii(10, 8, "", suffix( option agent.circuit-id, 1)) = "1"; } class "abonent0" { match if binary-to-ascii(10, 16, "", suffix(substring(option agent.circuit-id, 0,4), 2)) = "100" and binary-to-ascii(16, 8, ":", substring(hardware, 1, 7)) = "e8:3:9a:18:82:4b"; } shared-network net { subnet 10.0.1.0 netmask 255.255.255.0 { } subnet 10.0.2.0 netmask 255.255.255.0 { option routers 10.0.2.1; pool { range 10.0.2.2; allow members of "SW0Port1"; } pool { range 10.0.2.100; allow members of "abonent0"; } } } В классе abonent0 сначала проверяется с какого vlan пришёл запрос. В моём случае 100. Потом проверяется MAC абонента, в моём случае e8:3:9a:18:82:4b. Абоненту выдаётся IP-адрес: 10.0.2.100 В классе SW0Port1 проверяется с какого порта пришёл запрос. Тут ещё необходимо сделать проверку по MACу свитча, если свитчей больше 1. И ещё пока не разобрался с deny/allow unknown-clients Edited December 24, 2020 by zervu1boris Вставить ник Quote
pppoetest Posted December 24, 2020 Posted December 24, 2020 Если ВСЕ клиенты за релеями, я бы глянул в сторону https://forum.nag.ru/index.php?/topic/64849-dhcp-server-with-sql-support-on-perl/ Работает уже лет 7, аптайм сервиса == аптайму железного сервака. Нагрузка околонулевая. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.