stofel Posted March 24, 2011 (edited) · Report post Тема наверное поднималась много раз. 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 March 24, 2011 by stofel Share this post Link to post Share on other sites
Ivan_83 Posted March 27, 2011 · Report post Тема наверное поднималась много раз. 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
stofel Posted March 28, 2011 · Report post Даже не знаю что и ответить :). Я спрашивал одно, Вы написали много совсем другого. Я проверил на винХП и вин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
Ivan_83 Posted March 28, 2011 · Report post нг интерфейс (ngX_) это виртуальный IP интерфейс, у него нет L2 уровня, потому они с ним не работают в принципе. Они работают с эзернет заголовками, в случае тунелей это лишнее и хватит обычного юдп сокета. 0.0.0.0 существует всегда ;) Я перлом биндился только на него и ловил всё, включая нг интерфейсы. Если пишите под нг - то там проще инжектить готовый юдп пакет запакованный в мбуф, всякие либы и прочее для этого не нужны. PS: а зачем вам отправлять маршруты на тунельный интерфейс? Или они у клиентов применяются к физ интерфейсам? Share this post Link to post Share on other sites
stofel Posted March 28, 2011 · Report post Человек подключается из другого города|страны и нужно передать список сетей к которым он получит доступ через этот тунель. Собственно тривиальнейшая задача, почему господа в microsoft не сунули ее сразу в протокол pptp не понятно. Share this post Link to post Share on other sites
stofel Posted March 29, 2011 (edited) · Report post Выкладываю программу mpd_dhcp_replyer. тыц Критика приветствуется! Коструктивная критика. Повторюсь. Программа запускается в set iface up скрипте в mpd. Передает маршруты с mpd pptp server на windows pptp client. Протестировано на Freebsd8 (на остальных версих freebsd тоже должно работать) и winXP и windows7 Edited March 29, 2011 by stofel Share this post Link to post Share on other sites
stofel Posted March 30, 2011 · Report post Методом нескольких тыков было выяснено что винда ХП понимает маски /24, /16 и /8. /22ю сетку прописывает криво, путая 2 последних байта в маске, остальные просто игнорирует. Share this post Link to post Share on other sites
TheRaven Posted August 22, 2014 · Report post Благодарю, пригодилось. // извиняюсь за некропост Share this post Link to post Share on other sites
bugs952 Posted July 16, 2015 · Report post Выкладываю программу 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