LINUX.ORG.RU

Как разделить dhcp опцию на два заголовка в пакете?

 , , , ,


1

1

Есть isc-dhcp-server на убунте, настроена одна подсеть, добавлены опции такие как 121/249, в них содержится более 32 опций и, как я понимаю, это перетирает option(255) end в пакете. Wireshark показывает Malformed packet при количестве >32 роутов, при <=32 пакет приходит в отличном состоянии. В некоторых капчах из wireshark я видел, что, если указано большое число статических роутов в 249 опции, то она делится на две 249ых и уже потом идет option255(end). Есть ли какая-то команда для isc-dhcp-server, которая скажет серверу, что нужно делить роуты на две опции, если их больше 32ух?

Гугление «long options dhcp» привело к rfc3396, который гласит, что теоретически это возможно, но какого-либо решения я не увидел.


32 роута клиенту? Но зачем?

Пускай ближайший к нему роутер (который dgw) роутит форвардит куда нужно.

Не вижу проблемы на старинном isc dhcpd 4.3.2

          Client-Ethernet-Address 08:fa:bb:69:f7:21
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: Offer
            Server-ID Option 54, length 4: 10.249.0.1
            Lease-Time Option 51, length 4: 600
            Subnet-Mask Option 1, length 4: 255.255.255.0
            BR Option 28, length 4: 10.249.0.255
            Default-Gateway Option 3, length 4: 10.249.0.1
            Domain-Name Option 15, length 5: "local"
            Domain-Name-Server Option 6, length 4: 10.0.0.1
            Classless-Static-Route Option 121, length 255: (10.4.1.0/24:10.249.0.2),(10.4.2.0/24:10.249.0.2),(10.4.3.0/24:10.249.0.2),(10.4.4.0/24:10.249.0.2),(10.4.5.0/24:10.249.0.2),(10.4.6.0/24:10.249.0.2),(10.4.7.0/24:10.249.0.2),(10.4.8.0/24:10.249.0.2),(10.4.9.0/24:10.249.0.2),(10.4.10.0/24:10.249.0.2),(10.4.11.0/24:10.249.0.2),(10.4.12.0/24:10.249.0.2),(10.4.13.0/24:10.249.0.2),(10.4.14.0/24:10.249.0.2),(10.4.15.0/24:10.249.0.2),(10.4.16.0/24:10.249.0.2),(10.4.17.0/24:10.249.0.2),(10.4.18.0/24:10.249.0.2),(10.4.19.0/24:10.249.0.2),(10.4.20.0/24:10.249.0.2),(10.4.21.0/24:10.249.0.2),(10.4.22.0/24:10.249.0.2),(10.4.23.0/24:10.249.0.2),(10.4.24.0/24:10.249.0.2),(10.4.25.0/24:10.249.0.2),(10.4.26.0/24:10.249.0.2),(10.4.27.0/24:10.249.0.2),(10.4.28.0/24:10.249.0.2),(10.4.29.0/24:10.249.0.2),(10.4.30.0/24:10.249.0.2),(10.4.31.0/24:10.249.0.2),[ERROR: Remaining length (6) < 7 bytes]
            Classless-Static-Route Option 121, length 65: (24.0.0.0/2:10.4.33.10),[ERROR: Mask width (249) > 32]
            END Option 255, length 0
У tcpdump-а парсер кривоват, внутри пакета есть все маршруты.

Возможно у тебя не хватает «option dhcp-max-message-size 1024;»

vel ★★★★★ ()
Ответ на: комментарий от vel

Приветствую, [user]vel[/user]

Попробовал dhcp-max-message-size, не сработало. сейчас выкачу свою настройку. Моя задача в том, чтобы просто пакет в wireshark не биты пришел, так как при >32 статик роутах паке прилетает «Malformed».

Исходные: Сервер стоит на ноутбуке, к нему подключаю железку,на нее хочу получить больше 32 роутов(балуюсь с прошивкой).

Выкачу-ка я свою настройку сервер, может подскажешь, что не так.

Буду очень признателен за помощь!

option domain-name "test.test";
option domain-name-servers test.test.lan
default-lease-time 3600;
max-lease-time 7200;
authoritative;

option classless-routes code 121 = array of unsigned char 8;
option classless-routes 24, 192,168,1, 192,168,10,2,
                        24, 192,168,2, 192,168,10,2,
                        ............................
                        ............................
                        ............................
десятую подсеть выкл    #24, 192,168,10, 192,168,10,2,
                        ............................
                        ............................
                        24, 192,168,44, 192,168,10,2;
           (получается чуть больше 40 роутов)
option classless-routes-win code 249 = array of unsigned char 8;
option classless-routes-win 24, 192,168,1, 192,168,10,2,
                        24, 192,168,2, 192,168,10,2,
                        ............................
                        ............................
                        ............................
десятую подсеть выкл    #24, 192,168,10, 192,168,10,2,
                        ............................
                        ............................
                        24, 192,168,44, 192,168,10,2;
            (получается чуть больше 40 роутов)

subnet 192.168.10.0 netmask 255.255.255.0 {
        range 192.168.10.20 192.168.10.50;
        option domain-name "test.test";
        option domain-name-servers test.test.lan;
        option routers 192.168.10.1;
        option broadcast-address 192.168.10.255;
        default-lease-time 600;
        max-lease-time 7200;
}

bpc16 ()
Ответ на: P.S. от bpc16

Отдавать на роутер через dhcp маршруты ?! Месье знает толк в извращении.

Что мешает поднять ospf или на худой конец rip?

В совсем клинической ситуации можно через ssh/telet менять на роутере таблицу маршрутизации.

vel ★★★★★ ()
Ответ на: Приветствую, [user]vel[/user] от bpc16

чтобы просто пакет в wireshark не биты пришел, так как при >32 статик роутах паке прилетает «Malformed».

А просто в hex-е пакет не посмотреть?

tcpdump тоже криво показывает такие пакеты, особенно продолжение опции, но hex-е видно, что все маршруты есть.

vel ★★★★★ ()
Ответ на: комментарий от vel

Знает толк - это точно)

Гипотетически, представим данную ситуацию) Просто у меня есть чужая капча из wireshark и там два раздела 249ой опции (в первой 32 роута, во второй чуть меньше ~15), собссно, я пытаюсь воспроизвести данный пакет, а уж куда там и что там отдавать - вопрос второстепенный. И вот, собственно, меня и интересует, каким образом настроить isc-dhcp-server так, чтобы в пакете было два раздела, предположим, 249ой опции, но можно и 121ой, не суть.

bpc16 ()
Ответ на: Знает толк - это точно) от bpc16

isc-dhcpd умеет это делать самостоятельно.

Единственная возможная проблема со стороны isc-dhcpd - это «option dhcp-max-message-size» которая по умолчанию порядка 536 байт (50 маршрутов дают пакет чуть больше 600 байт).

У меня она в subnet-е прописана была.

Есть еще возможная проблема - dhcp-клиент может не понимать длинные опции.

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

vel ★★★★★ ()
Ответ на: комментарий от vel

Большое спасибо!

Я правильно понимаю, что мне нужно добавить к себе эту опцию в сабнет?

Проблема не в клиенте, я думаю, так как тот пакет, о котором я говорил выше(с двумя опциями 249\121), был так же направлен на точно такой же dhcp-client. Буду пробовать! спасибо!

bpc16 ()
Ответ на: Попробовал, не помогло. от bpc16

ну хз что у тебя там! вот сохраненный трафик c 50-ю маршрутами (10.4.1.0/24 - 10.4.50.0/24)

reading from file o121.pcap, link-type EN10MB (Ethernet)
11:27:52.554692 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 08:fa:bb:69:f7:21, length 300
11:27:53.555614 IP 10.249.0.1.67 > 10.249.0.100.68: BOOTP/DHCP, Reply, length 691
11:27:53.555730 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 08:fa:bb:69:f7:21, length 300
11:27:53.591288 IP 10.249.0.1.67 > 10.249.0.100.68: BOOTP/DHCP, Reply, length 691
подробно
11:27:53.591288 IP 10.249.0.1.67 > 10.249.0.100.68: BOOTP/DHCP, Reply, length 691
        0x0000:  4510 02cf 0000 0000 8011 21b8 0af9 0001
        0x0010:  0af9 0064 0043 0044 02bb 71b7 0201 0600
        0x0020:  fc29 c77b 0000 0000 0000 0000 0af9 0064
        0x0030:  0000 0000 0000 0000 08fa bb69 f721 0000
        0x0040:  0000 0000 0000 0000 0000 0000 0000 0000
....
        0x0100:  0000 0000 0000 0000 6382 5363 3501 0536
        0x0110:  040a f900 0133 0400 0002 5801 04ff ffff
        0x0120:  001c 040a f900 ff03 040a f900 010f 056c
        0x0130:  6f63 616c 0604 0a00 0001 79ff 180a 0401
__________________________________________^^^^ начало первоей секции опции 121
        0x0140:  0af9 0002 180a 0402 0af9 0002 180a 0403
        0x0150:  0af9 0002 180a 0404 0af9 0002 180a 0405
        0x0160:  0af9 0002 180a 0406 0af9 0002 180a 0407
        0x0170:  0af9 0002 180a 0408 0af9 0002 180a 0409
        0x0180:  0af9 0002 180a 040a 0af9 0002 180a 040b
        0x0190:  0af9 0002 180a 040c 0af9 0002 180a 040d
        0x01a0:  0af9 0002 180a 040e 0af9 0002 180a 040f
        0x01b0:  0af9 0002 180a 0410 0af9 0002 180a 0411
        0x01c0:  0af9 0002 180a 0412 0af9 0002 180a 0413
        0x01d0:  0af9 0002 180a 0414 0af9 0002 180a 0415
        0x01e0:  0af9 0002 180a 0416 0af9 0002 180a 0417
        0x01f0:  0af9 0002 180a 0418 0af9 0002 180a 0419
        0x0200:  0af9 0002 180a 041a 0af9 0002 180a 041b
        0x0210:  0af9 0002 180a 041c 0af9 0002 180a 041d
        0x0220:  0af9 0002 180a 041e 0af9 0002 180a 041f
        0x0230:  0af9 0002 180a 0420 0af9 0079 9102 180a
____________________________________________^^ ^^ втрорая часть опции 121
        0x0240:  0421 0af9 0002 180a 0422 0af9 0002 180a
        0x0250:  0423 0af9 0002 180a 0424 0af9 0002 180a
        0x0260:  0425 0af9 0002 180a 0426 0af9 0002 180a
        0x0270:  0427 0af9 0002 180a 0428 0af9 0002 180a
        0x0280:  0429 0af9 0002 180a 042a 0af9 0002 180a
        0x0290:  042b 0af9 0002 180a 042c 0af9 0002 180a
        0x02a0:  042d 0af9 0002 180a 042e 0af9 0002 180a
        0x02b0:  042f 0af9 0002 180a 0430 0af9 0002 180a
        0x02c0:  0431 0af9 0002 180a 0432 0af9 0002 ff
____________________________________________________^^ конец

vel ★★★★★ ()
Ответ на: комментарий от vel

Ну у меня все ровно так, как я указал выше в dhcpd.conf

Вот здесь привожу, как выглядит капча пакета, на который я смотрю, и пакет, который у меня выходит.



0180   30 2f 6f 70 65 6e 61 63 73 2f 61 63 73 78 09 01
0190   ac 1f 16 fd ac 1f 16 fc f9 ff 
           первая часть 249ой        18 ac 1f 22 ac 1f
01a0   78 fe 18 ac 1f 63 ac 1f 78 fe 18 ac 1f 6f ac 1f
01b0   78 fe 18 ac 15 10 ac 1f 78 fe 10 ac 1a ac 1f 78
01c0   fe 18 ac 15 01 ac 1f 78 fe 18 ac 15 44 ac 1f 78
01d0   fe 18 ac 1f 16 ac 1f 78 fe 18 ac 1e 01 ac 1f 78
01e0   fe 18 ac 1e 02 ac 1f 78 fe 18 ac 1e 03 ac 1f 78
01f0   fe 18 ac 1e 04 ac 1f 78 fe 18 ac 1e 05 ac 1f 78
0200   fe 18 ac 1e 06 ac 1f 78 fe 18 ac 1e 06 ac 1f 78
0210   fe 18 ac 1e 07 ac 1f 78 fe 18 ac 1e 08 ac 1f 78
0220   fe 18 ac 1e 09 ac 1f 78 fe 18 ac 1e 0a ac 1f 78
0230   fe 18 ac 1e 0b ac 1f 78 fe 18 ac 1e 0c ac 1f 78
0240   fe 18 ac 1e 0d ac 1f 78 fe 18 ac 1e 0e ac 1f 78
0250   fe 18 ac 1e 0f ac 1f 78 fe 18 ac 1e 10 ac 1f 78
0260   fe 18 ac 1e 11 ac 1f 78 fe 18 ac 1e 12 ac 1f 78
0270   fe 18 ac 1e 13 ac 1f 78 fe 18 ac 1e 14 ac 1f 78
0280   fe 18 ac 1e 15 ac 1f 78 fe 18 ac 1e 16 ac 1f 78
0290   fe 18 ac 1e 17 ac 1f 78 fe f9 f8 
        Вторая часть 249ой              18 ac 1e 18 ac
02a0   1f 78 fe 18 ac 1e 19 ac 1f 78 fe 18 ac 1e 1a ac
02b0   1f 78 fe 18 ac 1e 1b ac 1f 78 fe 18 ac 1e 1c ac
02c0   1f 78 fe 18 ac 1e 1d ac 1f 78 fe 18 ac 1e 1e ac
02d0   1f 78 fe 18 ac 1e 1f ac 1f 78 fe 18 ac 1e 20 ac
02e0   1f 78 fe 18 ac 1e 21 ac 1f 78 fe 18 ac 1e 22 ac
02f0   1f 78 fe 18 ac 1e 23 ac 1f 78 fe 18 ac 1e 24 ac
0300   1f 78 fe 18 ac 1e 25 ac 1f 78 fe 18 ac 1e 26 ac
0310   1f 78 fe 18 ac 1e 27 ac 1f 78 fe 18 ac 1e 28 ac
0320   1f 78 fe 18 ac 1e 29 ac 1f 78 fe 18 ac 1e 2a ac
0330   1f 78 fe 18 ac 1e 2b ac 1f 78 fe 18 ac 1e 2c ac
0340   1f 78 fe 18 ac 1e 2d ac 1f 78 fe 18 ac 1e 2e ac
0350   1f 78 fe 18 ac 1e 2f ac 1f 78 fe 18 ac 1e 30 ac
0360   1f 78 fe 18 ac 1e 31 ac 1f 78 fe 18 ac 1e 32 ac
0370   1f 78 fe 18 ac 1e 33 ac 1f 78 fe 18 ac 1e 34 ac
0380   1f 78 fe 18 ac 1e 35 ac 1f 78 fe 18 02 03 f9 ac
0390   1f 78 bb ff



А в моей капче по неведомой причине такого не происходит.
Единственным, пока что решабельным способом вижу - скачать Вашу "старую" опцию dhcpd и накатить такие же настройки, как указали выше.
bpc16 ()

скачать Вашу «старую» опцию dhcpd

имелось ввиду старую версию dhcpd? Оно и в 4.4.1 нормально работает.

Или у тебя isc dhcp kea?

А как ты трафик собираешь? Привильный способ «tcpdump -ni xxx -s0 -w dhcp.pcap udp and port 67»

vel ★★★★★ ()
Последнее исправление: vel (всего исправлений: 1)