Amazon Web Service предоставляет возможность бесплатного запуска в течение тестового периода (12 месяцев) серверов Amazon EC2. Такой сервер может быть использован для VPN (англ. Virtual Private Network — виртуальная частная сеть). При использовании этой технологии удаленный сервер служит посредником между вашим компьютером и другими серверами в Интернет.


Это может быть полезно в случаях когда необходимо зайти на сайт в обход блокировок (для вашего провайдера вы связываетесь с вашим VPN сервером, а не с сайтом с которого вы фактически получаете данные), или, скажем, иметь постоянный IP с которого осуществляется доступ к определенным сервисам, или иметь IP связанный не с тем регионом в котором вы физически находитесь (сайт определяет заход с IP вашего сервера, а не с IP вашей рабочей машины).


Создание сервера на AWS EC2


Итак, для начала регистрируемся на https://aws.amazon.com, для регистрации потребуется работающая кредитная карта.


После регистрации переходим в консоль https://console.aws.amazon.com/console/home


В правом верхнем углу нажимаем на меню "Services" и в разделе "Compute" выбираем "EC2".


image


Для доступа к будущему серверу нам потребуется создать ключ. Нажимаем "Key Pairs", далее кнопку "Create Key Paire", задаем имя для ключа, например "myVPNkey" и сохраняем этот файл (c расширением .pem) на свой компьютер, обычно в папку ~/.ssh


Теперь переходим в папку в которой мы сохранили ключ и задаем права на доступ к файлу:


cd ~/.ssh 
chmod 400 myVPNkey.pem

Также нужно будет сделать копию этого файла и сохранить в надежном месте.


Далее на сайте AWS возвращаемся в EC2 Dashboard (см. меню в в левом верхнем углу), и там нажимаем на большую синюю кнопку "Launch Instance"


  1. Выбираем операционную систему для сервера: Ubuntu Server 14.04 LTS (HVM) 64-bit (именно 14.04, не 16.04)


  2. Выбираем конфигурацию сервера. Для наших целей вполне достаточно конфигурации бесплатной на пробный период:
    t2.micro (Variable ECUs, 1 vCPUs, 2.5 GHz, Intel Xeon Family, 1 GiB memory, EBS only) — будет отмечен зеленым ярлыком "Free tier eligible". Нажимаем синюю кнопку "Review and launch"


  3. (Step 7: Review Instance Launch) в разделе Security Groups нажимаем "Edit security groups"


  4. (Configure Security Group )Выбираем: Assign a security group: * Create a new security group

Выбираем имя в Security group name, например "myVPN". Далее мы видим правила определяющие доступ к серверу. По умолчанию есть одно правило:


Type: SSH
Protocol: TCP
Port Range: 22
Source: Custom 0.0.0.0/0

В данном случае имеется в виду разрешено подключение к серверу с любого IP к порту 22 по протоколу SSH. Это стандартные настройки используемые для подключения ssh.


Нажимаем кнопку "Add Rule", и добавляем новое правило:


Type: All traffic
Protocol: All
Port Range: 0-65535
Source: My IP

в Source указываем IP вашей рабочей машины, если выбрать "My IP", он определится автоматически.


Указание IP означает что в рамках этого правила доступ разрешен только с этого IP (его потом можно будет, естественно, менять, если вы будете заходить в Интернет под другим IP).


Свой IP можно узнать/проверить задав в поиске Google "my ip". Или помощью специализированных сайтов. В консоли:


wget -qO- http://ipecho.net/plain ; echo

или


curl ipecho.net/plain ; echo

Первое правило можно удалить (рекомендуется). Или прописать в нем также свой IP. Или оставить возможность подключения с любого IP и проигнорировать предупреждение "Rules with source of 0.0.0.0/0 allow all IP addresses to access your instance. We recommend setting security group rules to allow access from known IP addresses only".


Снова жмем "Review and Launch", просматриваем информацию, и жмем "Launch" — у нас появиться окно в котором нужно выбрать ключ для доступа к серверу.


Выбираем ключ который мы ранее создали (existing key par), отмечаем пункт "I acknowledge that I have access to the selected private key file (myVPNkey.pem), and that without this file, I won't be able to log into my instance" и нажимаем "Launch Instances".


Если все хорошо, получаем сообщение что сервер запущен. Нажимаем кнопку "View Instances" и переходим в консоль в которой увидим список наших серверов. Когда мы отмечаем сервер в списке мы можем просмотреть его информацию, в частности его IP, а также выполнить действия с сервером (остановить, запустить, удалить и т.п.) Нажатие кнопки "Connect" выведет информацию необходимую для подключения к серверу.


Настройка сервера


Теперь из консоли мы можем подключиться с серверу используя ssh. Имя пользователя по умолчанию: ubuntu, для подключения мы можем использовать либо IP сервера либо его доменное имя вида: ec2-35-163-203-49.us-west-2.compute.amazonaws.com


Вводим в консоли команду:


ssh -i "~/.ssh/myVPNkey.pem" ubuntu@ec2-35-163-203-49.us-west-2.compute.amazonaws.com

при первом подключении нам нужно будет на вопрос: Are you sure you want to continue connecting (yes/no)? — набрать ответ "yes" (по умолчанию ответ "no", и если просто нажать Enter, получим сообщение "Host key verification failed."


При подключении также может выдаваться ошибка:


"Permissions 0644 for '~/.ssh/myVPNkey.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored."
��том случае нужно как было указано выше изменить права доступа к файлу
chmod 400 ~/.ssh/myVPNkey.pem


Если подключение происходит благополучно, мы переходим в консоль сервера, о чем свидетельствует переключение командной строки на что-то вроде ubuntu@ip-172-31-21-156:~$

Установка OpenVPN на сервере


Теперь в консоли сервера, сначала (обязательно) обновляем программное обеспечение:


sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get -y autoremove && sudo apt-get install -f

Потом устанавливаем OpenVPN


sudo apt-get install -y openvpn

Настраиваем переадресацию (IP forwarding) (при выключении/перезапуске сервера это повторяем):


sudo modprobe iptable_nat
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A POSTROUTING -s 10.4.0.1/2 -o eth0 -j MASQUERADE

Переходим в папку openvpn и создаем секретный ключ:


cd /etc/openvpn
sudo openvpn --genkey --secret ovpn.key

Создаем файл конфигурации OpenVPN, назовем его openvpn.conf, для этого воспользуемся редактором nano работающим в консоли:


sudo nano openvpn.conf

В файл вставляем:


port 1194
proto tcp-server
dev tun1
ifconfig 10.4.0.1 10.4.0.2
status server-tcp.log
verb 3
secret ovpn.key

Нажимаем CTRL+O и подтверждаем запись в файл, выходим из редактора — CTRL-X.


Запускаем OpenVPN на сервере командой


sudo service openvpn start

Останавливаем соответственно командой:


sudo service openvpn stop

Проверяем запущен ли у нас openvpn


sudo service openvpn status

image


Установка и настройка OpenVPN на локальной машине


Открываем еще одно окно консоли (терминала) на локальной машине. Устанавливаем OpenVPN на локальном компьютере:


sudo apt-get install -y openvpn

В консоли сервера временно меняем права доступа на файл ключа:


sudo chmod 777 /etc/openvpn/ovpn.key

В консоли локальной машины создадим папку для настроек OpenVPN:


mkdir ~/OpenVPNconf && cd  ~/OpenVPNconf

И скачаем туда с сервера ключ OpenVPN:


scp -i "~/.ssh/myVPNkey.pem" ubuntu@ec2-35-163-203-49.us-west-2.compute.amazonaws.com:/etc/openvpn/ovpn.key  ~/OpenVPNconf/

На сервере вернем настройки доступа для файла ключа:


sudo chmod 600 /etc/openvpn/ovpn.key

Также и на локальной:


chmod 600 ~/OpenVPNconf/ovpn.key

На локальной машине создадим файл с настройками OpenVPN, назовем его openvpn.client.conf:


gedit openvpn.client.ovpn 

В файл вставим:


proto tcp-client
remote тут.IP.адрес.сервера.на.Амазон
port 1194                   
dev tun                   
secret "/home/ИмяПользователя/OpenVPNconf/ovpn.key"            
redirect-gateway def1       
ifconfig 10.4.0.2 10.4.0.1

Обратите внимание в настройке в настройке "secret" должен быть полный адрес файла ключа ("ИмяПользователя" должно конечно быть таким как в вашей системе), remote указываем адрес сервера на Amazon вида 35.163.203.49 или ec2-35-163-203-49.us-west-2.compute.amazonaws.com
Сохраняем файл openvpn.client.ovpn


Теперь просто запускаем OpenVPN в консоли командой:


sudo openvpn --config ~/OpenVPNconf/openvpn.client.ovpn 

image
и заходим на http://ipecho.net/plain — теперь он должен показать IP адрес нашего сервера на Amazon. Можно также попробовать зайти на сайт который недоступен в вашем регионе.


UPD: Как правильно указали в комментариях, к этому стоит добавить AWS Elastic IP. Elastic IP — это IP адрес который резервируется пользователем, и может быть связан с серверами запускаемыми на AWS. На один сервер можно бесплатно добавить один Elastic IP, за зарезервированные Elastic IP не привязанные к определенному сервису взымается плата. Elastic IP можно быстро и удобно связывать и отсоединять от используемых сервисов на AWS.


В консоли пользователя AWS EC2 в меню слева выбрать в группе NETWORK & SECURITY опцию Elastic IPs, в открывшемся окне можно создавать новые Elastic IP (кнопка "Allocate New Address")


Далее: в списке имеющихся Elastic IP выбрать адрес и с помощью меню "Actions" (серая кнопка) его можно привязать к серверу запущенному на AWS, или отсоединить от работающего сервиса.


Happy networking!