Jump to content

Recommended Posts

Posted

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

 

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

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

 

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

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

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

Posted

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

Posted

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

Posted

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

imho - костыль.

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

Posted

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

Posted

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

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

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

  • 4 weeks later...
Posted

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

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

Posted

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

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

 

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

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

 

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

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

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

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

 

PS

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

 

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

 

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

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

 

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

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

  • 4 months later...
Posted (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 by BuHast

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.