Прывітанне, хабраўчане! Ці сутыкаліся вы калі-небудзь з сітуацыяй, калі вельмі хацелася б віртуальна перанесціся ў іншы горад, краіну ці на іншы кантынент? У мяне такая неабходнасць узнікае досыць часта, таму магчымасць мець свой VPN сервер, які можна запусціць дзе заўгодна, за пару секунд, стаяў досыць востра. У гэтым артыкуле жадаю распавесці пра свой праект, які я задумаў калі шукаў гатовае рашэнне, у дадзеным выпадку докер выява, які б дазволіў хутка падняць OpenVPN сервер, з мінімумам налад і прымальным узроўнем бяспекі.
перадгісторыя
Магчымасць запускаць сэрвіс на любой машыне: ці то фізічны сервер, ці віртуальны прыватны сервер, ці, зусім, кантэйнерная прастора ўнутры іншай сістэмы кіравання кантэйнерамі – была крытычна важнай. Мой погляд адразу ўпаў на Докер. Па-першае, гэты сэрвіс набірае папулярнасць, а такім чынам, усё больш і больш правайдэраў падаюць гатовыя рашэнні з яго перадусталёўкай; па-другое - ёсць цэнтралізаванае сховішча выяў, адкуль можна спампаваць і запусціць сэрвіс з дапамогай адной каманды ў тэрмінале. Думка, што падобны праект ужо павінен існаваць, наведвала мяне і я ўпарта шукаў. Але, большасць праектаў, якія я знаходзіў - былі або занадта грувасткімі (трэба было ствараць кантэйнер для пастаяннага захоўвання дадзеных і некалькі разоў запускаць кантэйнер з дадаткам з рознымі параметрамі), або без разумнай дакументацыі, або зусім закінутымі. Не знайшоўшы нічога прымальнага, я пачаў працу над сваім праектам. Наперадзе былі бяссонныя ночы вывучэння дакументацыі, напісанні кода і адладкі, але ў канчатковым рахунку мой сэрвіс убачыў святло і зайграў усімі колерамі манахромнай святлодыёднай панэлі роўтара. Такім чынам, прашу кахаць і дараваць . Я нават лагатып прыдумаў (вышэй, перад катом), але яго не судзіце строга, бо я не дызайнер (ужо). Калі я рэалізоўваў гэты праект, я ставіў у раздзел кута хуткасць разгортвання, мінімум налад і прымальны ўзровень бяспекі. Метадам спроб і памылак я знайшоў аптымальны баланс гэтых крытэраў, праўда, дзе-нідзе прыйшлося ахвяраваць хуткасцю разгортвання дзеля бяспекі, а за мінімум налад прыйшлося заплаціць партатыўнасцю: у бягучай канфігурацыі аднойчы створаны кантэйнер на адным серверы нельга перанесці і запусціць на іншы. Напрыклад, усе кліенцкія і серверныя сертыфікаты генеруюцца пры запуску сэрвісу і гэта займае каля 2 секунд. Аднак, генерацыю файла Дэфі Хеллмана прыйшлося вынесці ў білд-тайм: ён ствараецца падчас зборкі докер выявы і можа доўжыцца да 10 хвілін. Я б вельмі хацеў атрымаць аўдыт бяспекі падобнага рашэння ад шматпаважанай супольнасці.
запуск
Каб запусціць сэрвіс нам неабходныя некалькі рэчаў:
- Сервер: фізічны ці віртуальны. Тэарэтычна можна запускаць у рэжыме докер-у-докеру, але я не праводзіў маштабнага тэсціравання гэтай опцыі;
- Уласна Докер. Многія хостынг правайдэры падаюць гатовыя рашэнні з Докерам "на борце";
- Публічны 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!Мы блізкія да мэты: зараз нам трэба скапіяваць (у вашым выпадку будзе адрас вашага сервера) і ўставіць у адрасны радок браўзэра. Пасля таго як вы націснеце Enter, client.ovpn файл будзе запампаваны, а сам http сервер сыдзе ў нябыт. Калі дадзенае рашэнне выкліча сумненне, то можна скарыстацца наступным трукам: запусціць папярэднюю каманду і дадаць сцягі zp і пароль. Цяпер, калі вы ўставіце згенераваную спасылку ў акно браўзэра - вы атрымаеце ЗІП архіў з паролем. Калі ў вас ёсць файл з кліенцкай канфігурацыяй, можна выкарыстоўваць любы прыдатны кліент. Я выкарыстоўваю Tunnelblick для Мака.
Відэа тутарыял
Дадзены відэа тутарыял змяшчае падрабязную інструкцыю па разгортванні сэрвісу на DigitalOcean.

EDIT1:
- Выправіў памылкі ў публікацыі,
- Адказваючы на каментары вырашыў вынесці гэтую інфармацыю сюды: сцяг - privileged патрэбен для працы з iptables
EDIT2:
- Палепшыў каманду запуску выявы: цяпер ён не патрабуе сцяг.
- Дадаў спасылку на расейскамоўнае відэа кіраўніцтва:
Крыніца: habr.com
