Если в соседней локалке во всю шпилятся в одну из популярных сетевых игр, а ты не можешь поучаствовать в баталиях из-за того, что гама рассчитана только на LAN, либо админы намудрили с ограничениями, выход один – поднять VPN. Учитывая, что туннель не будет постоянным, главным требованием выдвинем простоту в настройках и нетребовательность к ресурсам. Посмотрим, что предлагает нам OpenSource.

 

VTun

Очень популярная программа, позволяющая быстро создать виртуальный туннель через TCP/IP сети. Знакомство с сайтом проекта (vtun.sf.net) обнажает главный недостаток VTun: он не развивается вот уже три года (последнее обновление датировано 6 декабря 2007 года). Но нетребовательность к системным ресурсам, простота и гибкость настроек привели к тому, что его не списали со счетов, и сегодня VTun доступен в репозиториях большинства *nix систем: Linux, *BSD и Solaris. Пример для Debian/Ubuntu:

$ sudo apt-cache search vtun
vtun - virtual tunnel over TCP/IP networks

VTun поддерживает несколько типов виртуальных туннелей – IP, PPP, SLIP, Ethernet, TTY и pipe. В качестве транспортного протокола может использоваться на выбор TCP или UDP. Потоки кодируются 128-битным ключом по алгоритму BlowFish, для чего используются библиотеки OpenSSL. Предусмотрена компрессия потока при помощи библиотек zlib и lzo. Уровень сжатия также поддается регулировке, поэтому можно выбрать оптимальный вариант между нагрузкой на CPU и загрузкой канала. VTun использует клиент-серверную архитектуру. На одном из хостов программа запускается как сервер (слушает 5000 порт), а на остальных – как клиент. Количество клиентов ограничивается только мощностью сервера. При этом настройки VTun позволяют при необходимости ограничить скорость туннелей, чтобы равномерно распределить загрузку канала.

Если клиент находится за NAT, VTun позволяет ему без проблем подключаться к серверу, для этого следует лишь использовать в качестве транспорта TCP. Собственно, эта особенность и привлекает пользователей.

Система работает через универсальные драйверы tun и tap, позволяющие программам в окружении пользователя (userspace) самостоятельно обрабатывать пакеты. Нужные устройства, как правило, уже созданы в системе:

$ ls -al /dev/net/tun
crw-rw-rw- 1 root root 10, 200 2010-07-10 12:39 /dev/net/tun

Если ядро пересобиралось самостоятельно, тогда не забудь включить опции CONFIG_TUN и CONFIG_ETHERTAP.

Устанавливаем пакет vtun в Debian/Ubuntu:

$ sudo apt-get install vtun

Все настройки демона производятся в файле /etc/vtund.conf. Можно запустить несколько демонов, каждый из которых будет считывать свой конфиг и работать в качестве сервера или клиента. В поставке уже идет готовый шаблон файла, требующий предварительной правки. Все возможные параметры можно найти в документации VTun.

Настройки внутри разбиты на несколько разделов. Секции options и default являются общими для всех, позже их можно переопределить для каждого клиента:

$ sudo nano /etc/vtund.conf

options {
port 5000;
syslog daemon;

# описываем пути к используемым программам
ifconfig /sbin/ifconfig;
route /sbin/route;
ip /sbin/ip;
firewall /sbin/iptables;
}

default {
compress lzo:9; # уровень сжатия
speed 0; # ограничение полосы
}

# теперь описываем клиентов
client1 {
passwd p@ssVV0rD;
# тип может быть: tun, ether, tty, pipe
type tun;
proto udp;
encrypt yes;
# speed 256:128;
keepalive yes;
# команда, выполняемая при подключении
up {
ifconfig "%% 10.1.0.1 pointopoint 10.1.0.2 mtu 1450
# при необходимости пробрасываем соединение
# firewall "-t nat -A POSTROUTING -s 10.1.0.2 -j MASQUERADE";
};

# команда при отключении (необязательная)
down {
firewall "-t nat -F";
ifconfig "%% down";
};
}

Аналогично секции up можно создать секцию down, где описать настройки, которые должны быть выполнены в процессе разрыва VPN. Команды могут быть любые, поэтому, кроме настроек интерфейса, сюда можно прописать пару строк, позволяющих создавать автоматический бэкап важных данных. Например, так:

program /bin/sh "-c 'tar cf - /etc/*'";

В Debian/Ubuntu для удобства управления предлагается файл /etc/default/vtun. При настройке сервера достаточно изменить внутри одну строку:

$ sudo nano /etc/default/vtun

# для сервера
RUN_SERVER=yes

Теперь можно запускать сервер:

$ sudo invoke-rc.d vtun start

Или на первых порах, чтобы получить больше информации, лучше ввести:

$ sudo vtund -s

Клиент настраивается аналогично, параметры, по сути, зеркальны серверным:

$ sudo nano /etc/vtund.conf

options {
port 5000;
timeout 60;
ifconfig /sbin/ifconfig;
route /sbin/route;
firewall /sbin/iptables;
}

client1 {
passwd p@ssVV0rD;
type tun;
up {
ifconfig "%% 10.1.0.2 pointopoint 10.1.0.1 mtu 1450";
route "add -net 1.2.3.4/16 gw 10.1.0.1";
};
}

И если ты используешь Debian-based дистрибутив, поправь /etc/default/vtun, чтобы init-файл знал, кого запускать.

$ sudo nano /etc/default/vtun

CLIENT0_NAME=client1
# IP или имя VTun сервера
CLIENT0_HOST=vtun.mydomain.ru

Для начала запустим vtund с указанием имени клиентского хоста, фигурирующего в конфиге, и IP-адреса (имени) сервера:

$ sudo vtund -р client1 vtun.mydomain.ru

Следим за процессом подключения, в другой консоли смотрим логи:

$ sudo tail -f /var/log/message

Команда ifconfig покажет наличие tun0 интерфейса. На этом настройку Vtun можно считать законченной. В дальнейшем клиента можно запускать обычным образом через init-скрипт:

$ sudo invoke-rc.d vtun start

 

tinc

Следующий претендент на звание самого маленького и самого простого в настройках VPN - tinc (tinc-vpn.org). Стартовал проект достаточно давно (в 1998 году), активные разработки ведутся до сих пор. В отличие от VTun, tinc позволяет соединить между собой компьютеры через IPv4/IPv6 сети, работающие под управлением самых разных ОС: Linux, *BSD, Mac OS X, Solaris, Windows 2k-Se7en. Кроме того, экспериментально поддерживается работа и на таких девайсах, как iPhone, iPod. Для шифрования потока задействуется OpenSSL, возможно сжатие с помощью zlib или lzo. Также tinc предоставляет возможность соединить вместе несколько Ethernet сегментов, что позволяет, например, играть в игры, доступные только в локальной сети. Чтобы добавить новый мост, достаточно создать еще один конфигурационный файл.

Так же, как и VTun, tinc требует наличия драйверов TUN/TAP. Пакет с tinc доступен в репозиториях большинства дистрибутивов. Установочный пакет для Windows можно скачать на офсайте. В Debian/Ubuntu вводим:

$ sudo apt-get install tinc

После установки стартует демон, но делать ему сейчас нечего. Чтобы все заработало, необходимо создать конфигурационные файлы, сгенерировать пару ключей и распространить их на компьютеры, участвующие в подключении.

Конфиг в наличии пока только один. В файле /etc/tinc/net.boot прописываются названия сетей, которые должны быть запущены tinc. Он пуст (комментарии не в счет), добавим сюда нашу будущую сеть:

$ sudo nano /etc/tinc/net.boot

 

vpnnet

В /usr/share/doc/tinc/examples ты найдешь примеры конфигов. По мере необходимости копируем их в /etc/tinc и правим. Чтобы иметь возможность подключаться сразу к нескольким VPN-сетям, следует расположить их настройки в «своих» подкаталогах. Например, в нашем случае это /etc/tinc/vpnnet, именно здесь демон будет искать настройки сети vpnnet. В пределах одной VPN сети ее название необязательно должно быть уникальным на всех системах-участниках, но лучше использовать одно имя, чтобы потом не путаться. Если VPN-сеть одна, такое распределение по каталогам необязательно (все конфиги тогда размещаем в корне /etc/tinc). Режим VPN и удаленный узел, к которому будем подключаться, описываются в файле tinc.conf:

$ sudo nano /etc/tinc/vpnnet/tinc.conf

# символическое имя подключения
Name = my_vpn
# компьютер, к которому подключаемся
# возможно задание нескольких ConnectTo
ConnectTo = vpn01
# устройство
Device = /dev/net/tun
# режим VPN: router|switch|hub
Mode = switch
PrivateKeyFile = /etc/tinc/vpnnet/rsa_key.priv
# если несколько сетевых карт
BindToInterface = eth1
# пакеты, которые не могут пройти напрямую, будут отброшены
# DirectOnly = yes
# перенаправление пакетов
# Forwarding = <off|internal|kernel>

На самом деле все параметры не нужны. В самых простых случаях достаточно оставить первые пять директив. Данные о конкретных узлах сети прописываются в подкаталоге hosts, в нашем примере мы должны создать два файла: my_vpn и vpn01.

$ sudo nano /etc/tinc/vpnnet/hosts/my_vpn

# IP адрес или имя узла
Address = 1.2.3.4
# локальная сеть, используется для маршрутизации
Subnet = 192.168.1.0/24
# использование TCP
# TCPOnly = yes

Второй файл практически аналогичен, поэтому в примере оставлю только адрес.

$ sudo nano /etc/tinc/vpnnet/hosts/vpn01

Address = vpn01.mydomain.ru

По умолчанию tinc использует порт 655; если он занят или блокируется файером, то его можно изменить, указав нужное значение в параметре Port.
Кроме того, в файлах узлов хранится публичный ключ (заносится автоматически при создании).

Генерируем ключ:

$ sudo tincd -n vpnnet -K

В процессе работы скрипт спросит, куда сохранить приватный и публичный ключи.
Также для каждой сети следует настроить скрипты, обеспечивающие поднятие/остановку нужного интерфейса и маршрутизацию при включении VPN: tinc-up/tinc-down, host-up/subnet-down, subnet-up/subnet-down. Опять же, не все они обязательны.

$ sudo nano /etc/tinc/vpnnet/tinc-up

#!/bin/sh
modprobe tun
ifconfig $INTERFACE 192.168.1.10 netmask 255.255.255.0

Все, можно запускать:

$ sudo /etc/init.d/tinc start

Процесс подключения будет отображен в логах, команда ifconfig покажет новое соединение. Если что-то пошло не так, запускаем демона в режиме отладки:

$ sudo tincd -n vpnnet -d5 -D

 

N2N

Проект N2N (network to network, ntop.org/n2n) предлагает решение, позволяющее создать VPN-соединение между двумя и более сетями. Для обмена данными используется P2P-архитектура, поэтому участники после подключения отправляют информацию напрямую. Конечный компьютер (Edge Node) может одновременно быть подключен к нескольким таким сетям. Обмен происходит при помощи UDP-пакетов. Процессом установления связи управляет специальный узел supernode, он же используется как промежуточный в тех случаях, когда Edge Node не могут взаимодействовать напрямую. Причем в обязанности supernode не входит функция авторизации, то есть никаких учетных данных для соединения он не содержит, клиенты сами договариваются между собой после подключения. Если пароли совпадают, происходит поднятие VPN. Такой подход упрощает работу в случае недоступности одного из supernode – просто выбираем другой и подключаемся через него. Supernode не совмещает в себе функции Edge Node, при необходимости клиент запускают отдельно.

С точки потребления трафика держать подобный туннель постоянно открытым довольно накладно (все время идет обращение к supernode), поэтому его используют для кратковременных сеансов. К сожалению, в N2N есть минусы и с точки зрения безопасности. Так, пароли указываются в командной строке, поэтому их легко подсмотреть в хистори. Надо сказать, N2N особенно полюбился любителям игр, для которых безопасность не является основным критерием при выборе VPN, и шифрование часто вообще не используют в угоду меньшему потреблению системных ресурсов.

Для организации туннеля в Linux, *BSD, Mac OS X, Windows (доступен GUI) и OpenWRT задействуются TUN/TAP-драйвера.
Установка в Debian/Ubuntu проста:

$ sudo apt-get install n2n

После чего в системе появятся два исполняемых файла – supernode и edge. Никаких конфигов N2N не использует. Запускаем supernode, указав в качестве параметра '-l' порт, на котором демон будет принимать подключения. На первых порах для получения более подробной информации лучше использовать ключ '-v'. Обрати внимание: права суперпользователя не требуются.

$ supernode -l 7654 -v

Для подключения к VPN-сети используется команда edge, параметров у нее больше. Основными являются:

  • - a – свой IP-адрес, который декларирует клиент для подключения к VPN-сети;
  • - с – название виртуальной подсети;
  • - k – ключ для подключения к VPN-подсети;
  • - l – данные supernode.

Например, зарегистрируем на supernode два узла node1 и node2. Вводим на каждом:

node1$ sudo edge -a 10.1.2.1 -c mynetwork -k encryptme -l 1.2.3.4:7654
node2$ sudo edge -a 10.1.2.2 -c mynetwork -k encryptme -l 1.2.3.4:7654

В консоли получаем сообщение «Registering with supernode», команда ifconfig покажет наличие интерфейса edge0 с указанными выше параметрами.
Как видишь, команды, введенные на разных узлах, отличаются лишь объявляемым IP. Также в командной строке можно указать:

  • - h – использовать HTTP-туннель (экспериментальная возможность);
  • - r – активировать форвардинг/роутинг пакетов (эта функция позволяет подключиться не только к Edge Node, но и к удаленной сети);
  • - f – запустить процесс в виде демона;
  • - d – указать TAP-устройство (полезно при одновременной работе с несколькими сетями).

Стоит отметить, имеется реализация P2P VPN, которая так и называется – P2PVPN (p2pvpn.org). Основная ее особенность – возможность работы без центрального сервера. Написана на Java и теоретически может быть запущена на любой платформе, для которой доступна Java RE. Официально поддерживаются 32-битные версии Linux и Windows. Для аутентификации используется RSA (1024 бит), трафик шифруется при помощи AES (128 бит).

 

Семейство netcat – socat

Любой юниксоид знает, что, если ему нужна утилита, позволяющая установить TCP/UDP-соединение с нужными параметрами, передавать/принимать данные, следует выбрать netcat. С ее помощью можно легко настроить прокси и подключаться к удаленному сервису. И хотя она уже давно не развивается (с января 2004 года), ответвления (форки) возникают с завидной регулярностью: OpenBSD netcat, Ncat, Cryptcat, socat.

Так, socat (www.dest-unreach.org/socat/) обеспечивает двустороннюю передачу данных между двумя различными каналами данных: сокет (UDP, TCP, UNIX, IP4, IP6, raw), псевдотерминал, файловый дескриптор, программа и другие, а также их комбинация. Пользователи обычно применяют socat в качестве TCP-прокси для соксификации приложений, как шелл к Unix-сокету, для обхода файера и так далее. С его помощью легко соединить два узла, а используя SSL – защитить соединение между двумя socat. Сейчас рассмотрим, как это можно сделать.

В репозитории Debian/Ubuntu программы нет, но установка стандартна. В файле EXAMPLES, который найдешь в архиве, доступны все варианты использования программы. Для примера поднимем TUN-сервер, который будет слушать порт 5555:

$ sudo socat -d -d TCP-LISTEN:5555,reuseaddr TUN:192.168.1.1/24,up

Подключаемся к нему с другого компьютера, указав в параметре TCP-адрес и порт удаленной системы:

$ socat TCP:1.2.3.4:5555 TUN:192.168.255.2/24,up

Команда «ifconfig tun0» покажет наличие рабочего интерфейса.
Использование SSL также не вызывает сложностей. Активируем сервер:

$ sudo socat openssl-listen:4444,reuseaddr,cert=/etc/vpn/server.pem,cafile=/etc/vpn/client.crt echo

Подключаемся клиентом:

$ sudo socat stdio openssl-connect:example.ru:4444,cert=/etc/vpn/client.pem,cafile=/etc/vpn/server.crt

Осталось добавить, что socat поддерживает Linux, *BSD, OpenSolaris, Mac OS X и Cygwin.

 

Заключение

Рассмотреть все предложения в рамках одной статьи невозможно. На просторах интернета можно найти еще как минимум десяток реализаций, которые помогают быстро и без лишних телодвижений поднять VPN. Надеюсь, среди представленных вариантов ты уже нашел наиболее подходящий.

 

Самый маленький VPN

anytun-0.3.3.tar.gz – 110 Кб
vtun-3.0.1.tar.gz – 122 Кб
cipe-1.6.0.tar.gz – 139 Кб
tinc-1.0.13.tar.gz – 497 Кб
n2n_svn_23072010.tgz – 535 Кб
socat-1.7.1.2.tar.gz – 542 Кб
openvpn-2.1.1.tar.gz – 860 Кб

 

Anycast

Популярность VoIP и подобных сервисов сегодня высока как никогда. Единственный минус для клиента, работающего через VPN – при недоступности одного сервера он вынужден подключаться к другому. Anycast-рассылка позволяет клиенту не беспокоиться о работоспособности конкретного сервиса, ведь пакет в любом случае дойдет до «кого-нибудь» из группы серверов. Чтобы работать через VPN с anycast, нужен специальный протокол, и такой протокол, описывающий принцип соединения unicast и anycast-сетей, разработан и получил название SATP (Secure Anycast Tunneling Protocol). Реализация SATP и лежит в основе проекта anytun (anytun.org). Поддерживается автоматическая маршрутизация при помощи Quagga, использование UDP позволяет anycast «дружить» с NAT. Пакет доступен в репозиториях основных дистрибутивов. К сожалению, справочная информация на сайте проекта только на немецком, поэтому при настройке альтернативы man просто нет.

 

CIPE

Принцип работы CIPE (Crypto IP Encapsulation, sites.inka.de/bigred/devel/cipe.html) очень прост. Шифрованные при помощи протокола CIPE (текущая версия CIPEv3) IP-пакеты инкапсулируются в UDP-датаграммы, результирующий пакет включает информацию о получателе. Обмен происходит через виртуальное устройство cipcbx. Данные шифруются динамическими 128-битными ключами (Blowfish, IDEA), при необходимости используется сжатие. Сам протокол CIPE открыт и документирован, обычно это положительно сказывается на безопасности конечного решения.

Еще один из немаловажных плюсов CIPE – его «дружба» с NAT и SOCKS, что часто используется при организации подключения из труднодоступных мест. Например, там, где провайдеры блокируют протоколы GRE или любые нестандартные порты.

Изначально CIPE разработан с учетом применения в Linux, но доступен порт сторонних разработчиков для WinNT4.0 SP3/SP6, Win2k (cipe-win32.sf.net).

Минус – проект практически прекратил свое развитие (последнее обновление было в 2002 году), очевидно, поэтому CIPE убрали из репозиториев многих дистрибутивов. Так, в Ubuntu пакеты cipe-common и cipe-source были доступны еще в версии 6.06 (Dapper Drake), в более новых релизах пользователям CIPE приходится собирать его самостоятельно.

 

WWW

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии