Здравейте, хабровци! Стал ли сте някога пред ситуация, в която искате да се пренесете виртуално в друг град, страна или континент? Аз често имам такава нужда, затова необходимостта от мой собствен VPN сървър, който мога да стартирам навсякъде за секунди, ми се виждаше достатъчно важна. В тази статия искам да ви разкажа за проекта си, който замислих, когато търсех готово решение – в случая Docker образ, който бързо да създаде OpenVPN сървър с минимум настройки и приемливо ниво на сигурност.
Предистория
Възможността да стартирам услугата на всяка машина: независимо дали става дума за физически сървър, виртуален частен сървър или просто контейнерно пространство в друга система за управление на контейнери – беше критично важна. Веднага насочих погледа си към Docker. На първо място, тази услуга набира популярност и следователно все повече и повече доставчици предлагат готови решения с предварителната му инсталация; на второ място, има централизирано хранилище на образи, откъдето можете да изтеглите и стартирате услугата с една команда в терминала. Мисълта, че подобен проект вече трябва да съществува, ме минаваше през ума и упорито търсех. Но повечето проекти, които намерих, бяха или твърде сложни (нужно беше да се създаде контейнер за постоянно съхранение на данни и няколко пъти да се стартира контейнер с приложението с различни параметри), или без смислена документация, или изобщо оставени на произвола на съдбата. Не намерил нищо приемливо, започнах работа по своя проект. Предстоят безсъни нощи на изучаване на документацията, писане на код и отстраняване на грешки, но в крайна сметка моят сървър видя светлината и заблестя с всички цветове на монохромната LED панел на рутера. И така, моля, запознайте се с него — . Създадох дори лого (горе, преди кат), но не го съдете строго, защото не съм дизайнер (вече). Когато реализирах този проект, поставих на преден план скоростта на развиване, минимум настройки и приемливо ниво на безопасност. С метода на пробите и грешките намерих оптимален баланс между тези критерии, макар че на някои места се наложи да жертвам скоростта на развиване за сметка на безопасността, а за минимума настройки платих с портативността: в текущата конфигурация веднъж създаденият контейнер на един сървър не може да бъде пренесен и стартиран на друг. Например, всички клиентски и сървърни сертификати се генерират при стартиране на услугата и това отнема около 2 секунди. Въпреки това, генерирането на файла Дифи-Хелман трябваше да бъде изнесено в момент на изграждане: той се създава по време на сборката на Docker образа и може да отнеме до 10 минути. Бих искал много да получа одит за безопасност на подобно решение от уважаваното общество.
Стартирането
За да стартираме услугата, ни трябват няколко неща:
- Сървър: физически или виртуален. Теоретично може да се стартира в режим Docker-в-Docker, но не съм провеждал мащабно тестване на тази опция;
- Собствено Docker. Много хостинг доставчици предлагат готови решения с Docker «на борда»;
- Публичен 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 Конфиг сървърът стартира, изтеглете вашата конфигурация client.ovpn на http://example.com/
Sun Jun 9 08:56:12 2019 ЗАБЕЛЕЖКА: След като изтеглите конфигурацията на клиента, HTTP сървърът ще бъде спрен!Близки сме до целта: сега трябва да копираме (във вашия случай това ще бъде адресът на вашия сървър) и го поставете в адресната лента на браузъра. След като натиснете Enter, файлът client.ovpn ще бъде свален, а самият http сървър ще изчезне. Ако това решение ви съмнява, можете да използвате следния трик: стартирайте предишната команда и добавете флаговете zp и парола. Сега, ако поставите генерираната връзка в прозореца на браузъра, ще получите zip архив с паролата. Когато имате файл с клиентска конфигурация, можете да използвате всеки подходящ клиент. Аз използвам Tunnelblick за Mac.
Видео урок
Този видео урок съдържа подробна инструкция за разгръщане на услугата в DigitalOcean.

EDIT1:
- Поправих грешките в публикацията,
- Отговаряйки на коментарите, реших да изнеса тази информация тук: флаг —privileged е необходим за работа с iptables
EDIT2:
- Подобрих командата за стартиране на образа: сега не изисква флаг —privileged
- Добавих връзка към рускоязично видео ръководство:
Източник: habr.com
