Запускаем OpenVPN у Докеры за 2 секунды

Прывітанне, хабраўчане! Ці сутыкаліся вы калі-небудзь з сітуацыяй, калі вельмі хацелася б віртуальна перанесціся ў іншы горад, краіну ці на іншы кантынент? У мяне такая неабходнасць узнікае досыць часта, таму магчымасць мець свой VPN сервер, які можна запусціць дзе заўгодна, за пару секунд, стаяў досыць востра. У гэтым артыкуле жадаю распавесці пра свой праект, які я задумаў калі шукаў гатовае рашэнне, у дадзеным выпадку докер выява, які бы дазволіў хутка падняць OpenVPN сервер, з мінімумам налад і прымальным узроўнем бяспекі.

Запускаем OpenVPN у Докеры за 2 секунды

перадгісторыя

Магчымасць запускаць сэрвіс на любой машыне: ці то фізічны сервер, ці віртуальны прыватны сервер, ці, зусім, кантэйнерная прастора ўнутры іншай сістэмы кіравання кантэйнерамі – была крытычна важнай. Мой погляд адразу ўпаў на Докер. Па-першае, гэты сэрвіс набірае папулярнасць, а такім чынам, усё больш і больш правайдэраў падаюць гатовыя рашэнні з яго перадусталёўкай; па-другое - ёсць цэнтралізаванае сховішча выяў, адкуль можна спампаваць і запусціць сэрвіс з дапамогай адной каманды ў тэрмінале. Думка, што падобны праект ужо павінен існаваць, наведвала мяне і я ўпарта шукаў. Але, большасць праектаў, якія я знаходзіў - былі або занадта грувасткімі (трэба было ствараць кантэйнер для пастаяннага захоўвання дадзеных і некалькі разоў запускаць кантэйнер з дадаткам з рознымі параметрамі), або без разумнай дакументацыі, або зусім закінутымі. Не знайшоўшы нічога прымальнага, я пачаў працу над сваім праектам. Наперадзе былі бяссонныя ночы вывучэння дакументацыі, напісанні кода і адладкі, але ў канчатковым рахунку мой сэрвіс убачыў святло і зайграў усімі колерамі манахромнай святлодыёднай панэлі роўтара. Такім чынам, прашу кахаць і дараваць Docker-OpenVPN. Я нават лагатып прыдумаў (вышэй, перад катом), але яго не судзіце строга, бо я не дызайнер (ужо). Калі я рэалізоўваў гэты праект, я ставіў у раздзел кута хуткасць разгортвання, мінімум налад і прымальны ўзровень бяспекі. Метадам спроб і памылак я знайшоў аптымальны баланс гэтых крытэраў, праўда, дзе-нідзе прыйшлося ахвяраваць хуткасцю разгортвання дзеля бяспекі, а за мінімум налад прыйшлося заплаціць партатыўнасцю: у бягучай канфігурацыі аднойчы створаны кантэйнер на адным серверы нельга перанесці і запусціць на іншы. Напрыклад, усе кліенцкія і серверныя сертыфікаты генеруюцца пры запуску сэрвісу і гэта займае каля 2 секунд. Аднак, генерацыю файла Дэфі Хеллмана прыйшлося вынесці ў білд-тайм: ён ствараецца падчас зборкі докер выявы і можа доўжыцца да 10 хвілін. Я б вельмі хацеў атрымаць аўдыт бяспекі падобнага рашэння ад шматпаважанай супольнасці.

запуск

Каб запусціць сэрвіс нам неабходныя некалькі рэчаў:

  1. Сервер: фізічны ці віртуальны. Тэарэтычна можна запускаць у рэжыме докер-у-докеру, але я не праводзіў маштабнага тэсціравання гэтай опцыі;
  2. Уласна Докер. Многія хостынг правайдэры падаюць гатовыя рашэнні з Докерам "на борце";
  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 і пароль. Цяпер, калі вы ўставіце згенераваную спасылку ў акно браўзэра - вы атрымаеце ЗІП архіў з паролем. Калі ў вас ёсць файл з кліенцкай канфігурацыяй, можна выкарыстоўваць любы прыдатны кліент. Я выкарыстоўваю Tunnelblick для Мака.

Відэа тутарыял

Дадзены відэа тутарыял змяшчае падрабязную інструкцыю па разгортванні сэрвісу на DigitalOcean.

PS Калі вы лічыце дадзены праект карысным, то калі ласка пастаўце яму зорачку на ГітХабе, зрабіце форк і раскажыце сябрам. Кантрыбутары і аўдыт бяспекі таксама шырока вітаюцца.PPS Калі гэты артыкул патрапіць на Хабр, то я планую напісаць наступную пра тое як я запускаў докер-у-докеры і докер-у-докеры-у-докеры, для чаго я гэта рабіў і што з гэтага выйшла.
EDIT1:

  1. Выправіў памылкі ў публікацыі,
  2. Адказваючы на ​​каментары вырашыў вынесці гэтую інфармацыю сюды: сцяг - privileged патрэбен для працы з iptables

EDIT2:

  1. Палепшыў каманду запуску выявы: цяпер ён не патрабуе сцяг.
  2. Дадаў спасылку на расейскамоўнае відэа кіраўніцтва: youtu.be/A8zvrHsT9A0

Крыніца: habr.com

Дадаць каментар