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

isc dhcpd и клиенты "перетыкальщики", кто как решает проблему

афтору написал, пока нет ответа.

Напишите - в чем проявляются побочные эффекты?

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


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

афтору написал, пока нет ответа.

Напишите - в чем проявляются побочные эффекты?

Аффтар ответил - скинул патченые исходники.

 

Работает даже в сети Docsis

( кабельные модемы, которые работают через сеть кабельного ТВ.

Там есть хитрая заморочка с опцией 82 - специально придуманная для docsis.

Есть хитрожопый параметр allow leasequery (dhcpleasequery))

 

В сети Ethernet Тоже пашет.

 

_____

Пока тока 5 минут прошло : )

 

Будем сореть, как дальше будет....

 

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


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

Ничего сложного там нет, в дхцп.

Для доксиса вроде несколько субоций в опции 82 выделено.

// RFC 3046 DHCP Relay Agent Information Option (sub opt 1-2)

// RFC 3256 The DOCSIS (Data-Over-Cable Service Interface Specifications) Device Class DHCP (Dynamic Host Configuration Protocol) Relay Agent Information Sub-option (add subopt 4 to RFC 3046)

// RFC 3527 Link Selection sub-option (add subopt 5 to RFC 3046)

// RFC 3993 Subscriber-ID Suboption (add subopt 6 to RFC 3046)

// RFC 4014 RADIUS Attributes Suboption (add subopt 7 to RFC 3046)

// RFC 4030 Authentication Suboption (add subopt 8 to RFC 3046)

// RFC 4243 Vendor-Specific Relay Suboption (add subopt 9 to RFC 3046)

// RFC 5010 Relay Agent Flags Suboption (add subopt 10 to RFC 3046)

// RFC 5107 Server ID Override Suboption (add subopt 11 to RFC 3046)

 

Вам какая интересна?

 

Могу добавить в утилиту: http://www.netlab.linkpc.net/download/tmp/DHCPTool.exe

пока только ловит и декодирует все опции стандартных типов и субопции тоже жуёт.

На днях хочу добавить декодирование для маршрутов.

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


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

У меня все работает ок уже 3 года.

Опции я разбираю утилитой dhcpdump

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


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

В dhcpdump всё очень скромно, в сравнении :)

dhcpdump не показывает:

- когда у параметра ответ не верной длинны: те должно быть 4 байта число, а сервер выдал 1 байт

- dhcpdump перевирает флаги дхцп: вместо 8000 показывает хх80 - хотя возможно у меня под фряхой порт собран с каким нибудь выравниванием не тем

- dhcpdump не знает новых опций и кое чего со старых

- dhcpdump не разбирает субопции вендора (43 которых код, там бывает куча субопций)

- у меня dhcpdump не декодирует ремонтеИД в опции 82 - опять же может косяк адаптации порта

 

Зато dhcpdump показывает аппаратные адреса, а моя прога такого не может.

Откатаю код под виндой - можно будет портировать, взяв за основу работы с сетью как раз dhcpdump.

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


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

Пример работы, пакеты зеркалил сам сервер на релей, а релей на программу, потому везде: "172.16.0.254:67 -> 172.16.0.3:67"

 

[21:37:56] Received 548 bytes from 172.16.0.254:67 -> 172.16.0.3:67
DHCP head:
        op    = 1 (1) - BOOTREQUEST
        htype    = 1 (1) - Ethernet (10Mb)
        hlen    = 6 (6)
        hops    = 1 (1)
        xid    = 56be006b (1455292523)
        secs    = 0 (0)
        flags    = 8000 (32768) [B=1, MBZ=0]
        ciaddr    = 0.0.0.0
        yiaddr    = 0.0.0.0
        siaddr    = 0.0.0.0
        giaddr    = 10.1.4.249
        chaddr    = 00265a2dfe0b
        sname    = 
        file    = 
    053 - DHCP message type: 01 (001) - DISCOVER
    061 - DHCP Client identifier: 0100265a2dfe0b
    012 - Host name: DIR-300
    055 - Parameter Request List:  <list below>
        01 (001) - Subnet mask
        03 (003) - Routers
        06 (006) - DNS servers
        0f (015) - Domain Name
        2c (044) - NetBIOS name servers
        2e (046) - NetBIOS node type
        2f (047) - NetBIOS scope
        <end list>
    082 - Relay Agent Information:  <sub options list below>
        001 - Circuit ID:  <sub options list below>
            000 - VLAN(xx)/Module(x)/Port(x): 0004000d
            <end list>
        002 - Remote ID:  <sub options list below>
            000 - MAC address: 001e58a0dc93
            <end list>
        <end list>
    255 - END
    000 - PAD [257]


[21:31:47] Received 320 bytes from 172.16.0.254:67 -> 172.16.0.3:67
DHCP head:
        op    = 1 (1) - BOOTREQUEST
        htype    = 1 (1) - Ethernet (10Mb)
        hlen    = 6 (6)
        hops    = 1 (1)
        xid    = 5b0cc216 (1527562774)
        secs    = 0 (0)
        flags    = 0 (0) [B=0, MBZ=0]
        ciaddr    = 0.0.0.0
        yiaddr    = 0.0.0.0
        siaddr    = 0.0.0.0
        giaddr    = 10.1.4.80
        chaddr    = 001fc66ce47f
        sname    = 
        file    = 
    053 - DHCP message type: 03 (003) - REQUEST
    061 - DHCP Client identifier: 01001fc66ce47f
    050 - Request IP address: 10.1.4.166
    054 - DHCP Server identifier: 10.1.4.87
    012 - Host name: eeepc
    060 - Vendor class identifier: MSFT 5.0
    055 - Parameter Request List:  <list below>
        01 (001) - Subnet mask
        0f (015) - Domain Name
        03 (003) - Routers
        06 (006) - DNS servers
        2c (044) - NetBIOS name servers
        2e (046) - NetBIOS node type
        2f (047) - NetBIOS scope
        1f (031) - Perform router discovery
        21 (033) - Static route
        f9 (249) - MSFT - Classless route
        2b (043) - Vendor specific info
        <end list>
    043 - Vendor specific info:  <sub options list below>
        220 - NAP-SoH: 00
        <end list>
    082 - Relay Agent Information:  <sub options list below>
        001 - Circuit ID:  <sub options list below>
            000 - VLAN(xx)/Module(x)/Port(x): 00010008
            <end list>
        002 - Remote ID:  <sub options list below>
            000 - MAC address: 001562c63d80
            <end list>
        <end list>
    255 - END


[21:31:47] Received 313 bytes from 172.16.0.254:67
DHCP head:
        op    = 2 (2) - BOOTREPLY
        htype    = 1 (1) - Ethernet (10Mb)
        hlen    = 6 (6)
        hops    = 1 (1)
        xid    = 5b0cc216 (1527562774)
        secs    = 0 (0)
        flags    = 0 (0) [B=0, MBZ=0]
        ciaddr    = 0.0.0.0
        yiaddr    = 10.1.4.166
        siaddr    = 0.0.0.0
        giaddr    = 10.1.4.80
        chaddr    = 001fc66ce47f
        sname    = 
        file    = 
    053 - DHCP message type: 05 (005) - ACK
    054 - DHCP Server identifier: 10.1.4.87
    051 - IP address lease time: 180
    058 - Renew time (T1): 600
    059 - Rebind time (T2): 900
    001 - Subnet mask: 255.255.255.0
    003 - Routers:  <list below>
        10.1.4.87
        <end list>
    006 - DNS servers:  <list below>
        8.8.8.8
        195.46.116.1
        <end list>
    116 - Auto Configure: disabled
    082 - Relay Agent Information:  <sub options list below>
        001 - Circuit ID:  <sub options list below>
            000 - VLAN(xx)/Module(x)/Port(x): 00010008
            <end list>
        002 - Remote ID:  <sub options list below>
            000 - MAC address: 001562c63d80
            <end list>
        <end list>
    255 - END

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


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

а как вы генерируете конфиг для дхцп сервера, подскажите идею...

а то у нас сеть на половину управляемая, думаю как генерить чтоб не отключить всех...

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


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

в своем случае часть конфига для dhcp сервера, где расписаны классы и ip, делал таким образом.

думаю, что сможете адаптировать под себя.

 

#!/bin/bash

d=2
for mac in  0:19:5b:6b:fa:53 0:19:5b:6b:fa:54 0:19:5b:6b:fa:55; do

for n in $(seq 1 24)
do

echo 'class "'$mac'_'$n'" {match if (binary-to-ascii(10,8,"",suffix(option agent.circuit-id,1)) ="'$n'") and'
echo '            (binary-to-ascii(16,8,":",substring(option agent.remote-id,2,6)) = "'$mac'");'
echo '    }'
echo '    pool {range xxx.xxx.xxx.'$d'; allow members of "'$mac'_'$n'"; }'
if [ $a -ge 254 ]; then
break 2
fi
let "a=$a+1"
done


done

 

когда надо учитывать изменение третьего октета:

 

#!/bin/bash

d=240
c=207
for mac in  0:17:9a:5:39:14 0:17:9a:5:7:4e; do

for n in $(seq 1 24)
do

if [ $d -eq 255 ]; then
let "c=$c+1"
if [ $c -gt 207 ]; then
break 2
fi

let "d=-1"
fi

echo 'class "'$mac'_'$n'" {match if (binary-to-ascii(10,8,"",suffix(option agent.circuit-id,1)) ="'$n'") and'
echo '            (binary-to-ascii(16,8,":",substring(option agent.remote-id,2,6)) = "'$mac'");'
echo '    }'
echo '    pool {range ххх.ххх.'$c'.'$d'; allow members of "'$mac'_'$n'"; }'

let "d=$d+1"
done


done

Изменено пользователем true.ru

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


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

Расскажите в чем суть упоминаемого выше патча и зачем он нужен? Проблему перетыкальщиков решил перезапуском сервера с очищением аренд раз в 5 минут. Время аренды ставлю большое, чтобы не долбали сервер запросами. Перезапуск так и так нужен, чтобы применить новый конфиг. В принципе, можно его хоть каждую минуту делать.

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


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

Расскажите в чем суть упоминаемого выше патча и зачем он нужен? Проблему перетыкальщиков решил перезапуском сервера с очищением аренд раз в 5 минут. Время аренды ставлю большое, чтобы не долбали сервер запросами. Перезапуск так и так нужен, чтобы применить новый конфиг. В принципе, можно его хоть каждую минуту делать.

Суть патча в том, что при выдаче аренды не учитывается MAC-адрес станции которая запрашивает аренду, а только Option 82.

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


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

и еще не в тему вопрос, а как Вы отслеживаете клиентов кто к какому порту подключен при раздаче адресов по опции 82?

 

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


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

и еще не в тему вопрос, а как Вы отслеживаете клиентов кто к какому порту подключен при раздаче адресов по опции 82?

ЭЭЭ что ? опт 82 возвращает порт в который включен клиент + ип мак или еще что-нибудь от коммутатора .

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


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

сгенерив конфиг дхцп, мы знаем какой ип на каком порту на каком свитче, а как узнать потом какой клиент получил этот ип? если только из биллинга брать когда подключится по впн...

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


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

Cramac

Записывать опцию82(и remote-id и circuit-id) в биллинг. Кто(включенец или девочки в офисе) и когда(до или после физического включения) это будет делать зависит от того как у вас организованы бизнес-процессы.

В любом случае, у вас должно быть где-то(биллинг/ тех.учёт/ конфиг dhcp-сервера) взаимнооднозначное соответствие между абонентом(а точнее, его идентификатором) и портом коммутатора. Если у вас такой информации нет, то как вы восстанавливаете лямки, когда охотники за металлом их срежут?

 

И пожалуй самое интересное, зачем вам вообще нужна option82, если у вас впн?

Изменено пользователем s.lobanov

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


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

Хочется уйти от впн.

 

сейчас у нас ип выдаются статически, а адреса выдаются при генерации договора, но вот номер порта/свитча нигде пока не учитывается.

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

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


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

Суть патча в том, что при выдаче аренды не учитывается MAC-адрес станции которая запрашивает аренду, а только Option 82.

Cуть патча в том, что я описывал в сопроводительном письме к оному.

К маку имеет отдаленное и очень условное отношение.

 

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


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

поделитесь патчиком плиз

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


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

поделитесь патчиком плз на makariy11<сабака>gmail.com ато автор молчит....а очень хочется

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


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

и правда - поделителсь плз - borcat(a)gmail.com

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


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

кто бы и со мной поделился ? Действительно (=dd=) в подполье ушел :(

vxbs[a]rambler.ru

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


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

сгенерив конфиг дхцп, мы знаем какой ип на каком порту на каком свитче, а как узнать потом какой клиент получил этот ип? если только из биллинга брать когда подключится по впн...

 

А проблема на самом деле серьезная. Обьясню:

Украли у нас свич с чердака, отрезали все подписанные квартиры, ну или просто порезали все провода на чердаке.

Поставили мы новый свич, восстановили все. А дальше? Кого в какой порт пихать?

В итоге Васю включим в порт Пети -он получит адрес Пети и будет сидеть на его тарифе и т.д.

Адреса получат все, а вот кто чей -неизвестно.

 

Если только маки смотреть -но это не вариант ибо юзер у себя дома может воткнуть все что угодно.

Остается только брать записи метража из диагностики кабеля при подключении и по нему ориентироваться кто где.

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


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

А проблема на самом деле серьезная. Обьясню:

Украли у нас свич с чердака, отрезали все подписанные квартиры, ну или просто порезали все провода на чердаке.

Поставили мы новый свич, восстановили все. А дальше? Кого в какой порт пихать?

Выдавать не только по опции 82 IP адреса, но ещё и по последнему MAC адресу, засветившемуся на свиче, остальные звонят в техподдержку.

В 95% случаем MAC-адрес у клиентов не меняется, а если и меняется, то у одно клиента со всего свича.

Ищите маки, определяйте пользователей, и переформировывайте абонентов по портам свича заного, основываясь на появлении MAC адресов.

Когда все заного определены - выключайте привязку к MAC адресу и выдавайте всё по старому.

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


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

Как вариант на новом свитче выдавать Ip какого-то диапазона, и все запросы с этих ip перенаправлять на страницу с надписью: "Позвоните в ТП по телефону, Ваш ip такой-то." Человек звонит, исходя их полученного адреса вычисляем его порт и ставим туда уже адрес клиента из биллинга.

 

А проблема на самом деле серьезная. Обьясню: Украли у нас свич с чердака, отрезали все подписанные квартиры, ну или просто порезали все провода на чердаке. Поставили мы новый свич, восстановили все. А дальше? Кого в какой порт пихать? В итоге Васю включим в порт Пети -он получит адрес Пети и будет сидеть на его тарифе и т.д. Адреса получат все, а вот кто чей -неизвестно.
Изменено пользователем [-Alt-]

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


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

Join the conversation

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

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

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

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

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

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

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