Найти - Пользователи
Полная версия: написать модуль для поднятия впн-туннеля
Начало » Network » написать модуль для поднятия впн-туннеля
1 2 3
ArtemPonomarenko
Спасибо, приятно когда на вопросы отвечают.
Ferroman
Про знаки препинания не забывайте.
yuvb
Господа, день добрый!
Возникла похожая задача. Нужно написать скрипт, который будет подымать впн тунель с сервером (vtun через ssh). Помогите идеями новичку:).
Alex2ndr
yuvb
Возникла похожая задача. Нужно написать скрипт, который будет подымать впн тунель с сервером (vtun через ssh). Помогите идеями новичку
ssh -f -N -L <local_port>:<host>:<host_port> <ssh_user>@<ssh_server>
Не оно?
И каким боком тут питон?
yuvb
Alex2ndr
Спасибо за ответ. Первая мысль была именно такая, но сказали что такое решение не устраивает. Все нужно реализовать средствами питона.
Андрей Светлов
вы оба на одну и ту же работу устраиваетесь?
Alex2ndr
yuvb
Первая мысль была именно такая, но сказали что такое решение не устраивает. Все нужно реализовать средствами питона.
гхм… могу предложить еще вот это:
python -c "import os; os.system('ssh -f -N -L <local_port>:<host>:<host_port> <ssh_user>@<ssh_server>')"
Давайте ка подробнее про задачу и предполагаемые(кем-то) пути решения. И объясните где такое требуется. Если это какой-то ВУЗ и это только примера ради, то одно, а если это предлагают в мейнстрим засунуть, то другое.
ArtemPonomarenko
Alex2ndr
Давайте ка подробнее про задачу и предполагаемые(кем-то) пути решения. И объясните где такое требуется. Если это какой-то ВУЗ и это только примера ради, то одно, а если это предлагают в мейнстрим засунуть, то другое.
моя тема активировалась :)

вот вариант решения, но он не подходит
cmd = "ssh -f -w %(local_tun)s:%(remote_tun)s %(remote_host)s 'iptunnel add tun%(remote_tun)d \
mode ipip remote %(local_host)s local %(remote_host)s; \
ifconfig tun%(remote_tun)d %(remote_ip)s netmask %(netmask)s pointopoint %(local_ip)s'" % self.__dict__
self.ssh_proc = subprocess.Popen(shlex.split(cmd),stdin=sys.stdin,stdout=sys.stdout)
self.ssh_proc.wait()
time.sleep(5)
#
os.system("/sbin/iptunnel add tun%d mode ipip remote %s local %s" % (self.local_tun,self.remote_host,self.local_host))
os.system("/sbin/ifconfig tun0 %s netmask %s pointopoint %s" % \
(self.local_ip,self.netmask,self.remote_ip))
а именно вот этa часть, ее нужно реализовать с помошью python
os.system("/sbin/iptunnel add tun%d mode ipip remote %s local %s" % (self.local_tun,self.remote_host,self.local_host))
точнее создать интерфейс tun не через iptunnel а написать свой
что то типа такого

TUNSETIFF   = 0x400454ca
IFF_TUN = 0x0001

class Link:
def __init__(self,interfaceName):
self.netDeviceFD = os.open("/dev/net/tun", os.O_RDWR)
ifs = ioctl(self.netDeviceFD, TUNSETIFF, struct.pack("16sH", interfaceName, IFF_TUN))
print "Using interface %s" % ifs[:16].strip("\x00")
...
packet = os.read(self.netDeviceFD,1500)
Андрей Светлов
Эти изуверы просят вас продемонстрировать, что вы умеете сделать примитивный прокси?
При этом на знании шифрования на настаивают?
Нечеловеческая жестокость!!!
Alex2ndr
Т е от вас хотят, чтобы вы переписали iptunnel на питоне? Забавно… Я бы не назвал это прокси, это скорее организация туннеля средствами модулей ОС.

ArtemPonomarenko
точнее создать интерфейс tun не через iptunnel а написать свой
что то типа такого
Что то мне знакомое в этом видится. В исходниках ядра(в /usr/src/linux/Documentation/networking/tuntap.txt) есть пример программы на С, которая как раз производит инициализацию туннеля. Приведу ее тут:
#include <linux/if.h>
#include <linux/if_tun.h>

int tun_alloc(char *dev)
{
struct ifreq ifr;
int fd, err;

if( (fd = open("/dev/net/tun", O_RDWR)) < 0 )
return tun_alloc_old(dev);

memset(&ifr, 0, sizeof(ifr));

/* Flags: IFF_TUN - TUN device (no Ethernet headers)
* IFF_TAP - TAP device
*
* IFF_NO_PI - Do not provide packet information
*/
ifr.ifr_flags = IFF_TUN;
if( *dev )
strncpy(ifr.ifr_name, dev, IFNAMSIZ);

if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){
close(fd);
return err;
}
strcpy(dev, ifr.ifr_name);
return fd;
}
собственно если отбосить все фокусы про выделение памяти, то на питоне наверно можно обойтись одной строкой про открытие файла /dev/net/tun в нужном режиме. Дальнейшие действия надо смотреть в документации к модулю tun как таковому, где описывается как именно устанавливается соединение клиент-сервер… Не знаю найдутся ли на этом форуме знатоки того, что делать дальше, но в любом случае к питону это пока имеет слабое отношение. Сложность не в питоне, а в том что делать.

PS Так что это за место, где преподают такие предметы? Интересно даже…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB