Настройка VPN — от простого к сложному

Итак, о чем эта статья? Статья про ситуации в нашей жизни, когда в силу ограничений на стороне вашего интернет провайдера (ISP) вы:

  • не можете использовать какой либо сервис, например SIP/VOIP в силу его блокировки;
  • не в состоянии посетить определенный вебсайт(ы), из-за их блокировки. Иногда такая блокировка происходит не на стороне вашего ISP а носит страновой характер. Ну, вы поняли :)

Не стоит думать что настроенный vpn канал делает вас неуязвимым для оружия невидимым для различных органов. Если ваша деятельность является противозаконной с точки зрения страны, где предоставляется сервис vpn (США в моем примере), то все ваши данные и логи будут предоставлены куда надо по запросу. Другое дело, что посещение некоей социальной сети противозаконным в США не является :)

По принципу «от простого к сложному», постараюсь описать:

  1. Немного базовой теории про VPN.
  2. Настроить SSL VPN на отдельно взятой Windows или Linux машине.
  3. Настроить SSL VPN на Linux-роутере и подключаться в защищенный канал множеством клиентов. Подразумевает базовое знание Linux

Я не специалист по файрволам, больше копаюсь внутри протоколов. Писал не сверяясь с rfc — легко мог что-нибудь прощелкать. Поэтому, буду благодарен за любые поправки и замечания, а также альтернативные способы.

Не стану рассматривать P2P-способы (вроде Tor/Vidalia) в силу множества причин.

Итак:

1. Немного базовой теории про VPN

По сути, это возможность соединения с требуемой вам сетью, не являясь подключенным к ней физически, а используя другие сети. Для безопасности, данные по пути шифруются, а подключаемый клиент виртуально оказывается внутри требуемой сети. Как то так :)

Существуют разные протоколы для подключения через VPN, из тех, что встроенны в Windows упомяну PPTP и L2TP/IPSEC. Их общий недостаток в том, что, если захотеть, их легко заблокировать по ОБЩЕМУ шаблону, не охотясь за каждым пользователем отдельно.

Рекомендую использовать SSL VPN, который наименее требователен к ISP, так как использует только один порт (например 443) и с точки зрения ISP, сетевая активность выглядит как обычный https-трафик. В моем примере это hotspotvpn — www.hotspotvpn.com

Хочу сказать, что этот сервис стоит ДЕНЕГ. Речь идет о USD10-12 в месяц.

2. Как настроить SSL VPN на отдельно взятой Windows или Linux машине

Заходим на www.hotspotvpn и покупаем SSL VPN — его называют VPN-2. Тип шифрования не важен — Blowfish 128, AES-192 или AES-256. Платить можно через PayPal или VISA/Master. При этом PPTP VPN (VPN-1) получаем бесплатно.

Получаем несколько писем, из них нам нужны два:
— логин/пароль на VPN-1. Откладвываем на всякий случай. Можно настроить его на телефоне (вроде iPhone или Nokia e-series)
— временная ссылка на ваши персональные данные для SSL VPN (VPN-2). Два файла: инсталляционный пакет OpenVPN для Windows в сборе с вашими ключами (.exe) и набор скриптов и ключей для Linux/OS X (.zip).
Формат и размеры файлов:
<your_email>_<order_number>.exe — около 1,9 Мб
<your_email>_<order_number>.zip — около 65 Кб

Запускаем <your_email>_<order_number>.exe и устанавливаем OpenVPN, ребутимся и запускаем из меню вот этот скрипт — «Add a new TAP-Win32 virtual ethernet adapter». Только один раз. Далее все предельно просто:
— убеждаемся, что мы подключенны к сети;
— убеждаемся, что запущен OpenVPN GUI — есть значок в трее. Если нет — запускаем.
— правый клик на OpenVPN GUI — Connect. Пройдет инициализация, адаптер vpn получит IP адрес и все — вы в vpn сети.

3. Как настроить SSL VPN на Linux-роутере и подключаться в защищенный канал множеством клиентов

Итак, наша задача поднять vpn туннель на роутере, к которому можно будет подключить множество клиентов через wifi или ethernet. Я имею ввиду не модем, который предоставил вам ISP (его трогать не надо), а ваш личный роутер, коий очень полезно иметь. Крайне рекомендую продукцию Linksys, например что-нибудь на базе WRT54G. Однако статья про сплошные затраты…

Познавательнее всего использовать для нашей цели прошивку на базе linux: openwrt (www.openwrt.org) Ознакомьтесь со списком поддерживаемого железа — http://oldwiki.openwrt.org/TableOfHardware.html — и решайте, надо оно вам или нет. Еще рекомендовали dd-wrt как альтернативу.

Итак, у нас есть подключенный к интернету роутер с linux прошивкой (версия ядра не критична — 2.4 или 2.6). Ставим на него openvpn (если не установлен):
opkg install openvpn

Заходим на роутер через ssh, как root (в моем примере) либо как другой пользователь — тогда используйте sudo для запуска.

Создаем директорию для скриптов и ключей:
# mkdir /root/hotspotvpn2

Затем распаковываем содержимое <your_email>_<order_number>.zip в директорию /root/hotspotvpn2

unzip скорее всего не установлен по умолчанию, поставьте его через opkg install. Альернативно можно использовать WinSCP и распаковать из под Windows, но тогда обязательно убедитесь что в ascii-файлах не появились ^M в конце каждой строки. Установите правильного владельца (chown) и права (chmod) на содержимое директории.

Далее переходим в директорию /root/hotspotvpn2 и редактируем файл hotspotvpn2.ovpn

port 443
proto tcp
verb 3
# SSL servers hostnames are commented
; remote kamai.dcsanswires.com
; remote kamaimd.dcsanswires.com
; remote kamaica.dcsanswires.com
# and real IPs are used.
remote 64.27.12.217
remote 208.53.153.7
remote 67.159.22.187
client
cert ****************.crt
key ************************.key
ca ca.crt
tls-auth ta.key 1
ns-cert-type server
cipher aes-192-cbc
comp-lzo
mute 20
dev tun0
resolv-retry infinite
persist-key
persist-tun
mute-replay-warnings
redirect-gateway def1

Смысл в использовании IP адресов вместо hostnames, так как файрволы неких стран могут использовать DNS poisoning или посылать corrupted DNS responce для «неправильных» сайтов. hotspotvpn к таковым не относится, но мало ли…

Далее самая навороченная часть, а именно настройка iptables для vpn. В моем примере ppp0 это файл-устройство wan-соединения, а tun0 — файл-устройство vpn-туннеля.

Комманды можно вводить прямо с коммандной строки, но чтобы они выполнялись при запуске, их надо занести в /etc/firewall.user Приведу свои комментарии для комманд (english). Также буду рад любой критике — я iptables знаю плохо.

# to enable nat for the tunnel
iptables -t nat -A PREROUTING -i tun0 -j ACCEPT
iptables -t nat -A zone_wan_nat -o tun+ -j MASQUERADE
iptables -A zone_wan_ACCEPT -o tun+ -j ACCEPT
# needed to make router accessible from internet via ssh. Optional.
iptables -I INPUT 3 -p tcp --dport 22 -i ppp0 -j ACCEPT
# to enable all traffic for tunnel. Added in panic mode :) Further tuning needed.
iptables -A INPUT   -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A OUTPUT  -o tun+ -j ACCEPT
iptables -A FORWARD -o tun+ -j ACCEPT

Далее, устанавливаем туннель:
cd /root/hotspotvpn2
openvpn hotspotvpn2.ovpn

Произойдет примерно то же самой что описано во 2-й части.

Осталость рассказать про настройку клиентов. В зависимости от OS могут быть разные проблемы, связанные с тем что в силу различных алгоритмов binding order разные системы по разному интерпретируют DHCP информацию, если она пришла из vpn-туннеля (в случае OpenVPN-сервера это настройка push «DHCP DNS…»). OS X и Linux проблем не имеют, тогда как Windows или Symbian могут не работать. Поэтому самым простым решением будет установка DNS-настроек на клиентах вручную. Я пользую Google DNS:
4.4.4.4
8.8.8.8

Это все.

См. English version «How to configure VPN. Multiple clients over VPN«.

Orphus: Нашли опечатку? Нажмите Ctrl+Enter

Автор: hired_geek

По месту рождения я сибиряк, однако большую часть своей жизни прожил в Питере. Много езжу по миру по работе (телеком). В 2009 году перевелся в г. Чэнду, где вознамерился прожить 2 года.

Занимаюсь проектами и принимаю участие в разработке архитектуры software-продуктов. Специализируюсь на виртуализации и облачных вычислениях.

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

Китай мне нравится, но без экзальтации. По-китайски я могу заказать разнообразную еду, поторговаться и выразить простейшую мысль либо инстинкт. Признаться, после 5 месяцев учить язык я перестал, утратив к нему интерес и уважение.

С помощью Магазеты хочу попытаться впрячь трепетную лань моих гуманитарных навыков вместе с конем технических - а вдруг...

Wei
2010-02-13 17:04:10
Спасибо Кирилл! Проблему доступа с компа для себя давно решил. Но никак не могу добиться желаемого на iPhone. Есть ли готовое, лучше платное решение, которое заставит этот "кусок радости" показывать youtube, twitter и др. без оглядки на "страновой характер"?
Sergey
2010-02-13 19:55:48
www.hotspotvpn.com - Ошибка, ссылка не работает.
hired_geek
2010-02-13 20:37:54
Привет, Про готовое решение не знаю - iPhone у меня пока нет. Тем не менее уверен, что должен быть нормальный vpn-клиент.
hired_geek
2010-02-13 20:40:11
у меня работает. Неужто уже?
hired_geek
2010-02-13 23:28:28
Узнаю - напишу Вам
ostropoler
2010-02-14 00:17:36
проверил, у меня тоже не заходит.
hooey
2010-02-14 01:16:09
Нда, вот так и делись своими решениями. Действительно уже не заходит. Я пока пользуюсь специальной версией браузера с SSH до американского сервера. Стоит в два раза дешевле ($5 в месяц), можно использовать на трех компах. Адрес ввв.локфокс.ком.
hired_geek
2010-02-23 16:34:46
Привет, Я купил себе iPhone 3GS (firmware 3.1.3) и проверил на нем работу PPTP VPN (hotspotvpn). Заработало сразу, без каких-либо выкрутасов. Youtube летает.