OpenVPN своими руками

Хочу поделиться инструкцией по созданию собственного VPN на любом удалённом Linux сервере. Мой сервер работает на хостинг провайдере Digital Ocean, так как у них хорошие цены, быстрые каналы и много включённого в трафика. Тариф выбирайте любой, но достаточно минимального. Для России, наверное, наиболее предпочтительным регионом является Frankfurt. У меня до серверов из этого датацентра самые низкое время отклика.

Системные требования

На стороне клиента вам потребуется установленный ansible, так как в моём решении используется именно этот инструмент для конфигурирования сервера. В macOS он устанавливается довольно просто:

$ brew install ansible

На стороне сервера нужен Ubuntu Linux с работающим доступом по SSH. При создании инстанса в Digital Ocean можно сразу добавить ключ и входить без пароля. Если не установлен Docker, то у меня есть плейбук, который автоматически сделает это.

Файлы с инструкциями необходимо клонировать из моего публичного репозитория на гитхабе: OpenVPN

Все нижеприведённые инструкции следует выполнять строго из его корневой папки.

Конфигурация

В файл inventory.ini впишите имя хоста или ip адрес сервера. В моём случае это выделенный под конкретную задачу инстанс, поэтому всё делается из под рута. Если у вас другие условия, то адаптируйте конфигурацию под себя.

В файле group_vars/all.yaml находятся переменные необходимые для настройки OpenVPN сервиса. Секретная фраза нужна для создания ключей и сертификатов, а имя клиента для генерации пользовательских файлов.

Установка Docker

Если Docker на сервере не установлен, то достаточно ввести следующую команду и дождаться выполнения:

$ make install-docker

Установка OpenVPN

Весь процесс установки полностью автоматизирован, протестирован на VPS серверах с установленными Ubuntu 16.04 / 17.04 и запускается командой:

$ make install-vpn 

После её успешного завершения (около 5-6 минут) в папке connections должен оказаться файл необходимый для подключения на стороне клиента.

Если вам нужно более одного клиентского подключения, то задайте в соответствующей переменной внутри group_vars/all.yaml новое уникальное имя клиента и запустите процесс генерации и доставки файла командой:

$ make create-client

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

$ make reset-vpn

Подключение

Для подключения подойдёт любой OpenVPN клиент независимо от операционной системы. В macOS я использую платный, но очень хороший Viscosity (в качестве бесплатной альтернативы рекомендую использовать Tunnelblick), а на iOS установлен официальный OpenVPN Connect из App Store. Можно подключить и к домашнему роутеру (проверил на Asus RT-AC68U).

Скорость доступа из любого места откуда бы я не подключался близка к максимальной.

Сравнение с другими

Ранее я пользовался различными коммерческими VPN сервисами и перепробовал довольно много из них. Ни один так хорошо как свой не работает. Чаще всего не устраивает скорость и время отклика, но бывают и другие проблемы. Дольше всего у меня продержался Private Tunnel от создателей OpenVPN. У них довольно неплохие серверы, но свой всё равно работает шустрее.

comments powered by Disqus