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

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

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

праистория

Способността да се изпълнява услуга на всяка машина - било то физически сървър, или виртуален частен сървър, или дори контейнерно пространство в друга система за управление на контейнери - беше от решаващо значение. Очите ми веднага се спряха на Докър. Първо, тази услуга набира популярност и следователно все повече доставчици предоставят готови решения с предварителна инсталация; второ, има централизирано хранилище на изображения, откъдето можете да изтеглите и стартирате услугата с една команда в терминала. Мисълта, че такъв проект вече трябва да съществува, ме посети и потърсих усилено. Но повечето от проектите, които открих, бяха или твърде тромави (необходимо беше да се създаде контейнер за постоянно съхранение на данни и да се стартира контейнерът с приложението няколко пъти с различни параметри), или без разумна документация, или напълно изоставени. нищо приемливо, започнах работа по вашия проект. Предстояха безсънни нощи на изучаване на документация, писане на код и отстраняване на грешки, но в крайна сметка моята услуга видя бял свят и игра с всички цветове на монохромния LED панел на рутера. И така, моля ви да обичате и благоволите - докер-openvpn. Дори измислих лого (по-горе, преди изрязването), но не го съдете строго, защото не съм дизайнер (вече). Когато реализирах този проект, поставих скорост на внедряване, минимум настройки и приемливо ниво на сигурност в челните редици. Чрез проба и грешка намерих оптималния баланс на тези критерии, но на някои места трябваше да пожертвам скоростта на внедряване в името на сигурността и преносимостта трябваше да бъде платена за минимум настройки: в текущата конфигурация, веднъж създадена контейнер на един сървър не може да бъде прехвърлен и стартиран на друг. Например, всички клиентски и сървърни сертификати се генерират при стартиране на услугата и това отнема около 2 секунди. Генерирането на файла Defi Hellman обаче трябваше да бъде преместено във времето за изграждане: то се създава по време на изграждането на докер изображението и може да отнеме до 10 минути. Наистина бих искал да получа одит на сигурността на такова решение от високо уважавана общност.

хвърлям

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

  1. Сървър: физически или виртуален. Теоретично е възможно да се изпълнява в режим докер в докер, но не съм правил задълбочено тестване на тази опция;
  2. Всъщност Докер. Много хостинг доставчици предоставят готови решения с 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 Initialization Sequence Completed
Sun Jun  9 08:56:12 2019 Client.ovpn file has been generated
Sun Jun  9 08:56:12 2019 Config server started, download your client.ovpn config at http://example.com/
Sun Jun  9 08:56:12 2019 NOTE: After you download you client config, http server will be shut down!

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

Видео урок

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

PS Ако намирате този проект за полезен, моля, дайте му звезда в GitHub, разклонете го и кажете на приятелите си. Сътрудниците и одитите на сигурността също са широко приветствани.PPS Ако тази статия попадне в Habr, тогава планирам да напиша следващата за това как стартирах docker-in-docker и docker-in-docker-in-docker, защо го направих и какво се получи от това.
EDIT1:

  1. Коригирани грешки при публикуване
  2. В отговор на коментарите реших да поставя тази информация тук: флагът --privileged е необходим за работа с iptables

EDIT2:

  1. Подобрена е командата за стартиране на изображение: сега тя не изисква флага --privileged
  2. Добавена е връзка към видео ръководството на руски език: youtube.be/A8zvrHsT9A0

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

Добавяне на нов коментар