BorderManager + MS VPN [GRE] или "Наша трава тоже ничег

Обсуждение технических вопросов по продуктам Novell

BorderManager + MS VPN [GRE] или "Наша трава тоже ничег

Сообщение Dimerson » 17 мар 2005, 12:34

В общем так.

Всем кто сталкивался с тем что BM NAT не поддерживает протокол GRE [IPPROTO_GRE=47] наверное пришлось применить workaround в силу того что эта поддержка возможно не появится никогда :(

хотя как известно в составе NIAS / BM есть модуль AIOPPTP.NLM - то есть теоретически ядро может работать с GRE.

Написание NAT_HELPER'а для поддержки GRE было бы лучшим выходом [ipflt* умеют работать с протоколом N 47] но сложновато.

Я поглядел в сторону такого написанного на коленке "Frickin PPTP Proxy". Это :

=== cut here ===
What does it do?
Frickin PPTP Proxy allows a Point-to-Point Tunneling Protocol (PPTP) client to connect to a PPTP server through Network Address Translation (NAT).

Why do I need it?
PPTP uses a TCP connection on port 1723, which is referred to as "control channel", and a variant of generic routing encapsulation (GRE) for the actual PPP data.

When using TCP connections you can easily tell two connections apart by looking at their port numbers, with GRE this is not possible since it has no ports.
The PPTP server is able to multiplex between connections by looking at a call-id inside GRE packets. These call-id's are communicated over the control channel before a GRE tunnel is created.

When connecting through NAT all connections will originate from the IP of the NAT gateway and multiple PPTP connections are not possible without a proxy.

Verified operating systems - Working
FreeBSD 5.2.1
MacOS X 10.3.5
OpenBSD 3.5 - 3.6

Frickin may compile and work on other systems. If you have any experience from trying, good or bad, please let me know so I can add it to this page.
=== cut here ===

живет на http://www.placid.tv/index.php?option=c ... &Itemid=43 или
http://sourceforge.net/projects/frickin/

Несмотря на все ограничения присущие этому "пионерскому" модулю захотелось пощупать его в виде NLM [libc].

Что было использовано :

win32_nlm.zip - preconfigured Win32 GCC для сборки NLM модулей. SDK не нужен тк в составе GCC environment уже имеются headers и import files.

после наилегчайшей обработки напильником которая свелась:
1. к добавлению 3 строк в начало main.c [сразу за include]
#define IPPROTO_GRE 0x2F
#define IP_HDRINCL 2
#define MSG_DONTWAIT 0

2.
удаления
#include <netinet/in.h>

3.
добавления
#include <sys/select.h>

4. удаления тела функции _drop_priv_perm()
и ее вызова

/*
if ((g_user) && (0 != _drop_priv_perm(g_user)))
{
fprintf(stderr, "error: Could not change user (%s)\n", strerror(errno));
exit(-1);
}
*/


NLM модуль frickin.nlm собирается с помощью команды
i586-netware-gcc.exe -o frickin.nlm main.c rfc2637.c

[есть пара warnings где переменной типа int присваивают NULL ну и бог с ними].


Далее начинается испытание данного модного чукалова.
Для этого во внутренней сети поднимем на какой-нибудь соседской машине MS VPN сервер, пусть это будет 192.168.1.1, а сервер NetWare имеет IP = 192.168.1.2].

загружаем на сервере NLM

load frickin.nlm s=192.168.1.1 l=192.168.1.2

загрузилось без проблем , на порту 1723 TCP появился listener [про GRE пока неизвестно].

проверим сперва MS VPN клиента напрямую - все ОК.
потом пропишем вместо адреса Windows машины с VPN сервером адрес сервера NetWare.

Пробуем - не рабоает ;(((

Смотрим сниффером - на любой GRE пакет на сервер мы получаем в ответ отлуп по ICMP с диагностикой "Протокол Неизвестен".

воистину - Круто замешивают свою траву братья индусы !.

Я пару дней покурил эту проблему = при просмотре кода aiopptp.nlm
вроде ничего криминального не обнаружено - точно так же открывается RAW сокет для IPPROTO_GRE, так же принимают с него пакеты с помощью recvfrom [с flags=0].

самое удивительное что после загрузки aiopptp.nlm это модное чукалово начинает работать [и даже не коредумпится] то есть MS VPN поднимается [внимание !!! выгружать AIOPPTP.NLM не рекомендуется - а frickin.nlm можно выгружать/загружать].

После дополнительного разглядывания aiopptp.nlm мне показалось [сразу оговорюсь что это не есть 100% истина ибо чужой код в котором замешана крутая трава нелегко !] в функции AIOPPTPGREReceiveData регулярно вызывает неописанную
LSLGetRcvECBRTag.


В общем, причесывание порта Frickin PPTP Proxy на платформе NetWare представляется вполне возможным и по крайней мере на 1 MS VPN сервер ходить из-за NetWare NAT будет возможно.....

У меня если честно времени не особо много - и так потрачены 4 дня с ПНД по ЧТВ да и по части программирования сокетов опыта нет практически. Так что если есть время/желание/опыт замесить свою траву не хуже бангалорской - welcome !!!

....

Если это еще кому-нибудь нужно :(
Аватара пользователя
Dimerson
 
Сообщения: 2791
Зарегистрирован: 15 сен 2002, 14:39
Откуда: Регион 70

Вернуться в Novell

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

cron