1boris Опубликовано 20 декабря, 2020 (изменено) · Жалоба Всем привет! Имеется: 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 сервере отключен. В чём я ошибся? Изменено 20 декабря, 2020 пользователем zervu1boris Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zhenya` Опубликовано 20 декабря, 2020 · Жалоба В отдельный шаред нетворк добавьте сабнет интерфейса дхцп сервера. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
_J_ Опубликовано 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 в октете Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 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 в октете Пока убрал проверку мака, сделал только по номеру порта Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zhenya` Опубликовано 21 декабря, 2020 · Жалоба Сабнет пустой сделайте и в один шареднетворк. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 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"; } } } Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 23 декабря, 2020 (изменено) · Жалоба Теперь есть другой вопрос. У нас половина сети построена на управляемых свитчах, а половина на неуправляемых. В неуправляемом сегменте реализована авторизация клиентов с помощью 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-адрес будет выдан из любого влана Изменено 23 декабря, 2020 пользователем zervu1boris Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
passer Опубликовано 24 декабря, 2020 · Жалоба В 23.12.2020 в 12:10, zervu1boris сказал: как настроить dhcp сервер так, чтобы можно было выдавать IP по порту и выдавать IP в соответствии с МАКом, и чтоб всё это работало через relay. deny unknown clients для dhcp-сервера обслуживающего неуправляемые свитчи обязательно! а для подсетки с opt82 allow unknown-clients точно также необходимо. Можете попробовать совместить, но мне когда-то проще было 2 отдельных dhcp-сервера держать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 24 декабря, 2020 (изменено) · Жалоба Всем спасибо! Удалось реализовать. Пока не знаю на сколько это правильно, нагрузка на 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 Изменено 24 декабря, 2020 пользователем zervu1boris Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pppoetest Опубликовано 24 декабря, 2020 · Жалоба Если ВСЕ клиенты за релеями, я бы глянул в сторону https://forum.nag.ru/index.php?/topic/64849-dhcp-server-with-sql-support-on-perl/ Работает уже лет 7, аптайм сервиса == аптайму железного сервака. Нагрузка околонулевая. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...