Основы запуска OpenVPN в Docker на Ubuntu

Вы беспокоитесь о том, как свободно получить доступ к Интернету без множества ограничений и угрозы безопасности данных? Больше не беспокойтесь! Начните хостить свой VPN-сервер с использованием OpenVPN в Docker.

С помощью технологий Docker и OpenVPN вы можете быстро настроить и запустить свой VPN-сервер. В этом руководстве вы узнаете основы запуска сервера OpenVPN, размещенного в контейнере Docker.

Следите за обновлениями и обеспечивайте безопасность своего VPN-сервера с OpenVPN Docker!

Необходимые условия

Это руководство будет практическим демонстрационным материалом. Если вы следуете за нами, вам понадобятся следующие компоненты:

  • A Linux-based operating system (OS) – This tutorial uses Ubuntu v22.04, but other Linux distributions will work.
  • Установленный и работающий Docker – в данном руководстве используется Docker версии v20.10.17.
  • Устройство Android с установленным приложением OpenVPN Connect – в данном руководстве используется Android v11 и OpenVPN Connect v3.2.7.

Создание контейнера Docker для OpenVPN

Контейнеризация – это упаковка кода и всех его зависимостей в стандартный программный блок для быстрого и надежного запуска вашего приложения. Существует несколько способов создания контейнера OpenVPN Docker. Вы можете либо создать контейнер с нуля, либо загрузить готовый контейнер с Docker Hub.

Однако в этом руководстве вы будете использовать существующий файл образа OpenVPN Docker. Готовые контейнеры предлагают несколько преимуществ, так как они тщательно тестируются на наличие различных уязвимостей при поддержке обширного сообщества разработчиков. Кроме того, эти контейнеры помогают сэкономить время и устранить необходимость изобретать велосипед заново.

Чтобы создать контейнер OpenVPN Docker:

1. Откройте терминал и выполните следующую команду OVPN_DATA, которая не выводит результат, но устанавливает имя тома данных ovpn-data-test в переменную OVPN_DATA.

OVPN_DATA="ovpn-data-test"

2. Затем выполните следующую команду docker volume create для создания тома данных с именем, установленным в переменной $OVPN_DATA.

Эта команда не выводит результат, но создает контейнер тома данных для OpenVPN, где хранятся все данные, файлы конфигурации и сертификаты.

docker volume create --name $OVPN_DATA

3. Наконец, выполните следующую команду docker run, чтобы загрузить и установить образ OpenVPN Docker с помощью следующего:

  • Укажите объем хранилища (-v) внутри контейнера, отделенного от остальной файловой системы контейнера. В этом случае образ Docker OpenVPN хранится в каталоге /etc/openvpn.
  • Укажите механизм ведения журнала (--log-driver), который сохраняет информацию о работающих контейнерах и службах (none).
  • Сообщает Docker автоматически удалять (–rm) контейнер, если он уже существует.

Не забудьте заменить (YourPublicIP.com) на публичный IP-адрес вашего сервера (хоста) или доменное имя (если у вас есть), используя протокол UDP. Однако имейте в виду, что также можно использовать протокол TCP.

TCP – это протокол ориентированный на соединение, в то время как UDP – протокол без установления соединения.

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://YourPublicIP.com
Installing OpenVPN on Docker container

Обратите внимание, что если вы собираетесь использовать самостоятельное размещение или публичный IP, вам необходимо настроить переадресацию портов на вашем маршрутизаторе/модеме.

Защита клиента OpenVPN с использованием сертификатов

Вы успешно установили клиент Docker OpenVPN на свою машину, так что ура! Но прежде чем использовать OpenVPN, вам нужно настроить конфигурацию клиента OpenVPN.

Только потому, что вы работаете с OpenVPN, не означает, что вы должны открывать свой VPN-сервер для мира. Вам понадобятся сертификаты, чтобы защитить свой клиент OpenVPN.

1. Запустите нижеуказанную команду docker run для создания и получения сертификатов CA и клиента. Эта команда создает запущенные контейнеры OpenVPN (–it) изображение, указанное внутри основного контейнера.

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

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn ovpn_initpki

Введите yes и нажмите Enter, как показано ниже, чтобы инициировать систему OpenVPN PKI.

Initiating the OpenVPN PKI system

2. Затем введите и подтвердите новый пароль для сертификата CA и нажмите Enter. Запишите пароль в надежном месте, так как вам понадобится он позже при настройке и создании сертификата клиента.

Setting a new CA certificate password

3. Укажите уникальное имя для вашего сертификата CA и нажмите Enter.

Naming the new CA certificate

4. Теперь введите фразу-пароль CA, которую вы установили на втором шаге, чтобы проверить, что запрос соответствует подписи.

Checking \the request matches the signature

5. Введите вашу фразу-пароль еще раз, чтобы создать закрытый ключ.

Generate a private key by entering the CA passphrase

6. Затем выполните нижеуказанную команду, чтобы запустить службу сервера OpenVPN в Docker для настройки клиента OpenVPN, где:

  • Опция -p устанавливает порт (1194), который слушает и инициирует соединение между сервером и клиентом.

Вы можете изменить порт 1194, чтобы он соответствовал вашим предпочтениям, если вы не удовлетворены использованием стандартного порта OpenVPN.

  • Аргумент –cap-add=NET_ADMIN применяет дополнительные возможности Linux, изменяя сетевые интерфейсы, которые Docker по умолчанию не предоставляет.
docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
Setting the port OpenVPN will listen to

7. После установки порта выполните нижеуказанную команду docker run для выполнения следующего:

  • Сгенерируйте клиентский сертификат и загрузите файл конфигурации клиента (.ovpn) из контейнера Docker на сервер хоста. Сгенерированный сертификат не имеет пароля, как указано в аргументе no-pass в команде.
  • Установите имя файла сертификата OpenVPN и идентификации клиента на CLIENTAPP. Сертификат хранится в директории пользователя хоста, а не в контейнере Docker.
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTAPP nopass

Введите ваш пароль, как показано ниже, чтобы завершить генерацию сертификата.

Generating the VPN client certificate

8. Затем выполните команду ниже, чтобы сгенерировать и загрузить файл конфигурации OpenVPN (ovpn_getclient) из контейнера на сервер хоста.

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient CLIENTAPP > CLIENTAPP.ovpn

9. Перейдите в директорию user/home на вашем сервере хоста (машина с Linux), и передайте файл .ovpn (CLIENTAPP.ovpn) на ваше устройство Android.

10. Наконец, запустите приложение клиента OpenVPN Connect на вашем устройстве Android.

Нажмите на ПРОСМОТР во вкладке ФАЙЛ и выберите файл .ovpn (CLIENTAPP.ovpn), который вы перенесли на ваше устройство Android. Это добавит новый профиль в клиент OpenVPN Connect.

Importing the .ovpn file to the OpenVPN Connect client

После успешного подключения вы увидите результат ниже.

Verifying successful connection to the VPN server

Доступ к веб-интерфейсу OpenVPN

Беспокоитесь ли вы о количестве команд, которые вам пришлось выполнить, чтобы получить доступ к серверу VPN? Почему бы не попробовать простой веб-интерфейс?

OpenVPN предлагает набор инструментов для установки и настройки через веб-интерфейс, что позволяет быстро развернуть решения для удаленного доступа к VPN. Весь набор инструментов поставляется в одном пакете под названием OpenVPN Access Server.

Для доступа к веб-интерфейсу OpenVPN необходимо установить пакет:

1. Выполните следующую команду docker pull, чтобы скачать и установить последний контейнер Docker OpenVPN (openvpn-as) с Hub Docker для Linux-серверов (linuxserver).

docker pull linuxserver/openvpn-as
Downloading OpenVPN Access Server Docker container

2. После загрузки выполните нижеприведенную команду docker create, чтобы создать новый контейнер Docker с именем openvpn-as со следующим:

  • -v /home/docker/openvpn-as/config: /config – Устанавливает директорию для хранения файлов конфигурации.
  • --restart=always – Гарантирует, что контейнер всегда будет запускаться при загрузке системы. Если вы не хотите, чтобы контейнер перезапускался, этот аргумент можно опустить.
  • -e PGID=1001 -e PUID=1001 – Устанавливает идентификатор пользователя для устранения проблем с разрешениями между сервером-хостом и контейнером.
  • –net=host –privileged – Определяет, как OpenVPN Access Server работает в контейнере.
docker create --name=openvpn-as --restart=always -v /home/docker/openvpn-as/config:/config -e INTERFACE=eth0 -e PGID=1001 -e PUID=1001 -e TZ=Africa/Nairobi --net=host --privileged linuxserver/openvpn-as
Creating a new Docker container (openvpn-as)

3. Затем выполните следующую команду docker start, чтобы получить доступ к веб-интерфейсу OpenVPN через контейнер Docker OpenVPN Access Server, созданный на предыдущем этапе.

docker start openvpn-as
Starting the OpenVPN access server Docker container

4. Наконец, откройте свой любимый веб-браузер и перейдите на веб-интерфейс OpenVPN, используя ваш локальный IP-адрес (например, https://YourIP:943/admin). Замените YourIP на фактический IP-адрес вашего сервера.

Вас встретит страница входа в OpenVPN Access Server, если всё пройдет успешно, как показано ниже.

Введите admin и пароль в соответствующие поля и нажмите Войти, чтобы получить доступ к панели управления OpenVPN Access Server.

Обратите внимание, что имя пользователя и пароль по умолчанию – admin и password соответственно. Вы можете изменить учетные данные по своему усмотрению.

Accessing the OpenVPN Access Server web UI

После входа вы увидите панель управления OpenVPN Access Server ниже.

Accessing the OpenVPN Access Server dashboard

Настройка DNS для быстрого и безопасного подключения

На данном этапе ваш OpenVPN Access Server работает корректно. Однако, для улучшения производительности вашего VPN-сервера необходимо настроить DNS.

Для настройки DNS необходимо получить доступ к веб-интерфейсу сервера OpenVPN и обновить настройки DNS с использованием серверов Google или вашего предпочтительного DNS. Google предлагает самые быстрые DNS-серверы, которые вы будете использовать в своем OpenVPN Access Server.

1. Нажмите VPN Settings (левая панель) на вкладке CONFIGURATION на панели управления вашего OpenVPN Access Server.

Прокрутите вниз до раздела DNS-настройки и включите опцию Использовать определенные DNS-серверы клиентами, как показано ниже.

Enabling custom OpenVPN DNS addresses

2. Затем обновите основной (8.8.8.8) и вторичный DNS-сервер (8.8.8.4) с адресами DNS Google, как показано ниже, и нажмите «Сохранить настройки», чтобы сохранить изменения.

Setting custom OpenVPN DNS addresses

3. После сохранения изменений нажмите «Обновить запущенный сервер», чтобы перезапустить сервер и внести изменения в действие.

Updating the server settings

4. Теперь перейдите к серверу доступа OpenVPN (например, https://ВашIP:943/admin) на вашем компьютере с Linux. Замените ВашIP на IP-адрес вашего сервера. Если конфигурация работает правильно, вы увидите ту же страницу ниже.

Войдите с помощью учетных данных по умолчанию (администратор и пароль) для имени пользователя и пароля.

Logging in to OpenVPN Access Server

5. Нажмите на значки любой платформы, чтобы загрузить приложение клиента, и нажмите “Себя” (профиль с блокировкой пользователя), чтобы загрузить файл клиента .ovpn.

Downloading the .ovpn config file and client app

6. Наконец, запустите загруженный вами клиент OpenVPN и импортируйте файл .ovpn, как вы делали на последнем этапе “Обеспечение безопасности клиента OpenVPN с помощью сертификатов”, как показано ниже.

Connecting to the OpenVPN server

Заключение

Хостинг вашего VPN-сервера никогда не должен быть сложной задачей, не говоря уже о защите соединения с сервером. К счастью, OpenVPN Docker уже под рукой, чтобы спасти ситуацию. И в этом руководстве вы узнали, как установить, настроить и настроить OpenVPN с использованием Docker в Ubuntu. Вы также коснулись обеспечения безопасного доступа к OpenVPN в контейнере Docker с помощью OpenVPN CA и клиентских сертификатов.

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

Source:
https://adamtheautomator.com/openvpn-in-docker/