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

8
8722
Добавить в избранное

С рунетом что-то не так: сначала Роскомнадзор и блокировки, теперь «суверенный» интернет. Пора поднимать собственный VPN!

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

И вот почему:

  • Скорость: в вашем распоряжении окажется VPN-сервер, которым пользуетесь только вы.
  • Контроль: вы можете создавать и удалять учётные записи, обновлять конфигурацию, менять пароль доступа и многое другое.
  • Стоимость: аренда VPS стоит начиная от 2,5-5$/мес. Для сравнения: ExpressVPN – 12.95$/мес., NordVPN – 11.95$/мес.
  • Обучение: да, собственный VPS – это хорошая практика серверного администрирования.

1. Выберите VPS-провайдера

Для начала вам нужен 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-адрес и рут-пароль, либо проверьте почту – туда также придёт письмо с данными для доступа к серверу:

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

2. Установите OpenVPN и EasyRSA

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

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

Установите OpenVPN:

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

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

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

Распакуйте архив:

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

3. Поднимите центр сертификации

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

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

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

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

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

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

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

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

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

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

4. Создайте сертификат сервера, ключ и файлы шифрования

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.

5. Создайте сертификат и ключевую пару клиента

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

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

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

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

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

Жмите 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.

6. Настройте службу OpenVPN

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

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

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

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

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

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

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

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

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

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

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

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

И dhcp-option:

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

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

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

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

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

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

7. Настройте маршрутизацию на сервере

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

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

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

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

Установите ufw:

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

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

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

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

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

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

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

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

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

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

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

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

8. Запустите и включите службу OpenVPN

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

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

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

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

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

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

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

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

9. Разверните инфраструктуру конфигурации клиента

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 в директории ~/client-configs:

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

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

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

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

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

10. Сгенерируйте конфигурацию клиента

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

Команда создаст файл proglib.ovpn в директории ~/client-configs/files:

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

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

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

Интересуетесь Linux?

Подпишитесь на нашу рассылку, чтобы получать больше интересных материалов:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Комментариев: 8

  1. Черезов Вячеслав

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

    scp pki/issued/server.crt [email protected]_вашего_сервера:/tmp
    помогите плиз застрял на этом моменте,не могу понять какой ip моего сервера

    1. В данном случае IP сервера — это IP адрес вашего VPS.

      1. Черезов Вячеслав

        А какой тогда ip ЦС?я просто ЦС настроил vps,а сервер на домашнем ноуте,и вот понять не могу,с ноута сертификаты на vps скопировал,а обратно не могу,не понимаю какой адрес

        1. На ноуте:
          scp имя_пользователя@IP-сервера:/путь_к_сертификатам/сертификаты /путь_сохранения_на_локальной_машине/

          Или воспользуйтесь sftp-клиентом, например FileZilla.

  2. Вообще не понял про ЦС. Как то поверхностно описано для профиков, нам нужны два сервера или один, если один то что и куда ставить, а если два сервера то какие базовые конфигурации нужны для ЦС сервера.

    1. Можно использовать один VPS для создания и подписи сертификатов, но это небезопасно. Можно использовать в качестве ЦС клиентскую машину, с которой осуществляется настройка VPN-сервера. В идеале ЦС — это отдельная машина, которая подписывает сертификаты. Для этого ей достаточно Easy-RSA для подписи и scp для копирования на сервер. Если безопасность не главное, отдельный ЦС — формальность.

  3. Спасибо. Подскажите пожалуйста для поднятия по этой инструкции мне нужно арендовать 2 VPS сервера, один для ЦС-сервер и один для VPN-сервер или всё можно настроить на одном VPS а то два как-то дороговато?

    1. Можно на одном VPS.

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