Перейти к содержимому
Калькуляторы

isc-dhcp Option 82

Кто занимался вопросом выдачи IP с привязкой к портам свитча?

 

Меня интересует более сложная задача. Как сделать выдачу динамически, с использованием базы под MySQL. Я знаю, что многие просто динамически генерят hdcpd.conf, но это не красиво. Может есть какие патчи к isc-dhcp, что-бы делать непосредственные запросы в MySQL?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кто занимался вопросом выдачи IP с привязкой к портам свитча?

 

Меня интересует более сложная задача. Как сделать выдачу динамически, с использованием базы под MySQL. Я знаю, что многие просто динамически генерят hdcpd.conf, но это не красиво. Может есть какие патчи к isc-dhcp, что-бы делать непосредственные запросы в MySQL?

Не ISC, но возможно то, что вам нужно:

http://freshmeat.net/projects/dhcpsql/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А оно умеет обновлять DNS-записи для клиентских хостов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

тоже интересует, как выдать клиенту IP с привязкой к порту (без привязки к mac)??

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ПОСМОТРЕТЬ в эту Option 82!

Ну примитив же!

 

http://www.p-dw.com/content/projects/dhcpsnooper/isc.php

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Задача в общем простая и примитивная. Всю информацию по клиентам держать в одной базе и по этой базе разные сервисы клиента авторизуют, выдают разные адреса и индентификаторы. Есть приблуда для того, что-бы например базу ISC-DHCP держать в LDAP. Но это опять получается шиворот на выворот. Т.е. не сервис лезет в центральную базу, а кто-то постоянно подсовывает этому сервису новые данные. Не подсунул, произошла рассинхронизация...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

столкнулся с этой же проблемой. Щас задача чтоб хранить IP адреса, номер порта и номер свича в базе (UTM) и dhcp сервером оттуда выдирать их. Пока смотрю и подозреваю что проще наверное будет написать свой DHCP

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Многие используют скрипт, который выдирает нужные данные из БД, перестраивает конфиг и регулярно перезапускает dhcpd.

imho - костыль.

Можно ещё кстати посмотреть в сторону dhcp+ldap, но это уже что-то странное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А что странного ? К ldap приворачивается как зранилище данных тот-же mysql, и через оный ldap можно делать универсально большое количество вещей, включая авторизацию и аутенификацию. Имхо достаточно красиво. Настраивать только надо бубна много иногда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Бубна надо, да. Все привыкли к Radius.

Вот прикрутить бы dhcp к радиусу...)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В свое время написал демон на сях - netflow collector, radius, dhcp, snmp мониторинг в одном флаконе. В базу ходит через odbc-драйвер, управляется демон по протоколу xml-rpc. До этого генерился конфиг dhcpd.conf из базы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В свое время написал демон на сях - netflow collector, radius, dhcp, snmp мониторинг в одном флаконе. В базу ходит через odbc-драйвер, управляется демон по протоколу xml-rpc. До этого генерился конфиг dhcpd.conf из базы.

А не поделитесь ? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В свое время написал демон на сях - netflow collector, radius, dhcp, snmp мониторинг в одном флаконе. В базу ходит через odbc-драйвер, управляется демон по протоколу xml-rpc. До этого генерился конфиг dhcpd.conf из базы.

поделитесь плииз, уж очень надо...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Написано для внутренних нужд, документация отсутствует, autoconf, automake отсутствует, Makefile создан статически (компилится и работает под фряхой, под линуксом компилится, запускать не пробовал).

Без документации разобраться сложно. Если есть желание разбираться - через недельку выложу.

 

Самое сложное там - это спроектировать базу данных под демона, так как использует дофига таблиц, вся конфигурация хранится в SQL (абоненты, сетевые сервисы, сети, устройства и интерфейсы, тарифы, зоны трафика). Проверял работу с mysql и postgresql, теоретически под oracle должно заработать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Без документации разобраться сложно. Если есть желание разбираться - через недельку выложу.

 

Самое сложное там - это спроектировать базу данных под демона, так как использует дофига таблиц, вся конфигурация хранится в SQL (абоненты, сетевые сервисы, сети, устройства и интерфейсы, тарифы, зоны трафика). Проверял работу с mysql и postgresql, теоретически под oracle должно заработать.

имея на руках сорцы разобраться и заставить работать вполне возможно ... главное бубен далеко не убирать ;) в общем - желание разбираться есть, выложите пожалуйста... "жду!"(с)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я сейчас в отпуске. Выйду - выложу. Терпение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я сейчас в отпуске. Выйду - выложу. Терпение.

Вы только скажите сколько ждать, а дальше уже - вопрос времени ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тлько что сам задался вопросом

Кто поделится простейшим конфигом с примерами?

 

PS

Свич - des 3526, dhcp-server включен непосредственно в него, в 1-й влан, клиенты во втором...

 

Или на Длинке фича не работате, пробегало где-то что интерфейс управления свичем должен быть в клиентском сегменте?

 

http://www.hub.ru/forum/lofiversion/index.php/t20915.html - у меня такая же проблема...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кто поделится простейшим конфигом с примерами?

 

Свич - 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 адрес не выдает? так он и не должен ... проблема написать скрипт? это действительно проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Выкладываю.

Документацию только начал делать.

 

Введение

http://www.chics.ru/~daniil/scnd/doc/

 

Исходники

http://www.chics.ru/~daniil/scnd/scnd.tar.gz

Изменено пользователем Bushi

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Небольшие изменения архитектуры. Добавлена возможность динамического обновления DNS записей для хостов абонентов. Продолжаю писать документацию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Новую ветку создавать не стал... Но вопрос такой:

 

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 дня назад и вот теперь разбираюсь.

Изменено пользователем BuHast

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.