Jump to content

Recommended Posts

  • Replies 191
  • Created
  • Last Reply

Top Posters In This Topic

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

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

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

 

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

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

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

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

 

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

 

_____

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

 

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

 

Posted

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

Для доксиса вроде несколько субоций в опции 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

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

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

Posted

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

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

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

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

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

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

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

 

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

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

Posted

Пример работы, пакеты зеркалил сам сервер на релей, а релей на программу, потому везде: "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

Posted

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

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

Posted (edited)

в своем случае часть конфига для 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

Edited by true.ru
Posted

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

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

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

  • 2 weeks later...
Posted

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

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

Posted

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

Posted (edited)

Cramac

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

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

 

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

Edited by s.lobanov
Posted (edited)

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

 

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

Edited by Cramac
  • 3 weeks later...
Posted
Суть патча в том, что при выдаче аренды не учитывается MAC-адрес станции которая запрашивает аренду, а только Option 82.

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

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

 

  • 2 months later...
  • 1 month later...
  • 3 weeks later...
Posted
сгенерив конфиг дхцп, мы знаем какой ип на каком порту на каком свитче, а как узнать потом какой клиент получил этот ип? если только из биллинга брать когда подключится по впн...

 

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

Posted (edited)

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

 

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

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...