Comments 55
А есть ли какие-то планы по развитию в будущем или это на ваш взгляд уже полностью готовое решение?
А что необычного в запуске докера в докере? Это же обычная практика монтировать сокет докера с хоста внутрь контейнера? И запускай сколько угодно докеров "внутри".
openvpn --config /etc/openvpn/server.conf &
Какой "изумительный" способ запускать в докере службу. Пойдите почитайте пожалуйста best practice
Что ещё в комплекте накопал за 5 минут из неуказанного в других комментариях:
- Уже устаревший базовый образ из-за прибития к конкретной версии
- Работа исключительно в
--privileged
контейнере, вероятнее всего автор не знает как разруливать жизнь внутри network namespace - Худший entrypoint из всех возможных, бонусом генерация серверного ключа и правил в хостовый iptables запускаются при каждом старте контейнера
- Основной сетевой интерфейс хоста должен называться eth0 или не взлетит
- Крайне полезный build.sh с наличием
docker push
в Docker Hub (хотя бы без данных для аутентификации)
Туда же docker build
с --no-cache
docker build -t alekslitvinenk/openvpn:$NEW_UUID --no-cache .
- Версия 3.9.3 все еще доступна, хотя не рекламируется. На момент старта проекта — она была latest. Я специально отказался от использования тега latest чтобы собирать неизменяемые билды только с протестированными версиями.
- Флаг
необходим чтобы делать манипуляции с iptables. В трекере уже есть тикет на то чтобы отказатся от его использования по возможности.--privileged
- Можно пожалуйста больше подробностей, что не так с entrypoint? Генерация серверного ключа при запуске сделана для того чтобы не помещать ее в билдтайм. Проект задумывался как одноразовый VPN сервер, хотя сейчас я думаю как сделать его пригодным для повторного использования. Это все еще Work In Progress проект, но я дошел до стадии когда мне нужен фидбек от комьюнити чтобы все улучшить.
Основной сетевой интерфейс хоста должен называться eth0 или не взлетит
. Спасибо за баг репорт, буду исправлять, а пока добавлю дисклаймер в README.Крайне полезный build.sh с наличием docker push в Docker Hub (хотя бы без данных для аутентификации)
. Я думаю, что это действительно нужно убрать.
Для манипуляций нужен только CAP_NET_ADMIN. Внезапно, всех их можно крутить вообще без прямого участия хоста, создав докерную bridge сеть и поднимая tun0 внутри неё, правила для iptables будут выпиливаться вместе с контейнером.
В Dockerfile указать WORKDIR в место со скриптами, в качестве entrypoint можно использовать стандартную заглушку
exec "$@"
. Таким образом можно отдельной командой с хоста выполнять ваши скрипты и одновременно спокойно проваливаться внутрь через docker exec -it container_name bash
.Я писал с телефона, и перед сном, поэтому не расписал другие косяки. Крайне нечитаемый код из-за 100500 скриптов
нужно больше скриптов богу скриптов… зачем столько? Зачем аж целый скрипт из аж целой одной строчки?
Для генерирования uuid не надо заниматься самодеятельностью, все уже сделано за вас. Команда uuidgen из пакета uuid-runtime
pkgs.alpinelinux.org/packages?name=uuid-runtime&branch=edge
А вы пробовали замерять падение скорости по сравнению с прямым доступом на хост? Файлик там скачать.
Мало того, что openvpn выполняется в пространстве пользователя, вы ещё его в контейнер запихиваете.
Больше изоляции богу изоляции. Не говоря уже о том, что сам сервер в DO хостится на виртуалке. Но это уже не слишком критично, если там ядерная виртуализация.
Вставлю свои пять копеек. Написал как то небольшую инструкцию к этому образу. Вдруг кому-то окажется полезной — hmdw.me/openvpn-docker-new
Во-вторых, мне хотелось создать именно свой контейнер и набить на нем всевозможные шишки и глубоко понимать что происходит «под капотом».
О, да, kylemanna попробовал — прям палочка-выручалочка. Документация подробная и достаточная. Запускается без каких-либо проблем. Какое-то время даже (полу)продакшен на этом образе работал.
Есть уже https://github.com/StreisandEffect/streisand
В когда надост играться с тормознутым openvpn — обнаружите что существует
https://github.com/trailofbits/algo
Any phisical or vps server running Linux.
- phisical
+ physical
А возможно, лучше:
- phisical
+ hardware
bare metal же
Есть IPsec IKEv2, поддерживаемый нативно в Windows и iOS. Не нужны хлопоты с установкой сертификатов и конфигов на клиентские устройства, можно пользоваться сертификатом Let's Encrypt. Split tunnelling работает сразу.
Вот тут — github.com/jawj/IKEv2-setup — лежит скрипт, с помощью которого на пустой виртуалке в Хетцнере, DigitalOcean или AmazonAWS можно поднять VPN-сервер за 2 минуты. On вам сгенерирует mobileconfig для IOS и PowerShell-команду для Windows-клиента даже.
Я ещё понимаю ситуации, когда нужна гибкость OpenVPN — у меня, например, на работе его используют, поскольку к нему легко прикрутить аппаратные токены для 2FA. Но использовать софт из 2001 года в 2019-м для стандартного, в общем-то, сценария? Не понимаю.
OpenVPN — ставим приложение, распаковываем и ставим сертификаты, импортируем ovpn-файл. Чешем репу, когда соединение поднимается (секунд так несколько), а трафик в него почему-то не заворачивается. Ну нафиг.
Зачем OpenVPN? Во-первых, он малость устарел,
Поддержу оратора. Сам им пользовался. Но сейчас путь OpenVPN — в Вальхаллу. Откройте для себя openconnect + ocserv. Весьма зачётная вещь. Даже несмотря на то, что родом оно — из Cisco...
пожалуйста поставьте ему звездочку на ГитХабе, сделайте форк
ну лайк еще ладно, но форк зачем? YT-шные like & subscribe & press that bell button теперь и на GH?
ну так надо форки поддерживать в свежем состоянии тогда.
На докер хабе уже столько этих openvpn что потеряться можно
Вот ссылка на мой образ, если интересно hub.docker.com/r/alekslitvinenk/openvpn
hub.docker.com/r/zim32/openvpn
И зачем им обновляться если самому OpenVPN сто лет в обед и оно работает
Запускаем OpenVPN в Докере за 2 секунды