У нас появилась более свежая статья про VPN в Китае.
Итак, о чем эта статья? Статья про ситуации в нашей жизни, когда в силу ограничений на стороне вашего интернет провайдера (ISP) вы:
- не можете использовать какой либо сервис, например SIP/VOIP в силу его блокировки;
- не в состоянии посетить определенный вебсайт(ы), из-за их блокировки. Иногда такая блокировка происходит не на стороне вашего ISP а носит страновой характер. Ну, вы поняли :)
Не стоит думать что настроенный vpn канал делает вас неуязвимым для оружия невидимым для различных органов. Если ваша деятельность является противозаконной с точки зрения страны, где предоставляется сервис vpn (США в моем примере), то все ваши данные и логи будут предоставлены куда надо по запросу. Другое дело, что посещение некоей социальной сети противозаконным в США не является :)
По принципу «от простого к сложному», постараюсь описать:
- Немного базовой теории про VPN.
- Настроить SSL VPN на отдельно взятой Windows или Linux машине.
- Настроить 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«.