Настройка и использование VPN от HideMyAss через WiFi

Rate this post

Зачем и почему использовать 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 папка
Идея

Я хотел реализовать следующие опции:

  • Запуск скрипта для просмотра списка доступных стран
  • Проверка на наличие уже работающего openvpn
  • Корректная остановка работы openvpn
  • Автоматический ввод логина и пароля
  • Немного информации о соединении (IP, статус, страна)

Тексты сриптов

Скрипт первый

Первый скрипт логично было написать для старта:

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 сеть в списке сетей и подключаем устройство

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *