Jump to content
Калькуляторы

mpd pptp static routes

Тема наверное поднималась много раз.

 

pptp сервер freebsd c mpd.

Как передать маршруты виндовому клиенту?

 

Исследования показали что при установлении тунеля виндовый клиент посылает DHCPinform пакет и ждет DHCPACK ответ.

В принципе, если есть небольшие знания в С, можно подправить например /usr/ports/net/dhcprelay, чтобы оно умело работать с ng интерфейсами.

В часности там нужно изменить длину ether звголовков, и подправить проверку на тип пакета.

Но у меня днсп сервер находится за pix у которой свои понятия какие пакеты должны ходить какие нет.

Поэтому был выбран путь написать програмку которая бы принимала DHCPinform и посылала обратно DHCPACK.

Программа вешается на iface_up.sh скрипт и тут все хорошо, пакетик принимается, формируется ответ и отсылается.

 

 

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

В общем мне удалось с помошью navion c lissyara.su подобрать ответный пакет под win7. Оказалось что для семерки обязательны опции 54 и 249,

просто опция 249 не прокатывает.

А под winXP никак не выходит.

 

 

 

Вот пакет, который работает для вин7, но не работает для winxp

10:22:03.045450 AF IPv4 (2), length 292: (tos 0x0, ttl 16, id 0, offset 0, flags [none], proto UDP (1 ), length 288)
   skuns.local.net.bootps > 255.255.255.255.bootpc: [udp sum ok] BOOTP/DHCP, Reply, length 260, htype 8, hlen 0, xid 0x32634d27, Flags [none] (0x0000)
          Client-IP 10.144.134.70
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: ACK
            Server-ID Option 54, length 4: skuns.local.net
            Classless-Static-Route-Microsoft Option 249, length 8: (192.168.100.0/24:10.144.134.65)
            END Option 255, length 0
        0x0000:  0200 0000 4500 0120 0000 0000 1011 27e4
        0x0010:  248d 5d5d ffff ffff 0043 0044 010c f1aa
        0x0020:  0208 0000 3263 4d27 0000 0000 0a90 8646
        0x0030:  0000 0000 0000 0000 0000 0000 0000 0000
        0x0040:  0000 0000 0000 0000 0000 0000 0000 0000
        0x0050:  0000 0000 0000 0000 0000 0000 0000 0000
        0x0060:  0000 0000 0000 0000 0000 0000 0000 0000
        0x0070:  0000 0000 0000 0000 0000 0000 0000 0000
        0x0080:  0000 0000 0000 0000 0000 0000 0000 0000
        0x0090:  0000 0000 0000 0000 0000 0000 0000 0000
        0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000
        0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000
        0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000
        0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000
        0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000
        0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000
        0x0100:  0000 0000 0000 0000 0000 0000 6382 5363
        0x0110:  3501 0536 045d 5d8d 24f9 0818 c0a8 640a
        0x0120:  9086 41ff

В общем если кому не трудно скинте полный дамп пакетов запроса ответа для winXP, с рабочего решения, где серваком является винда или циска.

 

Програмку как доделаю обязательно выложу.

Edited by stofel

Share this post


Link to post
Share on other sites

Тема наверное поднималась много раз.

 

pptp сервер freebsd c mpd.

Как передать маршруты виндовому клиенту?

 

Исследования показали что при установлении тунеля виндовый клиент посылает DHCPinform пакет и ждет DHCPACK ответ.

В принципе, если есть небольшие знания в С, можно подправить например /usr/ports/net/dhcprelay, чтобы оно умело работать с ng интерфейсами.

В часности там нужно изменить длину ether звголовков, и подправить проверку на тип пакета.

Но у меня днсп сервер находится за pix у которой свои понятия какие пакеты должны ходить какие нет.

Поэтому был выбран путь написать програмку которая бы принимала DHCPinform и посылала обратно DHCPACK.

Программа вешается на iface_up.sh скрипт и тут все хорошо, пакетик принимается, формируется ответ и отсылается.

 

 

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

В общем мне удалось с помошью navion c lissyara.su подобрать ответный пакет под win7. Оказалось что для семерки обязательны опции 54 и 249,

просто опция 249 не прокатывает.

А под winXP никак не выходит.

 

 

 

Вот пакет, который работает для вин7, но не работает для winxp

Код10:22:03.045450 AF IPv4 (2), length 292: (tos 0x0, ttl 16, id 0, offset 0, flags [none], proto UDP (1 ), length 288)

skuns.local.net.bootps > 255.255.255.255.bootpc: [udp sum ok] BOOTP/DHCP, Reply, length 260, htype 8, hlen 0, xid 0x32634d27, Flags [none] (0x0000)

Client-IP 10.144.134.70

Vendor-rfc1048 Extensions

Magic Cookie 0x63825363

DHCP-Message Option 53, length 1: ACK

Server-ID Option 54, length 4: skuns.local.net

Classless-Static-Route-Microsoft Option 249, length 8: (192.168.100.0/24:10.144.134.65)

END Option 255, length 0

0x0000: 0200 0000 4500 0120 0000 0000 1011 27e4

0x0010: 248d 5d5d ffff ffff 0043 0044 010c f1aa

0x0020: 0208 0000 3263 4d27 0000 0000 0a90 8646

0x0030: 0000 0000 0000 0000 0000 0000 0000 0000

0x0040: 0000 0000 0000 0000 0000 0000 0000 0000

0x0050: 0000 0000 0000 0000 0000 0000 0000 0000

0x0060: 0000 0000 0000 0000 0000 0000 0000 0000

0x0070: 0000 0000 0000 0000 0000 0000 0000 0000

0x0080: 0000 0000 0000 0000 0000 0000 0000 0000

0x0090: 0000 0000 0000 0000 0000 0000 0000 0000

0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000

0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000

0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000

0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000

0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000

0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000

0x0100: 0000 0000 0000 0000 0000 0000 6382 5363

0x0110: 3501 0536 045d 5d8d 24f9 0818 c0a8 640a

0x0120: 9086 41ff

В общем если кому не трудно скинте полный дамп пакетов запроса ответа для winXP, с рабочего решения, где серваком является винда или циска.

 

Програмку как доделаю обязательно выложу.

Какой смысл пытаться отдавать маршруты через p2p интерфейс?

Маршрутизируйте у себя, всё равно по тунелю оно к вам прилететь должно.

Если нужно в обход туннеля то маршруты должны выдаватся дхцп уже клиенту на физ интерфейс.

 

Насчёт ХР - вы вообще уверены что она что либо спрашивает?

htype 8, hlen 0 - вроде с висты появилось, как раз для тунельных интерфейсов: 8 = Hyperchannel

а так обычно: 1 = Ethernet (10Mb) и hlen=6, что не применимо для p2p туннельных интерфейсов.

 

Опции 53 и 54 обязательны в принципе, для любого сколько нибудь вменяемого дхцп клиента.

Опция 249 начиная с висты полностью эквивалетна 121, которая описана в рфк, но до висты мс почему то работало только со своей 249 с таким же контентом.

 

На самом деле править ничего не нужно.

Достаточно биндить юдп сокет на 0.0.0.0 и на него будет всё что нужно падать со всех интерфейсов.

С си тоже не обязательно связываться, достаточно перла: http://forum.nag.ru/forum/index.php?showtopic=64849&st=0&gopid=598040&

(если будете брать мой перл дхцп сервак под себя: у меня зафильтрован Hyperchannel, проверка после получения и разбора дхцп пакета)

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

Share this post


Link to post
Share on other sites

Даже не знаю что и ответить :).

 

Я спрашивал одно, Вы написали много совсем другого.

 

 

Я проверил на винХП и вин7 обе они читают опцию 249

И обе они делают запрос при установке тунеля.

 

Править надо. так как ни dhcprelya ни isc-dhcpd не умеют работать на ng интерфейсах.

 

Я использовал библиотеку libcap а не сокеты. Почему так, потому что это было слизано с dhcprelya

(dhcprelya is a lightweight DHCP relay agent written for Yandex company for

high loaded routers with tens interfaces and thousands hosts behind them.

 

It's fast, independed from any side libraries, and it does not turn on

a promisc mode for listening interfaces.)

 

Демоном нельзя. Нельзя заставить демон биндить на несуществующий интефейс

 

Си используется для возможного последющего патча к mpd (Это если все будет хорошо)

 

 

Ну и на данный момент, мне таки прислали дамп.

Выяснилось что винХП нужен ip пакет со значением ttl именно 0xff (почему они так решили?)

 

Еще нашел стыдный баг в винХП

при передаче маршрута например 10.16.0.0/22 он нормально передается клиенту НО

выглядит в route print как 10.16.0.0 255.255.0.252

Тоесть просто перепутали порядок 2х последних байт!

Share this post


Link to post
Share on other sites

нг интерфейс (ngX_) это виртуальный IP интерфейс, у него нет L2 уровня, потому они с ним не работают в принципе.

 

Они работают с эзернет заголовками, в случае тунелей это лишнее и хватит обычного юдп сокета.

 

 

 

 

0.0.0.0 существует всегда ;)

 

Я перлом биндился только на него и ловил всё, включая нг интерфейсы.

 

Если пишите под нг - то там проще инжектить готовый юдп пакет запакованный в мбуф, всякие либы и прочее для этого не нужны.

 

 

 

 

PS: а зачем вам отправлять маршруты на тунельный интерфейс?

 

Или они у клиентов применяются к физ интерфейсам?

 

 

Share this post


Link to post
Share on other sites

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

Собственно тривиальнейшая задача, почему господа в microsoft не сунули ее сразу в протокол pptp не понятно.

Share this post


Link to post
Share on other sites

Выкладываю программу mpd_dhcp_replyer.

тыц

Критика приветствуется! Коструктивная критика.

 

 

 

Повторюсь.

Программа запускается в set iface up скрипте в mpd.

Передает маршруты с mpd pptp server на windows pptp client.

 

Протестировано на Freebsd8 (на остальных версих freebsd тоже должно работать) и winXP и windows7

Edited by stofel

Share this post


Link to post
Share on other sites

Методом нескольких тыков было выяснено что винда ХП понимает маски /24, /16 и /8.

/22ю сетку прописывает криво, путая 2 последних байта в маске, остальные просто игнорирует.

Share this post


Link to post
Share on other sites

Благодарю, пригодилось.

 

// извиняюсь за некропост

Share this post


Link to post
Share on other sites

Выкладываю программу mpd_dhcp_replyer.

тыц

Критика приветствуется! Коструктивная критика.

 

 

 

Повторюсь.

Программа запускается в set iface up скрипте в mpd.

Передает маршруты с mpd pptp server на windows pptp client.

 

Протестировано на Freebsd8 (на остальных версих freebsd тоже должно работать) и winXP и windows7

 

Добрый день.

Можите ли Вы прислать мне на почту этот скрипт.

А то ссылка не рабочая

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this