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