Для начала вам нужен VPS, он же виртуальный выделенный сервер. На него вы установите VPN, к которому будете подключаться.
Если вы не знаете, по каким критериям выбирать VPS, можете руководствоваться таблицей ниже:
Очевидно, что Veesp выигрывает благодаря безлимитному трафику.
Кроме того, в случае с Veesp, доступны DNS-хостинг и SSL-сертификат, что даёт возможность защитить свои DNS-коммуникации, например, с помощью DNSCrypt, и поднять SSL-туннель для маскировки VPN-трафика, но об этом в другой раз.
После регистрации вам предстоит оформить заказ и выбрать желаемый дистрибутив Linux. Имейте в виду, что для разных дистрибутивов настройка VPN может отличаться. Выбирайте то, что вам ближе или Debian 9 «Stretch», чтобы успешно воспользоваться дальнейшими инструкциями.
Когда вы закончите, зайдите в панель управления сервером, чтобы узнать IP-адрес и рут-пароль, либо проверьте почту – туда также придёт письмо с данными для доступа к серверу:
Не показывайте никому!
Зайдите на сервер под рутом, используя 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 :
Теперь у вас есть ЦС, готовый подписывать запросы сертификатов.
Теперь вы можете сгенерировать ключи и запрос сертификата от вашего сервера. Вы отправите запрос на ЦС для подписи.
Начните с перехода в директорию 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 запущена и работает. Прежде чем воспользоваться ею, нужно создать конфигурационные файлы для клиента. Вы уже настроили сертификаты и ключи: осталось создать клиентский конфиг.
Создайте директории внутри каталога 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. Это может быть домашний компьютер или смартфон.
А в завершение нужно просто проверить скорость и убедиться, что всё работает так, как надо.