Зачем и почему использовать VPN нет смысла рассказавыть. Думаю многие сталкивались с такой проблемой, что многие сайты не работают, а точнее не дают доступ к своему контенту, если у вас к примеру не американский IP адрес. Из таких: Pandora, Google Music, iTunes, ABC, YellowPages и далее по списку. Обмануть ушлых админов можно с помощью анонимайзера, но это крайне не удобно, другое дело VPN, получашь IP адрес сервера расположенного в Лос-Анджелесе и погнал лазить где тебе нравится. Сама по себе настройка соединения VPN от HideMyAss очень проста, но у меня стояла задача организовать целую Wi-Fi инфраструктуру, т/е я хотел что-бы все устройства с Wi-Fi чипом на борту могли сидеть на сети, у которой тот IP который нравится мне. Понятно, что для организации такой сети вам понадобится WiFi роутер, Ubuntu Linux и аккаунт на HideMyAss. О том, как все это замутить и авторизировать в Ubuntu 12.04.1 LTS Server читайте ниже.
HideMyAss
Это довольно известный буржуйский сервис, где за небольшие деньги можно купить аккаунт и использовать их сервера в своих целях, полачая разные IP, на безопастность не расчитывайте, так как когда трафик проходит через чужие сервера, по чужим каналам и с помощью чужих сертификатами говорить о приватности нет смысла.
Как это работает?
После того как вы зарегистрировались на сайте HideMyAss.com и заплатили за использование сервиса, в вашем аккаунте есть выбор для какой ОС загрузить сертификаты и программу для использования VPN. Нас интересует Linux. Подробности тут.
Установка и настройка
Я купил простой WiFi роутер и настроил его работать в обычном режиме, роутер получает по DHCP адрес от сервера, делает NAT и раздает уже свои адреса через свой DHCP. Стандартная конфигурация, ничего особенного. На сервере, в моем случае это Ubuntu 12.04.1 LTS делаем папку /root/openvpn
- mkdir /root/openvpn
Распакуйте туда скаченный ахив, у вас должны появится файлы:
- client.cfg
- hma-start
- keys папка
Идея
Я хотел реализовать следующие опции:
Срипт первый
Первый скрипт логично было написать для старта:
- cd /root/openvpn
- touch startVpn.sh
- chmod +x startVpn.sh
Текст срипта:
- #!/bin/bash
- #
- # Internet interface
- INET_IFACE="tun0"
- # Go to VPN directory
- cd /root/openvpn
- # Check if another openvpn proccess is already running
- if [ -e .openvpnup ] ;
- then
- echo "OpenVPN is already running, connected to:";
- cat .openvpnup
- echo "You must close this connection before continuing. Example: ./stopVpn.sh";
- exit;
- fi
- # To get list of countries and to start hma-autostart.sh script
- if [[ $1 == '-l' ]]
- then
- curl -s "http://vpn.hidemyass.com/vpnconfig/countries.php";
- exit;
- fi
- COUNTRY=`echo $1 | sed 's/ /+/g'`
- if [ "$COUNTRY" = "" ]
- then
- echo "You must specify a country in the commandline, use -l option for a list of countries";
- exit;
- fi
- # Start hma-autostart script
- curl -s "http://vpn.hidemyass.com/vpnconfig/client_config.php?win=1&loc=$COUNTRY" > client.cfg
- ./hma-autostart.sh &
- until ifconfig|grep -q $INET_IFACE;do
- sleep 1
- #echo "We are waiting"
- done
- # Turn on forwarding and transperency mode
- iptables -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
- echo "1" > /proc/sys/net/ipv4/ip_forward
- # Echo
- echo ""
- echo "YOU ARE CONNECTED!"
- wget -nv -O - http://checkip.dyndns.org/ 2>&1 | cut -d">" -f7-|cut -d"<" -f-1
- echo ""
- echo $COUNTRY > .openvpnup
Скрипт второй
Второй скрипт необходим для остановки, тут приведено много разных способов как убить демон openvpn.
- cd /root/openvpn
- touch stopVpn.sh
- chmod +x stopVpn.sh
Текст срипта:
- #!/bin/bash
- #
- echo ""
- echo "Wait a second, script working..."
- # This will kill openvpn and delete .openvpnup file
- #kill -9 `ps -ef|grep openvpn|grep -v grep|cut -d" " -f7`
- #kill -9 $(ps opid= -C openvpn)
- #pidof openvpn
- killall -9 openvpn
- pkill openpvn
- cd /root/openvpn
- rm -rf .openvpnup
- echo ""
- echo "Done...Now you can start script ./startVpn.sh"
- echo ""
Скрипт третий
Третий скрипт поможет с автоматичесим вводом логина и пароля:
- cd /root/openvpn
- touch hma-autostart.sh
- chmod +x hma-autostart.sh
Текст срипта:
- #!/usr/bin/expect -f
- set timeout 2
- spawn openvpn client.cfg
- expect "Enter Auth Username:"
- send "MYLOGIN\r"
- expect "Enter Auth Password:"
- send "MYPASSWORD\r\r"
- expect "<"
- interact
1) Содержание скриптов я хорошо прокомментировал. Работает это просто, запускаем скрипт startVpn.sh он использует вспомогательный скрипт hma-autostart.sh, он же делает проверки и он же корректирует правила в iptables, он же показывает IP адрес того места куда вы подклчились и выдает статус подключения в конце, он же переводит режим работы в фоновый, т.е. вы можете продожлить использовать консоль.
2) Скрипт stopVpn.sh запускается в случае если вы хотите прервать текущее соеденение
3) Скрипт hma-autostart.sh вводит логин и пароль
Выглядит это так, проверяем список доступных локаций:
- root@ubuntuVpn:~/openvpn# ./startVpn.sh -l
- USA, California, Los Angeles (DC1 S1)
- USA, California, Los Angeles (DC1 S2)
- USA, California, Los Angeles (DC1 S3)
- USA, California, Los Angeles (LOC1 S4)
- USA, California, Los Angeles (LOC1 S5)
- USA, California, Los Angeles (LOC1 S6)
- USA, California, Los Angeles (LOC1 S7)
- USA, California, Los Angeles (LOC1 S8)
- USA, California, Orange County (DC1 S2)
- USA, California, San Diego (DC1 S2)
- ......
- Switzerland, Zurich
- Turkey, Ankara
- Turkey, Istanbul
- Ukraine, Odessa
Подключаемся к Лондону:
- root@ubuntuVpn:~/openvpn# ./startVpn.sh "UK, London (LOC1 S1)"
- ....
- YOU ARE CONNECTED!
- Current IP Address: 139.143.71.2
Останавливаем соединение:
- root@ubuntuVpn:~/openvpn# ./stopVpn.sh
- Wait a second, script working...
- Done...Now you can start script ./startVpn.sh
Связь с WiFi
Как уже было сказано, скрипт запускаетс на сервере, таким образом получается, что сервер подключен к Англии и имеет IP адрес Лондона, к серверу подключен WiFi роутер, а к роутеру поключаются уже все остальные устройства имеющие на борту WiFi, Samsung Galaxy SIII, Nexus 7 и MacBookPro в моем случае.
Все пакеты которые проходят через сервер, будут выходить через виртуальный интерфейс tun0 который имеет Лондонский IP, это можно увидеть в таблице маршрутизации:
- root@ubuntuVpn:~/openvpn# route -n
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- 0.0.0.0 109.123.79.4 128.0.0.0 UG 0 0 0 tun0
О правильном роутинге позаботился как вы уже поняли скрипт:
iptables -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
Далее просто находим WiFi сеть в списке сетей и подключаем устройство

То как все работает продемонстрированно на схеме

Оригинальная фотка высокого разрешения тут









Спасибо