Вступление
В этом руководстве объясняется, как настроить и запустить контейнер OpenVPN с помощью https://docker.com [Docker].
OpenVPN предоставляет способ создания виртуальных частных сетей (VPN) с использованием шифрования TLS (эволюция SSL). OpenVPN защищает сетевой трафик от перехватов и атак типа «человек посередине» (MITM). Частная сеть может использоваться для безопасного подключения устройства, такого как ноутбук или мобильный телефон, работающий в незащищенной сети Wi-Fi, к удаленному серверу, который затем передает трафик в Интернет. Частные сети также можно использовать для безопасного подключения устройств друг к другу через Интернет.
Docker предоставляет способ инкапсуляции данных процесса и конфигурации сервера OpenVPN, чтобы им было легче управлять. Docker OpenVPN image предварительно собран и включает в себя все необходимые зависимости для запуска сервера в нормальной и стабильной среде. Сценарии включены для существенной автоматизации стандартного варианта использования, но все же позволяют при желании выполнить полную ручную настройку. Docker volume container используется для хранения конфигурации и данных сертификата EasyRSA PKI.
Docker Registry - центральный репозиторий как для официальных, так и для пользовательских образов Docker. Изображение, используемое в этом руководстве, является добавленным пользователем изображением, доступным по адресу kylemanna/openvpn. Образ собран на серверах облачной сборки Docker Registry с использованием источника из репозитория GitHub. Сборка облачного сервера, связанная с Github, добавляет возможность аудита образа Docker, чтобы пользователи могли просматривать исходный файл Dockerfile и связанный с ним код, называемый http://blog.docker.com/2013/11/introduction-trusted-builds/ [ Trusted Build. Когда код обновляется в репозитории GitHub, новый образ Docker создается и публикуется в реестре Docker.
Примеры использования
-
Безопасный маршрут к Интернету в ненадежных общественных сетях (WiFi)
-
Частная сеть для подключения мобильного ноутбука, офисного компьютера, домашнего ПК или мобильного телефона
-
Частная сеть для защищенных служб за маршрутизаторами NAT, которые не имеют возможности обхода NAT
цели
-
Установите демон Docker в Ubuntu 14.04 LTS
-
Настройте Docker volume container для хранения данных конфигурации
-
Создайте центр сертификации EasyRSA PKI (CA)
-
Извлечь автоматически сгенерированные файлы конфигурации клиента
-
Настройте выбранное количество клиентов OpenVPN
-
Ручка запуска контейнера Docker при загрузке
-
Представьте продвинутые темы
Предпосылки
-
Знание оболочки Linux. В этом руководстве в основном предполагается, что пользователь способен устанавливать и запускать демоны Linux в традиционном смысле
-
Корневой доступ на удаленном сервере
-
Для этого урока предполагается DigitalOcean 1 CPU / 512 МБ Droplet RAM под управлением Ubuntu 14.04. Docker облегчает запуск образа на любом хосте дистрибутива Linux
-
Любой виртуальный хост будет работать до тех пор, пока на нем работает технология виртуализации QEMU / KVM или Xen; * OpenVZ не будет работать *
-
Вам понадобится root-доступ на сервере. В этом руководстве предполагается, что пользователь работает как непривилегированный пользователь с включенным sudo. Прочтите Digital Ocean учебное пособие по управлению пользователями в Ubuntu 14.04 если нужно
-
Локальное клиентское устройство, такое как телефон Android, ноутбук или ПК. Почти все операционные системы поддерживаются через различные клиенты OpenVPN
Шаг 1 - Настройка и тестирование Docker
Docker движется быстро, и политика долгосрочной поддержки (LTS) Ubuntu не выдерживает. Чтобы обойти это, мы установим PPA, который предоставит нам последнюю версию Docker.
Добавьте исходный ключ подписи пакета репозитория Docker. Команда + apt-key
использует повышенные привилегии через` + sudo`, su может появиться запрос пароля для пароля пользователя:
curl -L https://get.docker.com/gpg | sudo apt-key add -
-
Примечание: * При необходимости введите свой пароль sudo мигающим курсором.
Добавьте вышестоящий Docker-репозиторий в системный список:
echo deb http://get.docker.io/ubuntu docker main | sudo tee /etc/apt/sources.list.d/docker.list
Обновите список пакетов и установите пакет Docker:
sudo apt-get update && sudo apt-get install -y lxc-docker
Добавьте вашего пользователя в группу + docker +
, чтобы включить связь с демоном Docker как обычный пользователь, где ++
- ваше имя пользователя. * Выйдите и войдите снова, чтобы новая группа вступила в силу *:
sudo usermod -aG docker
После * повторного входа в систему * проверьте членство в группе с помощью команды + id +
. Ожидаемый ответ должен включать + docker +
, как в следующем примере:
uid=1001(test0) gid=1001(test0) groups=1001(test0),27(sudo),999(docker)
Необязательно: Запустите + bash +
в простом образе Docker Debian (+ - rm +
для очистки контейнера после выхода и + -it +
для интерактивного), чтобы проверить работу Docker на хосте:
docker run --rm -it debian:jessie bash -l
Ожидаемый ответ от докера, когда он извлекает изображения и устанавливает контейнер:
Unable to find image 'debian:jessie' locally
debian:jessie: The image you are pulling has been verified
511136ea3c5a: Pull complete
36fd425d7d8a: Pull complete
aaabd2b41e22: Pull complete
Status: Downloaded newer image for debian:jessie
root@de8ffd8f82f6:/#
Оказавшись внутри контейнера, вы увидите приглашение + root @: / # +
, означающее, что текущая оболочка находится в контейнере Docker. Чтобы убедиться, что он отличается от хоста, проверьте версию Debian, запущенную в контейнере:
cat /etc/issue.net
Ожидаемый ответ для контейнера OpenVPN на момент написания:
Debian GNU/Linux jessie/sid
Если вы видите другую версию Debian, это нормально.
Выйдите из контейнера, набрав + logout +
, и приглашение хоста должно появиться снова.
Шаг 2. Настройка хранилища сертификатов EasyRSA PKI
Этот шаг обычно является головной болью для тех, кто знаком с OpenVPN или любыми сервисами, использующими PKI. К счастью, Docker и сценарии в образе Docker упрощают этот шаг, генерируя файлы конфигурации и все необходимые нам файлы сертификатов.
Создайте контейнер объема. В этом руководстве будет использоваться переменная окружения ++
, чтобы сделать ее удобной для копирования и вставки. Установите это на что угодно. Значение по умолчанию + ovpn-data +
рекомендуется для отдельных серверов-контейнеров OpenVPN Docker. Установка переменной в оболочке использует подстановку строк, чтобы избавить пользователя от замены вручную для каждого шага в учебнике:
="ovpn-data"
Создайте пустой контейнер тома Docker, используя + busybox +
в качестве минимального образа Docker:
docker run --name -v /etc/openvpn busybox
Инициализируйте контейнер `, который будет содержать файлы конфигурации и сертификаты, и замените `
на ваше полное доменное имя. Значение ++
должно быть полным доменным именем, которое вы используете для связи с сервером. Это предполагает, что DNS settings уже настроены. Кроме того, можно использовать только IP-адрес сервера, но это не рекомендуется.
docker run --volumes-from --rm kylemanna/openvpn ovpn_genconfig -u udp://:1194
Создайте центр сертификации EasyRSA PKI. Вам будет предложено ввести ключевую фразу для закрытого ключа CA. Выберите хороший и запомните это; без ключевой фразы невозможно выдать и подписать клиентские сертификаты:
docker run --volumes-from --rm -it kylemanna/openvpn ovpn_initpki
-
Обратите внимание, безопасность контейнера
++
важна. * Он содержит все закрытые ключи для олицетворения сервера и все клиентские сертификаты. Помните об этом и контролируйте доступ соответствующим образом. Сценарии OpenVPN по умолчанию используют ключевую фразу для ключа CA для повышения безопасности и предотвращения выдачи поддельных сертификатов.
См. * Заключение * ниже для получения дополнительной информации о том, как сделать резервную копию хранилища сертификатов.
Шаг 3 - Запустите сервер OpenVPN
Чтобы автоматически запустить Docker-контейнер, который запускает процесс сервера OpenVPN (см. Https://docs.docker.com/articles/host_integration/[Docker Host Integration для получения дополнительной информации]), создайте https://www.digitalocean.com/community/tutorials Файл инициализации [upstart] / upstart-event-system-what-it-and-how-to-it-it [Upstart], использующий + nano +
или + vim +
:
sudo vim /etc/init/docker-openvpn.conf
Содержимое для размещения в + / etc / init / docker-openvpn.conf +
:
description "Docker container for OpenVPN server"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
exec docker run --volumes-from ovpn-data --rm -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
end script
Запустите процесс, используя механизм инициализации Upstart:
sudo start docker-openvpn
Убедитесь, что контейнер запустился и сразу не рухнул, посмотрев столбец + STATUS
:
test0@tutorial0:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3ca41324e1d kylemanna/openvpn:latest "ovpn_run" 2 seconds ago Up 2 seconds 0.0.0.0:1194->1194/udp focused_mestorf
Шаг 4 - Генерация клиентских сертификатов и файлов конфигурации
В этом разделе мы создадим сертификат клиента с использованием PKI CA, который мы создали на последнем шаге.
Обязательно замените ++
соответствующим образом (это не обязательно должно быть полное доменное имя). Имя клиента используется для идентификации машины, на которой работает клиент OpenVPN (например, «домашний ноутбук», «рабочий ноутбук», «nexus5» и т. Д.).
Инструмент + easyrsa +
запросит пароль CA. Это пароль, который мы установили выше во время команды + ovpn_initpki +
. Создайте сертификат клиента:
docker run --volumes-from --rm -it kylemanna/openvpn easyrsa build-client-full nopass
После того, как каждый клиент создан, сервер готов принимать соединения.
Клиентам нужны сертификаты и файл конфигурации для подключения. Встроенные сценарии автоматизируют эту задачу и позволяют пользователю записать конфигурацию в один файл, который затем может быть передан клиенту. Снова замените ++
соответствующим образом:
docker run --volumes-from --rm kylemanna/openvpn ovpn_getclient > .ovpn
Получающийся файл + .ovpn +
содержит закрытые ключи и сертификаты, необходимые для подключения к VPN. * Храните эти файлы в безопасности и не оставляйте их на месте. * Вам необходимо безопасно транспортировать файлы + *. Ovpn +
клиентам, которые будут их использовать. Избегайте использования общедоступных сервисов, таких как электронная почта или облачное хранилище, если это возможно, при передаче файлов из соображений безопасности.
Рекомендуются следующие способы передачи: карты ssh / scp, HTTPS, USB и microSD, если они доступны.
Шаг 5 - Настройка клиентов OpenVPN
Ниже приведены команды или операции, выполняемые на клиентах, которые будут подключаться к серверу OpenVPN, настроенному выше.
Дистрибутивы Ubuntu и Debian через собственный OpenVPN
В клиентах Ubuntu 12.04 / 14.04 и Debian wheezy / jessie (и аналогичных):
Установите OpenVPN:
sudo apt-get install openvpn
Скопируйте файл конфигурации клиента с сервера и установите безопасные разрешения:
sudo install -o root -m 400 .ovpn /etc/openvpn/.conf
Сконфигурируйте сценарии инициализации для автоматического запуска всех конфигураций, соответствующих + / etc / openvpn / *. Conf +
:
echo AUTOSTART=all | sudo tee -a /etc/default/openvpn
Перезапустите серверный процесс клиента OpenVPN:
sudo /etc/init.d/openvpn restart
Arch Linux через нативный OpenVPN
Установите OpenVPN:
pacman -Sy openvpn
Скопируйте файл конфигурации клиента с сервера и установите безопасные разрешения:
sudo install -o root -m 400 .ovpn /etc/openvpn/.conf
Запустите процесс сервера клиента OpenVPN:
systemctl start openvpn@
Необязательно: настройте systemd для запуска + / etc / openvpn / .conf +
при загрузке:
systemctl enable openvpn@
MacOS X через TunnelBlick
Загрузите и установите TunnelBlick.
Скопируйте + .ovpn +
с сервера на Mac.
Импортируйте конфигурацию, дважды щелкнув ранее скопированный файл + *. Ovpn +
. TunnelBlick будет вызван и импортировать конфигурацию.
Откройте TunnelBlick, выберите конфигурацию, а затем выберите * connect *.
Android через OpenVPN Connect
Установите OpenVPN Connect App из магазина Google Play.
Скопируйте + .ovpn +
с сервера на устройство Android безопасным способом. USB или microSD карты безопаснее. Поместите файл на SD-карту, чтобы облегчить его открытие.
Импорт конфигурации: * Меню * → * Импорт * → * Импорт профиля с SD-карты *
Выберите * подключить *.
Шаг 6 - Проверьте операцию
Есть несколько способов проверить, что трафик направляется через VPN.
Веб-браузер
Посетите веб-сайт, чтобы определить внешний IP-адрес. Внешний IP-адрес должен быть адресом сервера OpenVPN.
Попробуйте Google «что такое мой ip» или https://icanhazip.com [icanhazip.com].
Командная строка
Из командной строки пригодятся + wget +
или + curl +
. Пример с + curl +
:
curl icanhazip.com
Пример с + wget +
:
wget -qO - icanhazip.com
Ожидаемый ответ должен быть IP-адрес сервера OpenVPN.
Другой вариант - сделать специальный поиск DNS на специально настроенном DNS-сервере, просто для этой цели используя + host +
или + dig +
. Пример использования + host +
:
host -t A myip.opendns.com resolver1.opendns.com
Пример с + dig +
:
dig +short myip.opendns.com @resolver1.opendns.com
Ожидаемый ответ должен быть IP-адрес сервера OpenVPN.
Дополнительные вещи для проверки
Проверьте конфигурацию сетевого интерфейса. В операционных системах на основе Unix это так же просто, как запустить + ifconfig +
в терминале и искать интерфейс OpenVPN + tunX +
, когда он подключен.
Просмотрите логи. В системах Unix проверьте + / var / log +
в старых дистрибутивах или + journalctl +
в дистрибутивах systemd.
Заключение
Образ Docker, созданный для запуска этого приложения, имеет открытый исходный код и способен на гораздо большее, чем описано здесь.
Https://github.com/kylemanna/docker-openvpn[docker-openvpn исходный репозиторий] доступен для просмотра кода, а также для разветвления изменений. Запросы на извлечение общих функций или исправления ошибок приветствуются.
Дополнительные темы, такие как * резервное копирование * и * статические IP-адреса клиентов *, обсуждаются в папке docker-openvpn/docs.
Сообщайте об ошибках в docker-openvpn систему отслеживания проблем.