Делаем себе бесплатный VPN на Amazon EC2

Делаем себе бесплатный VPN на Amazon EC2

Anton Yarkov (OptikLab)

Кто только не расписывал уже пошаговые инструкции по этой теме. Однако, время идёт, ПО меняется, инструкции нуждаются в обновлении, а люди в современной России всё больше нуждаются в применении VPN.

Я собираюсь описать все шаги для создания бесплатного сервера на Amazon EC2 с операционной системой Linux и необходимые команды для настройки VPN сервера на нём. Чтобы не повторяться о деталях, которые были много раз описаны на русскоязычных и англоязычных ресурсах, по ходу статьи я просто приведу целую кипу ссылок, где можно почерпнуть необходимую информацию, а где информация устарела - опишу подробнее что нужно сдеать. В итоге, сервер будет доступен для вас из любой точки планеты, с любой операционной системы, и бесплатно (с определёнными ограничениями по трафику).

Шаг первый - Регистрируемся на Amazon AWS

Нужно зайти на сайт https://aws.amazon.com/ru и сразу перейти к Регистрации, нажав одноимённую кнопку. При регистрации вам предстоит ввести базовую информацию о себе на английском языке (или латинице) и, помимо прочего, ввести данные о пластиковой карте. Карта нужна для съёма денег в случае, если вы превысили пороговые значения трафика, предоставляемого бесплатно. Сервис выполнит проверку её работоспособности сняв 1 доллар, который позже вернут вам обратно.

Так же не стоит пугаться того, что подтверждение регистрации производится голосом по телефону (вам на экран высветится PIN-код, который надо будет ввести во время звонка) или текстом по SMS. Я обычно пользуюсь первым способом.


После того, как регистрация пройдет, вам придётся подождать около 1 часа (может быть и до суток, но это редкость) до того, как консоль управления вашими серверами станет вам доступна.

 

 

Шаг второй - Выбор бесплатного сервера

Попав в консоль управления вашими серверами на платформе Amazon AWS вам нужно нажать кнопку Launch Instance, которая приведёт вас в пошаговый визард.


На первом шаге вы увидите список доступных ОС, под которыми будут надписи вроде "Free tier eligible", что означает, что для этих ОС доступны бесплатные конфигурации.


Выбирайте Ubuntu (нажав Select) и переходите к выбору инстанса. Понятно, что бесплатно доступные сервера являются не очень производительными, но для нужд VPN нам хватит. Выбираем тот, под которым написано "Free tier eligible".


3й, 4й и 5й шаги можно пропустить (воспользуётесь этой статьёй, если хотите в них разобраться детальнее), а на 6-м шаге предлагается настроить межсетевой экран безопасности. По умолчанию там открыт на доступ только TCP порт 22 для службы SSH, через которую вы и будете заходить на свой сервер для выполнения команд, установок, настройки. Нажав Add Rule в настройках межсетевого экрана нужно добавить правила разрешения выполнения входящих соединений на TCP и UDP порты 1194 для программы OpenVPN, через которую вы и сможете подключать себе VPN .

На этом этапе не обязательно расширять список портов, это можно сделать и позже, главное не забыть.

На последнем шаге Review выполняется перепроверка настроек и в итоге запуск сервера кнопкой Launch. Тут тоже придётся немного подождать.


Теперь для входа на сервер переходим в Консоль Управления EC2 на сайте Amazon и там жмём кнопку Connect. В диалоге будет описано что необходимо для соединения. Вам просто нужно скачать файл пароля *.pem, а также скопировать имя сервера. Далее, переходим в папку, где лежит файл пароля и коннектимся на наш Amazon-сервер с помощью SSH командой из консоли:


$> ssh -Xi MyPasswordFile.pem ubuntu@ec2-52-19-149-87.eu-central-1.compute.amazonaws.com

...где MyPasswordFile.pem - имя файла пароля, а вместо моего адреса ubuntu@ec2-52-19-149-87.eu-central-1.compute.amazonaws.com вам нужно ввести свой.

 

 

Шаг третий - Настройка VPN на сервере

Тут я сделаю небольшое "лирическое" отступление. Доступ к вашему VPN может контролироваться двумя способами - логином и паролем, либо сертификатом безопасности. Второй способ является "стандартом индустрии" по причине его большей безопасности, хотя и придётся приложить немного усилий для получения результата, потому что сертификаты нужно сгенерировать, настроить, и т.д. Я буду рассказывать именно об этом способе, так как получение любого опыта является стоящим делом, а для вас я приложу все необхоимые инструкции.

Попав на сервер, первое что нам необходимо, это установить необходимое ПО для VPN и для генерации сертификатов безопасности - мы будем использовать OpenVPN и easy-rsa. Итак, инсталлируем указанные пакеты:


$> sudo su

$> apt-get install openvpn

$> apt-get install easy-rsa

Всё было бы просто, если бы не мир Linux :D. Раньше утилита easy-rsa входила в OpenVPN, но начиная с версии 2.3 эту утилиту из пакета "выпилили", поэтому придется скачать и собрать её самостоятельно следующими командами:


$> cd /tmp

$> wget https://github.com/OpenVPN/easy-rsa/archive/master.zip

$> apt-get install unzip

$> unzip master.zip

$> cd easy-rsa-master

$> ./build/build-dist.sh

$> tar xvzf ./EasyRSA-git-development.tgz

$> cd EasyRSA-git-development

Далее, переходим в папку с готовыми исполняемыми файлами easy-rsa и создадим сертификат удостоверяющего центра CA и ключ. Нас попросят ввести даные о сертификате. Тут выбирать вам, можете ввести любые фиктивные данные, а можете реальные.


$> сd /usr/share/easy-rsa

$> source ./vars

$> ./build-ca

$> ./build-key-server server

Опять таки, о том, что такое удостоверяющий центр, корневой сертификат, процесс генерации сертификата и о прочем интересующийся читатель может узнать по ссылкам.

Сгенерируем ключи для шифрования SSL/TSL соединения и создадим ключи для себя:


$> ./build-dh

$> ./build-key myname

Теперь генерируем все необходимые ключи и сертификаты для VPN. Приготовьтесь вводить для них пароли. Так как мы настраиваем персональный VPN сервер, то, видимо, можно использовать один-единственный пароль, но подлиннее:


$> ./easyrsa init-pki

$> ./easyrsa build-ca

$> ./easyrsa build-server-full server

$> ./easyrsa build-client-full client1

$> ./easyrsa gen-dh

Переносим полученные ключи и сертификаты в каталог программы OpenVPN (/etc/openvpn/), откуда она легко сможет их использовать:


$> mv ./pki/dh.pem /etc/openvpn/dh.pem

$> mv ./pki/private/client1.key /etc/openvpn/

$> mv ./pki/private/server.key /etc/openvpn/

$> mv ./pki/ca.crt /etc/openvpn/

$> mv ./pki/issued/client1.crt /etc/openvpn/

$> mv ./pki/issued/server.crt /etc/openvpn/

В папке …/keys теперь есть все необходимые ключи, для авторизации нам нужны только myname.crtmyname.key (свои сертификат с ключом) и ca.crt (сертификат удостоверяющего центра CA). Создадим и отредактируем вашим любимым текстовым редактором конфиг /etc/openvpn/tun.conf:

 server  
port 1194
proto tcp
dev tun
ca      /usr/share/easy-rsa/keys/ca.crt
cert    /usr/share/easy-rsa/keys/server.crt
key     /usr/share/easy-rsa/keys/server.key
dh      /usr/share/easy-rsa/keys/dh2048.pem
server 192.168.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 8.8.8.8"
push "redirect-gateway def1 bypass-dhcp"
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 4

 

 

Шаг четвёртый - проверочный запуск

Попробуем запустить OpenVPN. При запуске от вас будет требоваться ввести пароль.


$> service openvpn start

Проверяем:

$> netstat -tuwpan

Сервер должен слушать порт 1194. Если это не так, курим /var/log/syslog.

Если всё успешно, то мы сможем подключиться к серверу, используя скачанные выше сертификаты и ключи. А если нет, то в логах скорее всего будет что-то вроде:

Note: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory

Это означает, что нам не включили tun модуль (обратитесь в техподдержку). А если всё хорошо, мы сможем пинговать VPS по Public IP, указанному в Консоли Управления EC2, но интернета ещё не будет, для этого нам нужно настроить NAT.

 

 

Шаг пятый - настройка NAT

Для начала очистим таблицы от лишних правил, вдруг там что было лишнего…


$> iptables -F

$> iptables -t nat -F

$> iptables -t mangle -F

Тут указываются настройки ваших сетевых интерфейсов:


$> nano /etc/network/interfaces

Перезапускаем сетевые сервисы:


$> service network restart

Разрешаем IP-форвардинг в системе:


$> echo '1' > /proc/sys/net/ipv4/ip_forward

$> echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf

Перезагружаем конфиг:


$> sudo sysctl -p

NAT настраивается при помощи iptables. Сначала отредактируем его настройки в файле /etc/sysconfig/iptables-config, включив параметры IPTABLES_SAVE_ON_STOP="yes" и IPTABLES_SAVE_ON_RESTART="yes", чтобы не приходилось менять настройки при каждой перезагрузке:


$> nano /etc/sysconfig/iptables-config

Смотрим список сетевых интерфейсов в системе:


$> ifconfig

В списке должен быть стандартный Ethernet интерфейс eth0, Loopback интерфейс lo, а так же tun0.

Разрешаем IP-форвардинг в системе для eth0:


$> sudo touch /etc/sysconfig/iptables

$> sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Чтобы наше правило не пропало после перезагрузки, нужно добавить его сразу в конфиг /etc/rc.local после строки "exit 0":


iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Если вы выбрали другую подсеть, то укажите её вместо 192.168.1.0/24. Теперь можно сохранить настройки iptables:


$> iptables-save > /etc/iptables.rules

В /etc/rc.local:


$> iptables-restore < /etc/iptables.rules

Поставить на автозагрузку openvpn и перезагрузить openvpn сервер:


$> update-rc.d openvpn defaults

$> service openvpn restart

Проверяем, что в файле /etc/network/interfaces есть строчка:


$> pre-up iptables-restore < /etc/iptables.rules

Убеждаемся, что все нужные сервисы запустятся после перезагрузки, если такая потребуется:


$> chkconfig named on

$> chkconfig iptables on

$> chkconfig openvpn on

Перезапускаем/запускаем сервисы:


$> service iptables restart

$> service named start

$> service openvpn start

Всё. Сервер готов. Теперь не забудьте скачать файлы сертификатов и ключа, о которых я упоминал выше. Это можно сделать даже вручную, просто через команду cat вывести их текст на экран, и скопировав текст у себя создать такие же файлы. После всех операций с сервера можно выйти:


$> exit

На своей клиентской машине, не важно с какой ОС, необходимо создать текстовый файл для конфигурирования клиента OpenVpn, вида:

      client  
dev tun
proto tcp
remote ec2-52-19-149-87.eu-central-1.compute.amazonaws.com 1194
resolv-retry infinite
nobind
comp-lzo
persist-key
persist-tun
ca "X:\\SecretStorage\\ca.crt"
cert "X:\\SecretStorage\\myname.crt"
key "X:\\SecretStorage\\myname.key"
verb 3

В этом конфиге вам нужно только аккуратно прописать свои пути к файлам сертификатов и ключа, а также заменить адрес сервера на свой.

 

 

Подключаемся к VPN серверу с Windows

На свой компьютер скачиваем и устанавливаем OpenVPN клиент.

В папке C:/Program Files/OpenVpn/ создаём файл client.ovpn и любым редактором вставляем текст конфигурации клиента, созданный по примеру выше.

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

После успешного соединения идём в браузер и проверяем, что недоступное вновь нам доступно :).

 

 

Подключаемся к VPN серверу с MacOS

Скачиваем и устанавливаем Home brew. После чего устанавливаем openvpn:


$> brew install openvpn

Переходим в папку с openvpn (версия может поменяться на момент чтения):


$> cd /usr/local/Cellar/openvpn/2.3.11/sbin

В папке создаём файл client.conf и вставляем текст конфигурации клиента, созданный по примеру выше. В итоге, выполняем подключение:


$> sudo ./openvpn --config client.conf

Теперь идём в браузер и проверяем, что недоступное вновь нам доступно :).

 

 

Полезные ссылки:


Создание «островка сетевой свободы» на основе VPS за 30 минут

Установки и настройка OpenVPN в Ubuntu Linux за 5 минут

Основы iptables на примере Debian глазами младенца

Практика: настраиваем VPN, работающий через Amazon EC2

Бесплатный VPN от Amazon


Report Page