10 шагов навстречу собственному безлимитному VPN

10 шагов навстречу собственному безлимитному VPN

Для начала вам нужен VPS, он же виртуальный выделенный сервер. На него вы установите VPN, к которому будете подключаться.

Если вы не знаете, по каким критериям выбирать VPS, можете руководствоваться таблицей ниже:

Provider Storage CPU Memory Traffic Price
Veesp 25GB 1 vCore 1GB Unlimited $5/mo
DigitalOcean 25GB 1 vCore 1GB 1 TB $5/mo
Vultr 25GB 1 vCore 1GB 1 TB $5/mo

Очевидно, что Veesp выигрывает благодаря безлимитному трафику.

Кроме того, в случае с Veesp, доступны DNS-хостинг и SSL-сертификат, что даёт возможность защитить свои DNS-коммуникации, например, с помощью DNSCrypt, и поднять SSL-туннель для маскировки VPN-трафика, но об этом в другой раз.

После регистрации вам предстоит оформить заказ и выбрать желаемый дистрибутив Linux. Имейте в виду, что для разных дистрибутивов настройка VPN может отличаться. Выбирайте то, что вам ближе или Debian 9 «Stretch», чтобы успешно воспользоваться дальнейшими инструкциями.

Когда вы закончите, зайдите в панель управления сервером, чтобы узнать IP-адрес и рут-пароль, либо проверьте почту – туда также придёт письмо с данными для доступа к серверу:

10 шагов навстречу собственному безлимитному VPN

Не показывайте никому!

Зайдите на сервер под рутом, используя IP-адрес и пароль, который вы узнали в предыдущем шаге :

Кстати, если вы выбрали Veesp в качестве провайдера, можете обеспечить своему серверу доменное имя. Тогда вам не нужно будет вводить и запоминать IP-адрес VPS-сервера.

OpenVPN работает по TLS/SSL – использует сертификаты для шифрования трафика между клиентом и сервером. Сертификаты выдаёт центр сертификации (ЦС) – отдельный сервер.

Из соображений безопасности ЦС-сервер отделён от VPN-сервера. С помощью EasyRSA вы поднимите свой ЦС и построите на нём инфраструктуру открытых ключей (ИОК).

Чтобы начать, скачайте последнюю версию EasyRSA на обе машиныЦС и сервер OpenVPN:

Отлично! У вас есть всё необходимое: OpenVPN на VPS и EasyRSA на ЦС.

На ЦС перейдите в директорию EasyRSA:

Скопируйте файл vars.example под именем vars :

Откройте файл в текстовом редакторе:

Найдите настройки сертификатов:

Раскомментируйте и отредактируйте по вкусу. Не оставляйте строки пустыми:

Сохраните и закройте файл, когда закончите.

Внутри директории EasyRSA лежит скрипт easyrsa . Он используется для управления ЦС. Запустите скрипт с опцией init-pki , чтобы инициализировать инфраструктуру открытых ключей:

Постройте ЦС и создайте ключи SSL-сертификата. Используйте nopass , чтобы не подтверждать пароль каждый раз при взаимодействии с ЦС:

Вывод попросит подтвердить общее имя для ЦС – просто жмите ENTER :

Теперь у вас есть ЦС, готовый подписывать запросы сертификатов.

10 шагов навстречу собственному безлимитному VPN

Теперь вы можете сгенерировать ключи и запрос сертификата от вашего сервера. Вы отправите запрос на ЦС для подписи.

Начните с перехода в директорию EasyRSA на сервере OpenVPN:

Запустите оттуда уже знакомую команду easyrsa с опцией init-pki :

Затем запустите скрипт easyrsa с опцией gen-req и с любым именем машины. Не забудьте опцию nopass – без неё файл запроса окажется на пароле, что может вызвать проблемы с доступом в дальнейшем:

Команда создаст закрытый ключ и файл запроса сертификата server.req . Скопируйте ключ в /etc/openvpn/ :

Передайте server.req на ЦС безопасным способом:

Далее, на машине ЦС перейдите в директорию EasyRSA:

Импортируйте файл server.req с помощью скрипта easyrsa , указав общее имя:

Подпишите запрос, используя скрипт easyrsa с опцией sign-req , указав тип запроса и общее имя. Тип запроса может быть client или server . Для сервера OpenVPN, очевидно, server :

Вывод проверит источник исходящего запроса. Введите yes , затем ENTER для подтверждения:

Передайте подписанный сертификат на VPN-сервер:

Прежде чем выйти из ЦС, передайте на сервер файл ca.crt :

Далее зайдите на сервер OpenVPN и скопируйте файлы server.crt и ca.crt в директорию /etc/openvpn/ :

Затем перейдите в директорию EasyRSA:

Создайте там ключ Диффи-Хеллмана для использования во время обмена:

Сгенерируйте подпись HMAC для усиления возможностей проверки целостности TLS сервера:

Скопируйте новые файлы в директорию /etc/openvpn/ :

Ура! Вы создали все сертификаты и ключи, которые нужны вашему серверу. А значит, готовы сделать то же самое для клиента, чтобы подключаться к вашему VPN.

Можно создать закрытый ключ и запрос сертификата на клиенте, а затем отправить их на подпись в ЦС. Но лучше создать скрипт на сервере. Он автоматически генерирует клиентские файлы конфигурации, которые содержат все необходимые ключи и сертификаты. Так вы избежите необходимости отправлять ключи, сертификаты и конфигурационные файлы клиенту и упростите подключение к VPN.

Вам нужно передать скрипту уникальное имя клиента ( proglib ).

Для начала создайте структуру директорий в домашнем каталоге для хранения сертификатов и ключей:

Вы будете хранить здесь ключевые пары и сертификаты клиента. Из соображений безопасности ограничьте доступ:

Далее возвращайтесь в директорию EasyRSA и запускайте скрипт easyrsa с опциями gen-req , nopass и именем клиента:

Жмите ENTER , чтобы подтвердить и скопируйте файл proglib.key в созданную ранее директорию /client-configs/keys/ :

Передайте файл proglib.req вашему ЦС:

Зайдите на ЦС, перейдите в директорию EasyRSA, чтобы импортировать запрос сертификата:

Подпишите запрос для клиента, как вы уже делали это для сервера в предыдущем шаге. На этот раз укажите client в качестве типа запроса:

На выводе нажмите yes , чтобы подтвердить источник сертификата:

Команда создаёт файл proglib.crt . Отправьте его обратно на сервер:

Зайдите на сервер OpenVPN и скопируйте сертификат клиента в директорию /client-configs/keys/ :

А также скопируйте файлы ca.crt и ca.crt в директорию /client-configs/keys/ :

Отличная работа! Вы создали и собрали ключи с сертификатами в нужном месте на сервере. Пора приступать к настройке OpenVPN.

Теперь у вас есть ключи и сертификаты обеих сторон, и вы можете использовать их в службе OpenVPN.

Используйте копию шаблона конфигурации OpenVPN:

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

Раскомментируйте директиву tls-auth в секции HMAC и добавьте параметр key-direction в 0 :

Затем раскомментируйте cipher :

Ниже добавьте директиву auth :

После найдите строчку с директивой dh , которая описывает параметры Диффи-Хеллмана. При необходимости удалите из имени 2048 , чтобы оно совпадало с ключом, сгенерированным на предыдущем шаге.

Наконец, расскоментируйте user и group :

Готово! Эти изменения достаточны для функционирования OpenVPN. Осталось несколько небольших, но важных деталей.

Перенаправьте весь трафик через VPN

Чтобы направить трафик в туннель, нужно «продвинуть» свои настройки маршрутов и DNS на клиентские машины.

В файле server.conf расскоментируйте redirect-gateway :

Это поменяет настройки DNS на клиенте и заставит использовать VPN туннель в качестве маршрута по умолчанию.

Поменяйте порт и протокол

По умолчанию OpenVPN принимает клиентов на 1194 порте по протоколу UDP. Поменяйте порт и протокол, если предстоит подключаться к VPN из сетей с ограничениями. Порт 443 не фильтруется файерволами.

Измените протокол на TCP, если фильтруется UDP:

При этом отключите директиву explicit-exit-notify – она нужна только для UDP. Иначе служба OpenVPN не запустится с указанными протоколом TCP:

Если вам необязательно менять протокол и порт, не трогайте эти настройки.

Чтобы трафик шёл в OpenVPN, нужно разрешить маршрутизацию пакетов в файле /etc/sysctl.conf :

Раскомментируйте строчку net.ipv4.ip_forward :

Сохраните, закройте и примените:

Настройте межсетевой экран

Узнайте публичный сетевой интерфейс:

Он будет указан после слова «dev» ( eth0 ) :

Откройте файл /etc/ufw/before.rules для настройки:

В верхнюю часть файла добавьте приведённые ниже строки. Не забудьте заменить на ваш интерфейс:

Сохраните и закройте файл.

Теперь разрешите UFW обрабатывать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw :

Там, в директиве DEFAULT_FORWARD_POLICY , укажите ACCEPT :

Сохраните и закройте файл, когда закончите.

Далее разрешите файерволу трафик OpenVPN. Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf , нужно разрешит трафик UDP на порте 1194 . Если вы меняли порт и протокол, замените на значения, которые выбрали.

Разрешите трафик SSH, чтобы не потерять доступ к управлению сервером:

После добавления правил перезапустите UFW:

Теперь ваш сервер настроен на правильную обработку трафика OpenVPN.

Наконец-то вы можете запустить службу OpenVPN на вашем сервере с помощью утилиты systemd systemctl .

Запустите сервер OpenVPN, указав имя файла конфигурации в качестве экземпляра переменной после имени unit-файла systemd. Файл конфигурации вашего сервера называется /etc/openvpn/server.conf , так что добавьте @server в конце unit-файла при вызове:

Убедитесь, что сервер успешно запустился:

Если всё хорошо, вы получите что-то похожее:

Можете проверить наличие интерфейса tun0 для OpenVPN:

Команда выведет настроенный интерфейс:

После запуска службы включите автозапуск при загрузке:

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

10 шагов навстречу собственному безлимитному VPN

Создайте директории внутри каталога client-configs . Там будут храниться файлы конфигурации клиента:

Скопируйте пример конфигурации клиента в директорию client-configs :

Откройте новый файл в текстовом редакторе:

Перейдите к директиве remote . Она направляет клиента на публичный адрес вашего сервера OpenVPN. Если вы поменяли порт, на котором слушает OpenVPN, не забудьте поменять здесь значение по умолчанию 1194 :

Убедитесь, что протокол соответствует значению в настройках сервера:

Далее, раскомментируйте директивы user и group :

Закомментируйте директивы ca , cert и key – вы будете передавать ключ и сертификат прямо из конфига, что гораздо быстрее:

И директиву tls-auth – вы добавите ta.key напрямую в файл конфигурации клиента:

Укажите настройки cipher и auth согласно указанным вами в файле /etc/openvpn/server.conf :

Добавьте директиву key-direction в любое место файла. Вы должны установить её в «1» для правильной работы VPN на клиенте:

Наконец добавьте несколько закомментированных строк. Они нужны только для Linux-клиентов, которые настраиваются DNS утилитой resolvconf .

Закройте и сохраните, когда закончите.

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

/client-configs/files . Откройте новый файл make_config.sh в директории

Добавьте туда следующее содержимое, заменив proglib именем вашего пользователя:

Сохраните и закройте.

Сделайте файл исполняемым:

Этот скрипт создаёт копию сделанного вами файла base.conf , собирает все файлы сертификатов и ключей, которые вы создали для клиента, извлекает их содержимое, добавляет их в копию файла базовой конфигурации и экспортирует всё это в конфиг нового клиента.

Пора проверить его в действии!

Если помните, вы создали сертификат и ключ proglib.crt и proglib.key . Создайте конфиг для этих реквизитов, перейдя в директорию

/client-configs и запустив созданный ранее скрипт:

Команда создаст файл proglib.ovpn в директории

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

А в завершение нужно просто проверить скорость и убедиться, что всё работает так, как надо.