AlexPan Posted May 24, 2007 Posted May 24, 2007 Кто занимался вопросом выдачи IP с привязкой к портам свитча? Меня интересует более сложная задача. Как сделать выдачу динамически, с использованием базы под MySQL. Я знаю, что многие просто динамически генерят hdcpd.conf, но это не красиво. Может есть какие патчи к isc-dhcp, что-бы делать непосредственные запросы в MySQL? Вставить ник Quote
Andrey Andruschenko Posted May 24, 2007 Posted May 24, 2007 Кто занимался вопросом выдачи IP с привязкой к портам свитча? Меня интересует более сложная задача. Как сделать выдачу динамически, с использованием базы под MySQL. Я знаю, что многие просто динамически генерят hdcpd.conf, но это не красиво. Может есть какие патчи к isc-dhcp, что-бы делать непосредственные запросы в MySQL? Не ISC, но возможно то, что вам нужно: http://freshmeat.net/projects/dhcpsql/ Вставить ник Quote
mr.Scamp Posted May 26, 2007 Posted May 26, 2007 А оно умеет обновлять DNS-записи для клиентских хостов? Вставить ник Quote
_IX_ Posted May 27, 2007 Posted May 27, 2007 тоже интересует, как выдать клиенту IP с привязкой к порту (без привязки к mac)?? Вставить ник Quote
vIv Posted May 29, 2007 Posted May 29, 2007 ПОСМОТРЕТЬ в эту Option 82! Ну примитив же! http://www.p-dw.com/content/projects/dhcpsnooper/isc.php Вставить ник Quote
AlexPan Posted June 5, 2007 Author Posted June 5, 2007 Задача в общем простая и примитивная. Всю информацию по клиентам держать в одной базе и по этой базе разные сервисы клиента авторизуют, выдают разные адреса и индентификаторы. Есть приблуда для того, что-бы например базу ISC-DHCP держать в LDAP. Но это опять получается шиворот на выворот. Т.е. не сервис лезет в центральную базу, а кто-то постоянно подсовывает этому сервису новые данные. Не подсунул, произошла рассинхронизация... Вставить ник Quote
PereIks Posted June 6, 2007 Posted June 6, 2007 столкнулся с этой же проблемой. Щас задача чтоб хранить IP адреса, номер порта и номер свича в базе (UTM) и dhcp сервером оттуда выдирать их. Пока смотрю и подозреваю что проще наверное будет написать свой DHCP Вставить ник Quote
mr.Scamp Posted June 9, 2007 Posted June 9, 2007 Многие используют скрипт, который выдирает нужные данные из БД, перестраивает конфиг и регулярно перезапускает dhcpd. imho - костыль. Можно ещё кстати посмотреть в сторону dhcp+ldap, но это уже что-то странное. Вставить ник Quote
ram_scan Posted June 9, 2007 Posted June 9, 2007 А что странного ? К ldap приворачивается как зранилище данных тот-же mysql, и через оный ldap можно делать универсально большое количество вещей, включая авторизацию и аутенификацию. Имхо достаточно красиво. Настраивать только надо бубна много иногда. Вставить ник Quote
mr.Scamp Posted June 10, 2007 Posted June 10, 2007 Бубна надо, да. Все привыкли к Radius. Вот прикрутить бы dhcp к радиусу...) Вставить ник Quote
Bushi Posted June 14, 2007 Posted June 14, 2007 В свое время написал демон на сях - netflow collector, radius, dhcp, snmp мониторинг в одном флаконе. В базу ходит через odbc-драйвер, управляется демон по протоколу xml-rpc. До этого генерился конфиг dhcpd.conf из базы. Вставить ник Quote
Andrey Andruschenko Posted June 19, 2007 Posted June 19, 2007 В свое время написал демон на сях - netflow collector, radius, dhcp, snmp мониторинг в одном флаконе. В базу ходит через odbc-драйвер, управляется демон по протоколу xml-rpc. До этого генерился конфиг dhcpd.conf из базы. А не поделитесь ? :) Вставить ник Quote
snark Posted July 16, 2007 Posted July 16, 2007 В свое время написал демон на сях - netflow collector, radius, dhcp, snmp мониторинг в одном флаконе. В базу ходит через odbc-драйвер, управляется демон по протоколу xml-rpc. До этого генерился конфиг dhcpd.conf из базы. поделитесь плииз, уж очень надо... Вставить ник Quote
Bushi Posted July 17, 2007 Posted July 17, 2007 Написано для внутренних нужд, документация отсутствует, autoconf, automake отсутствует, Makefile создан статически (компилится и работает под фряхой, под линуксом компилится, запускать не пробовал). Без документации разобраться сложно. Если есть желание разбираться - через недельку выложу. Самое сложное там - это спроектировать базу данных под демона, так как использует дофига таблиц, вся конфигурация хранится в SQL (абоненты, сетевые сервисы, сети, устройства и интерфейсы, тарифы, зоны трафика). Проверял работу с mysql и postgresql, теоретически под oracle должно заработать. Вставить ник Quote
snark Posted July 17, 2007 Posted July 17, 2007 Без документации разобраться сложно. Если есть желание разбираться - через недельку выложу. Самое сложное там - это спроектировать базу данных под демона, так как использует дофига таблиц, вся конфигурация хранится в SQL (абоненты, сетевые сервисы, сети, устройства и интерфейсы, тарифы, зоны трафика). Проверял работу с mysql и postgresql, теоретически под oracle должно заработать. имея на руках сорцы разобраться и заставить работать вполне возможно ... главное бубен далеко не убирать ;) в общем - желание разбираться есть, выложите пожалуйста... "жду!"(с) Вставить ник Quote
Bushi Posted July 18, 2007 Posted July 18, 2007 Я сейчас в отпуске. Выйду - выложу. Терпение. Вставить ник Quote
snark Posted October 8, 2007 Posted October 8, 2007 Я сейчас в отпуске. Выйду - выложу. Терпение. Вы только скажите сколько ждать, а дальше уже - вопрос времени ... Вставить ник Quote
sirmax Posted October 8, 2007 Posted October 8, 2007 Тлько что сам задался вопросом Кто поделится простейшим конфигом с примерами? PS Свич - des 3526, dhcp-server включен непосредственно в него, в 1-й влан, клиенты во втором... Или на Длинке фича не работате, пробегало где-то что интерфейс управления свичем должен быть в клиентском сегменте? http://www.hub.ru/forum/lofiversion/index.php/t20915.html - у меня такая же проблема... Вставить ник Quote
snark Posted October 8, 2007 Posted October 8, 2007 Кто поделится простейшим конфигом с примерами? Свич - des 3526, dhcp-server включен непосредственно в него, в 1-й влан, клиенты во втором... Или на Длинке фича не работате, пробегало где-то что интерфейс управления свичем должен быть в клиентском сегменте? вот, тестовый конфиг в аккурат для Вашей задачи ... почему тестовый? потому что там много комментариев ;) в рабочем щас их практически нет ...authoritative; ddns-update-style none; default-lease-time 1800; # 1/2 hour max-lease-time 3600; # 1 hour min-lease-time 900; # 1/4 hour use-lease-addr-for-default-route on; one-lease-per-client on; deny duplicates; deny bootp; option arp-cache-timeout 3600; option netbios-node-type 1; #----------------------------------------------------------------------------- # logging if exists agent.remote-id and exists agent.circuit-id { # этакий глухой дебаг :) # log(info, "------------------------------------------------------------------------------"); # log(info, concat("Lease for ", binary-to-ascii(10, 8, ".", leased-address))); # log(info, "raw option-82:"); # log(info, concat("Remote ID: ", binary-to-ascii(16, 8, "|", option agent.remote-id), " Circuit ID: ", binary-to-ascii(10, 8, "|", option agent.circuit-id))); # log(info, "get via substring:"); # log(info, concat("Remote ID: ", binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)), " ", "Circuit ID: ", binary-to-ascii(10, 8, ".", substring(option agent.circuit-id, 5, 1)))); # log(info, "get via suffix:"); # log(info, concat("Remote ID: ", binary-to-ascii(16, 8, ":", suffix(option agent.remote-id, 6)), " ", "Circuit ID: ", binary-to-ascii(10, 8, ".", suffix(option agent.circuit-id, 1)))); if binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)) = "0" { set switch-mac = concat("0", binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)), ":", binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 3, 6))); } else { set switch-mac = binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)); } set switch-addr = binary-to-ascii(10, 8, ".", packet(24, 4)); set switch-port = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)); set switch-port-vlan = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 2, 2)); log(info, concat("- Lease: ", binary-to-ascii(10, 8, ".", leased-address), " via IP: ", switch-addr, " (MAC: ", switch-mac, ") on port: ", switch-port, " in VLAN: ", switch-port-vlan)); } #----------------------------------------------------------------------------- # получение данных через suffix (нечетные порты) class "00:19:5b:ed:91:81:1" { match if binary-to-ascii(16, 8, ":", suffix(option agent.remote-id, 6)) = "0:19:5b:ed:91:81" and binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "1"; } # получение данных через substring (четные порты) class "00:19:5b:ed:91:81:2" { match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "0:19:5b:ed:91:81" and binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) = "2"; } # т.к. в agent.remote-id 1-й байт равен не 2-м нулям, а 1-му нулю # то берем в agent.remote-id не 6 байт, а 5 байт class "00:19:5b:ed:91:81:3" { match if binary-to-ascii(16, 8, ":", suffix(option agent.remote-id, 5)) = "19:5b:ed:91:81" and binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "3"; } # это РАБОЧЕЕ решение! #class "00:19:5b:ed:91:81:4" { # match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 3, 6)) = "19:5b:ed:91:81" and binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) = "4"; #} # это по идее рабочее решение, # МАС не надо брать в кавычки и преобразовывать в ascii текст т.к. МАС бинарный и при переводе в текст нулики теряются class "00:19:5b:ed:91:81:4" { match if substring(option agent.remote-id, 2, 6) = 00:19:5b:ed:91:81 and binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) = "4"; } # вместо MAC-а из agent.remote-id, берем IP_adress свича из пакета class "00:19:5b:ed:91:81:5" { match if binary-to-ascii(10, 8, ".", packet(24, 4)) ="172.31.255.6" and binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "5"; } class "00:19:5b:ed:91:81:6" { match if binary-to-ascii(10, 8, ".", packet(24, 4)) ="172.31.255.6" and binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) = "6"; } # те же яйца только в профиль, просто так запись короче, вместо: # `agent.remote-id = "MAC" and agent.circuit-id = "port"` или `dhcp.relay.ip.addr = "IP" and agent.circuit-id = "port"` # имеем: # `agent.remote-id:agent.circuit-id = "MAC:port"` или `dhcp.relay.ip.addr:agent.circuit-id = "IP:port"` # итого - нужные данные всего в одном месте вместо 2-х как выше class "00:19:5b:ed:91:81:7" { match if concat(binary-to-ascii(16, 8, ":", suffix(option agent.remote-id, 5)), ":", binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1))) = "19:5b:ed:91:81:7"; } class "00:19:5b:ed:91:81:8" { match if concat(binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 3, 6)), ":", binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1))) = "19:5b:ed:91:81:8"; } class "00:19:5b:ed:91:81:9" { match if concat(binary-to-ascii(10, 8, ".", packet(24, 4)), ":", binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1))) = "172.31.255.6:9"; } class "00:19:5b:ed:91:81:10" { match if concat(binary-to-ascii(10, 8, ".", packet(24, 4)), ":", binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1))) = "172.31.255.6:10"; } class "00:19:5b:ed:91:81:21" { match if concat( binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 3, 6)), ":", binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) ) = "19:5b:ed:91:81:21"; } class "00:19:5b:ed:91:81:23" { match if concat(binary-to-ascii(10, 8, ".", packet(24, 4)), ":", binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1))) = "172.31.255.6:23"; } # это 2-й свич! class "00:19:5b:ed:a0:2a:21" { match if concat(binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 3, 6)), ":", binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1))) = "19:5b:ed:a0:2a:21"; } class "00:19:5b:ed:a0:2a:23" { match if concat(binary-to-ascii(10, 8, ".", packet(24, 4)), ":", binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1))) = "172.31.255.7:23"; } #----------------------------------------------------------------------------- shared-network "clients" { subnet 172.31.255.0 netmask 255.255.255.0 { } subnet 192.168.0.0 netmask 255.255.255.0 { option routers 192.168.0.1; option domain-name-servers 192.168.0.1; pool { range 192.168.0.11; allow members of "00:19:5b:ed:91:81:1"; } pool { range 192.168.0.12; allow members of "00:19:5b:ed:91:81:2"; } pool { range 192.168.0.13; allow members of "00:19:5b:ed:91:81:3"; } pool { range 192.168.0.14; allow members of "00:19:5b:ed:91:81:4"; } pool { range 192.168.0.15; allow members of "00:19:5b:ed:91:81:5"; } pool { range 192.168.0.16; allow members of "00:19:5b:ed:91:81:6"; } pool { range 192.168.0.17; allow members of "00:19:5b:ed:91:81:7"; } pool { range 192.168.0.18; allow members of "00:19:5b:ed:91:81:8"; } pool { range 192.168.0.19; allow members of "00:19:5b:ed:91:81:9"; } pool { range 192.168.0.20; allow members of "00:19:5b:ed:91:81:10"; } pool { range 192.168.0.31; allow members of "00:19:5b:ed:91:81:21"; } pool { range 192.168.0.33; allow members of "00:19:5b:ed:91:81:23"; } } subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.5 10.0.0.245; } } http://www.hub.ru/forum/lofiversion/index.php/t20915.html - у меня такая же проблема...так какая проблема то? то что RADIUS адрес не выдает? так он и не должен ... проблема написать скрипт? это действительно проблема? Вставить ник Quote
Bushi Posted December 17, 2007 Posted December 17, 2007 (edited) Выкладываю. Документацию только начал делать. Введение http://www.chics.ru/~daniil/scnd/doc/ Исходники http://www.chics.ru/~daniil/scnd/scnd.tar.gz Edited December 17, 2007 by Bushi Вставить ник Quote
Bushi Posted December 21, 2007 Posted December 21, 2007 Небольшие изменения архитектуры. Добавлена возможность динамического обновления DNS записей для хостов абонентов. Продолжаю писать документацию. Вставить ник Quote
BuHast Posted May 16, 2008 Posted May 16, 2008 (edited) Новую ветку создавать не стал... Но вопрос такой: Amino --- DES3526 --- DHCP Server на FreeBSD DES-3526 - 192.168.0.209 (поднят DHCP relay Option 82) Server - 192.168.0.213 Задача: Выдать AMINO адрес из подсети 192.168.1.0/24 по признаку vendor-class-identifier = Aminoaminet123fisys; конфиг dhcpd.conf: option domain-name "example.com"; #option domain-mame-servers 92.168.0.213; option subnet-mask 255.255.255.0; log-facility local7; default-lease-time 3600; max-lease-time 7200; ddns-update-style none; 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))); log ( info, concat ( " Vendor ", option vendor-class-identifier)); } #match if exists agent.circuit-id; #} class "Amino" { match if substring (option vendor-class-identifier, 0, 19) = "Aminoaminet124fisys"; } subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.110 192.168.0.160; option routers 192.168.0.6; allow unknown-clients; } subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.213; pool { range 192.168.1.55 192.168.1.100; allow members of "Amino"; } } Что видим в логах: May 16 15:08:35 test_FreeBSD dhcpd: Lease for 192.168.0.160 Switch port: 0.4.0.20.0.5 Switch MAC: 0.6.0.19.5b.84.44.c1 May 16 15:08:35 test_FreeBSD dhcpd: Vendor Aminoaminet124fisys May 16 15:08:35 test_FreeBSD dhcpd: DHCPDISCOVER from 00:02:02:0e:49:45 via 192.168.0.209 May 16 15:08:36 test_FreeBSD dhcpd: DHCPOFFER on 192.168.0.160 to 00:02:02:0e:49:45 via 192.168.0.209 May 16 15:08:36 test_FreeBSD dhcpd: Lease for 192.168.0.128 Switch port: 0.4.0.20.0.5 Switch MAC: 0.6.0.19.5b.84.44.c1 May 16 15:08:36 test_FreeBSD dhcpd: Vendor Aminoaminet124fisys May 16 15:08:36 test_FreeBSD dhcpd: DHCPDISCOVER from 00:02:02:0e:49:45 via 192.168.0.209 May 16 15:08:37 test_FreeBSD dhcpd: DHCPOFFER on 192.168.0.128 to 00:02:02:0e:49:45 via 192.168.0.209 May 16 15:08:37 test_FreeBSD dhcpd: Lease for 192.168.0.128 Switch port: 0.4.0.20.0.5 Switch MAC: 0.6.0.19.5b.84.44.c1 May 16 15:08:37 test_FreeBSD dhcpd: Vendor Aminoaminet124fisys May 16 15:08:37 test_FreeBSD dhcpd: DHCPREQUEST for 192.168.0.128 (192.168.0.213) from 00:02:02:0e:49:45 via 192.168.0.209 May 16 15:08:37 test_FreeBSD dhcpd: DHCPACK on 192.168.0.128 to 00:02:02:0e:49:45 via 192.168.0.209 May 16 15:08:37 test_FreeBSD dhcpd: Lease for 192.168.0.128 Switch port: 0.4.0.20.0.5 Switch MAC: 0.6.0.19.5b.84.44.c1 May 16 15:08:37 test_FreeBSD dhcpd: Vendor Aminoaminet124fisys May 16 15:08:37 test_FreeBSD dhcpd: DHCPREQUEST for 192.168.0.128 from 00:02:02:0e:49:45 via 192.168.0.209 May 16 15:08:37 test_FreeBSD dhcpd: DHCPACK on 192.168.0.128 to 00:02:02:0e:49:45 via 192.168.0.209 тк признак в логах появляется, значит сервер его распознаёт. Но как заставить ему выдать нужный ИП? Что я делаю не так? Исковырял себе весь мозх уже... Сильно не пинать, тк поставил FreeBSD 3 дня назад и вот теперь разбираюсь. Edited May 16, 2008 by BuHast Вставить ник 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.