Uruchom OpenVPN w Dockerze w 2 sekundy

Witam mieszkańców Chabrowska! Czy zdarzyło Ci się kiedyś, że bardzo chciałeś przenieść się wirtualnie do innego miasta, kraju, kontynentu? Mam taką potrzebę dość często, więc możliwość posiadania własnego serwera VPN, który można uruchomić w dowolnym miejscu, w ciągu kilku sekund, była dość pilna.W tym artykule chcę opowiedzieć o moim projekcie, który wymyśliłem, gdy byłem szukam gotowego rozwiązania, w tym przypadku Dockera obrazu, który pozwoliłby szybko skonfigurować serwer OpenVPN, przy minimum ustawień i akceptowalnym poziomie bezpieczeństwa.

Uruchom OpenVPN w Dockerze w 2 sekundy

prehistoria

Możliwość uruchomienia usługi na dowolnym komputerze — czy to na serwerze fizycznym, czy na wirtualnym serwerze prywatnym, czy nawet w przestrzeni kontenerowej w innym systemie zarządzania kontenerami — była krytyczna. Mój wzrok natychmiast padł na Dockera. Po pierwsze, usługa ta zyskuje na popularności, dlatego coraz więcej dostawców udostępnia gotowe rozwiązania wraz z jej wstępną instalacją; po drugie, istnieje scentralizowane przechowywanie obrazów, z którego można pobrać i uruchomić usługę za pomocą jednego polecenia w terminalu. Przyszedł mi do głowy pomysł, że taki projekt powinien już istnieć i intensywnie szukałem. Jednak większość projektów, które znalazłem, była albo zbyt uciążliwa (trzeba było stworzyć kontener do stałego przechowywania danych i kilka razy uruchomić kontener z aplikacją z różnymi parametrami), albo pozbawiona rozsądnej dokumentacji, albo całkowicie porzucona. , zacząłem pracę nad Twoim projektem. Przed studiowaniem dokumentacji, pisaniem kodu i debugowaniem czekały nieprzespane noce, ale ostatecznie mój serwis ujrzał światło dzienne i zaczął mienić się wszystkimi kolorami monochromatycznego panelu LED routera. Proszę Cię więc o miłość i przychylność - Docker-OpenVPN. Wymyśliłem nawet logo (powyżej, przed cięciem), ale nie oceniajcie go rygorystycznie, bo projektantem (już) nie jestem. Realizując ten projekt za priorytet postawiłem sobie szybkość wdrożenia, min. ustawień i akceptowalnego poziomu bezpieczeństwa. Metodą prób i błędów znalazłem optymalną równowagę tych kryteriów, jednak w niektórych miejscach musiałem poświęcić szybkość wdrożenia na rzecz bezpieczeństwa, a za przenośność musiałem zapłacić minimum ustawień: w obecnej konfiguracji kontener raz utworzony na jednym serwerze nie może zostać przeniesiony i uruchomiony na innym. Na przykład wszystkie certyfikaty klienta i serwera są generowane podczas uruchamiania usługi, co zajmuje około 2 sekund. Jednakże wygenerowanie pliku Hellman Defi musiało zostać uwzględnione w czasie kompilacji: jest on tworzony podczas kompilacji obrazu okna dokowanego i może trwać do 10 minut. Bardzo chciałbym otrzymać audyt bezpieczeństwa takiego rozwiązania od szanowanej społeczności.

szalupa

Aby uruchomić usługę potrzebujemy kilku rzeczy:

  1. Serwer: fizyczny lub wirtualny. Teoretycznie możliwe jest działanie w trybie okna dokowanego w oknie dokowanym, ale nie testowałem szczegółowo tej opcji;
  2. Właściwie Docker. Wielu dostawców hostingu udostępnia gotowe rozwiązania z Dockerem na pokładzie;
  3. Publiczny adres IP.

Jeśli wszystkie szczegóły są już gotowe, wystarczy, że uruchomimy następującą komendę w konsoli Twojego serwera:

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

Uważny czytelnik mógł zauważyć, że adres IP serwera jest ustalany automatycznie za pomocą ipify.org. Jeśli z jakiegoś powodu to nie zadziała, możesz podać adres ręcznie.Jeśli wszystkie poprzednie kroki zostały wykonane poprawnie, to w konsoli powinniśmy zobaczyć coś podobnego:

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!

Jesteśmy blisko celu: teraz musimy skopiować example.com (w Twoim przypadku będzie to adres Twojego serwera) i wklej go w pasek adresu przeglądarki. Po naciśnięciu Enter plik client.ovpn zostanie pobrany, a sam serwer http odejdzie w zapomnienie. Jeśli masz wątpliwości co do tego rozwiązania, możesz zastosować następujący trik: uruchom poprzednie polecenie i dodaj flagi zp i hasło. Teraz, jeśli wkleisz wygenerowany link do okna przeglądarki, otrzymasz archiwum zip z hasłem.Po uzyskaniu pliku konfiguracyjnego klienta możesz używać dowolnego odpowiedniego klienta. Używam Tunnelblick na Maca.

Film instruktażowy

Ten samouczek wideo zawiera szczegółowe instrukcje dotyczące wdrażania usługi w DigitalOcean.

PS Jeśli uznasz ten projekt za przydatny, daj mu gwiazdkę na GitHubie, rozwidl go i powiedz znajomym. Współautorzy i audyty bezpieczeństwa są również powszechnie mile widziani.PPS Jeśli ten artykuł trafi na Habr, to planuję napisać kolejny o tym, jak uruchomiłem docker-in-docker i docker-in-docker-in-docker, dlaczego to zrobiłem i co z tego wyszło.
EDIT1:

  1. Poprawiono błędy w publikacji,
  2. W odpowiedzi na komentarze zdecydowałem się umieścić tę informację tutaj: do pracy z iptables potrzebna jest flaga —privileged

EDIT2:

  1. Ulepszono polecenie uruchamiania obrazu: teraz nie wymaga ono flagi –privileged
  2. Dodano link do przewodnika wideo w języku rosyjskim: youtu.be/A8zvrHsT9A0

Źródło: www.habr.com

Dodaj komentarz