Магазета

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

У нас появилась более свежая статья про 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".

English version

Here is FULL instrustion on how to setup VPN on the router and use multiple clients (laptops, phones) to access internet. For one laptop, you don't need chapter 2 and Linux part, just use Windows package.
  1. VPN setup.

I used HotSpotVPN account - www.hotspotvpn.com. They provide two types of vpn – PPTP- (they call it VPN-1) and SSL-based (VPN2). PPTP (VPN-1) doesn’t work from China, as it is usually blocked at ISP, therefore, SSL (VPN-2) is the only choice. They propose 3 types of encryption - Blowfish 128, AES-192 and AES-256. I took AES-192 for 11.88 USD per month. And VPN-1 is free, if you buy VPN-2.

(You can use whatever VPN service, it just should work at your ISP)

You should get several mails to your mailbox, two of them are important:

  • VPN-1 credentials: login (your email), password and encryption server (es.hotspotvpn.com). You can setup it on your Windows laptop or iPhone and try it as well, or use in some country. Other than China :)
  • VPN-2 credentials: this is actually a link, which works 48 hours only. There are two packages - for Windows and for Linux/Mac. Windows package is OpenVPN setup file, with your keys and certificates build-in. Linux package is an 70kB archive with 16 files.

Windows package is useful as a backup solution on some Windows laptop. Install it, run “Add a new TAP-Win32 virtual ethernet adapter” script once, then use it. Ensure that you don’t use it in parallel with Linux

  • HotSpotVPN doesn’t allow multiple connections for same credentials.

Linux package is needed for router/gateway PC setup and info below is related to Linux OS:

  1. Router/gateway PC setup.

HW/SW: My router is Linksys WRT54GL v1.1, firmware is Openwrt 8.09, taken from here: http://openwrt.org/ Also, you can check DD-WRT firmware as an option. Then, on top of openwrt, I installed openvpn2.0.9 (opkg install openvpn). That’s all. Firewall is iptables, which is installed by default. I didn’t use any GUI, because I don’t have enough space.

AAA WAN leg. from here: https://sales.hotspotvpn.com/helpdesk/issue_view.asp?ID=4694&amp;CATE=3


Start an Xterm and create your HotSpotVPN2 directory by typing

“mkdir ~/hotspotvpn2” without the quote marks. It will look like this:

$ mkdir ~/hotspotvpn2

Download your certificates and keys from the download link you get

in the welcome email.

Unzip the contents of the above file to ~/hotspotvpn2.

In the terminal window change to the ~/hotspotvpn2 directory by

typing “cd ~/hotspotvpn2” without the quotes.

In the terminal window type the following to start the vpn: “sudo

/usr/local/sbin/openvpn ~/hotspotvpn2/hotspotvpn2.ovpn” without the quotes. You will have to enter your admin password. You can put this in a small script file and attach an Icon to it if you wish. An example of a working script “startvpn.sh” is included. You will have to chmod it to make it executable.

When you see the line Initialization Sequence Complete, you are

connected to the vpn.

To end your VPN session press Ctrl-C.


In short, just extract the contents of Linux package to /home/hostspotvpn2 directory, make the files executable and run “openvpn ~/hotspotvpn2/hotspotvpn2.ovpn” command. Please note that hotspotvpn2.ovpn file is your actual openvpn config file (not openvpn.conf). Required changes are below, in the LAN leg part.

Most important part is iptables firewall config, here is my /etc/firewall.user config with comments:

enable nat for the tunnel

iptables -t nat -A PREROUTING -i tun0 -j ACCEPT

added to make router accessible from internet. Not mandatory.

iptables -I INPUT 3 -p tcp –dport 22 -i ppp0 -j ACCEPT

All possible traffic for tunnel.

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 iptables -A FORWARD -i tap+ -j ACCEPT iptables -A INPUT -i tap+ -j ACCEPT

#added for openvpn iptables -t nat -A zone_wan_nat -o tun+ -j MASQUERADE iptables -A zone_wan_ACCEPT -o tun+ -j ACCEPT

BBB LAN leg.

This is tricky part. Thing is that different clients (Win, OS X, Linux, Symbian) have some problems to process DHCP information, when it was pushed from VPN tunnel. There are a lot of articles about this in internet. So, the 100% straightforward solution is to put Google DNS IP addresses to your clients:

8.8.8.8 4.4.4.4

To avoid DNS caching on your ISP, its better to use real IP addresses in your openvpn config. You can see them if you do a nslookup for kamai.dcsanswires.com (SSL server). Then I would recommend to ping each address and don’t use those which have big latency (> 300 ms). In my case, I used 64.27.12.217 208.53.153.7 67.159.22.187

Here is my hotspotvpn2.ovpn contents (with my comments):

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 ;remote 64.27.9.195 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

That’s all.

Опубликовано
Последнее обновление
КатегорииИнтернет