Стартираме OpenVPN в Docker за 2 секунди

Здравейте, хабровци! Случвало ли ви се е да искате да се пренесете виртуално в друг град, страна или континент? За мен това желание възниква доста често, затова възможността да имам свой VPN сървър, който мога да стартирам навсякъде за секунди, беше критично важна. В тази статия искам да разкажа за своя проект, който създадох, когато търсех готово решение — докер образ, който да позволи бързо разгръщане на OpenVPN сървър с минимални настройки и приемливи нива на сигурност.

Стартираме OpenVPN в Docker за 2 секунди

Предистория

Възможността да стартирам услугата на всяка машина: било то физически сървър, виртуален частен сървър или дори контейнерно пространство в друга контейнерна система за управление, беше жизненоважна. Погледът ми веднага падна върху Docker. Първо, тази услуга набира популярност, а следователно все повече доставчици предлагат готови решения с предварителна инсталация; второ — има централизирано хранилище на образи, от което можете да изтеглите и стартирате услугата с една команда в терминала. Имах чувството, че подобен проект вече трябва да съществува, и упорито търсех. Но повечето проекти, които намерих, бяха или твърде обемисти (трябваше да създавам контейнер за постоянно съхранение на данни и няколко пъти да стартирам контейнера с приложението с различни параметри), или без разумна документация, или напълно забравени. Не намерив нищо приемливо, започнах работа върху своя проект. Предстоеше ми безсънна нощ на изучаване на документацията, писане на код и отстраняване на грешки, но в крайна сметка моят сървър видя бял свят и заигра с всички цветове на монохромната светодиодна панел на рутера. И така, моля, добре дошли — Docker-OpenVPN. Дори измислих лого (вгоре, преди резюмето), но не го съдете строго, защото вече не съм дизайнер. Когато реализирах този проект, поставих акцент върху скоростта на разгръщане, минимум настройки и приемливо ниво на сигурност. Чрез проби и грешки открих оптимален баланс на тези критерии, въпреки че на места трябваше да жертвам скоростта на разгръщането за сметка на сигурността, а за минималните настройки заплатих с преносимост: в текущата конфигурация веднъж създаден контейнер на един сервер не може да бъде пренесен и стартиран на друг. Например, всички клиентски и сървърни сертификати се генерират при стартиране на услугата и това отнема около 2 секунди. Въпреки това, генерирането на файла на Дифи Хелман трябваше да бъде изнесено в времето на билд: той се създава по време на изграждането на Docker образа и може да трае до 10 минути. Бих искал много да получа проверка на сигурността на подобно решение от уважаваното ни общество.

Стартиране

За да стартираме услугата, са ни необходими няколко неща:

  1. Сървър: физически или виртуален. Теоретично е възможно да се стартира в режим Docker в Docker, но не провеждах мащабно тестване на тази опция;
  2. Собствено Docker. Много хостинг доставчици предлагат готови решения с Docker „на борда“;
  3. Публичен IP адрес.

Ако всичките реквизити са на мястото си, то следва да стартираме следната команда в конзолата на вашия сървър:

docker run --cap-add=NET_ADMIN 
-it -p 1194:1194/udp -p 80:8080/tcp 
-e HOST_ADDR=$(curl -s https://api.ipify.org) 
alekslitvinenk/openvpn

Внимателният читател може да е забелязал, че IP адресът на сървъра се определя автоматично с помощта на ipify.org. Ако по някакви причини това не работи, адресът може да се зададе ръчно. Ако всичките предишни стъпки са изпълнени правилно, то трябва да видим нещо подобно в конзолата:

Sun Jun  9 08:56:11 2019 Инициализационната последователност е завършена
Sun Jun  9 08:56:12 2019 Файлът Client.ovpn е генериран
Sun Jun  9 08:56:12 2019 Сървърът е стартиран, можете да изтеглите своя клиент.ovpn конфигурация на http://example.com/
Sun Jun  9 08:56:12 2019 ЗАБЕЛЕЖКА: След изтеглянето на конфигурацията на клиента, HTTP сървърът ще бъде затворен!

Наближаваме целта: сега трябва да копираме example.com (във вашия случай ще е адресът на вашия сървър) и го поставете в адресната лента на браузъра. След като натиснете Enter, файлът client.ovpn ще бъде изтеглен, а самият http сървър ще се изпари. Ако това решение ви създава съмнения, можете да използвате следния трик: стартирайте предишната команда и добавете флаговете zp и паролата. Сега, ако поставите генерирания линк в прозореца на браузъра — ще получите zip архив с паролата. Когато имате файл с клиентска конфигурация, можете да използвате всеки подходящ клиент. Аз използвам Tunnelblick за Mac.

Видео урок

Този видео урок съдържа подробна инструкция за внедряване на услугата в DigitalOcean.

Пуснете видеото
P.S. Ако смятате, че този проект е полезен, моля, дайте му звездичка в GitHub, направете fork и разкажете на приятелите си. Контрибутори и аудит на безопасността също са добре дошли.P.P.S. Ако тази статия попадне в Хабр, планирам да напиша следващата за това как стартирах docker-in-docker и docker-in-docker-in-docker, за какво го направих и какво стана.
EDIT1:
  1. Поправих грешките в публикацията,
  2. Отговаряйки на коментарите, реших да изнеса тази информация тук: флагът —privileged е необходим за работа с iptables

EDIT2:

  1. Подобрих командата за стартиране на образа: сега не изисква флаг —privileged
  2. Добавих линк към руски видео наръчник: youtu.be/A8zvrHsT9A0

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster