#mikr.us Własny serwer OpenVPN

Co to jest i po co mi to?

Oprogramowanie o otwartym kodzie źródłowym umożliwiające tworzenie bezpiecznych połączeń pomiędzy urządzeniami w sieci. Te połączenia to tunele, w których płyną zaszyfrowane dane za pośrednictwem Internetu, a całość tworzy wirtualną sieć prywatną, czyli VPN. Co to daje? Możesz uzyskać dostęp do swoich prywatnych zasobów umieszczonych na dowolnym komputerze bez udostępniania go publicznie w sieci. Zasoby te to np.:

  • panel zarządzający systemem automatyki domowej (np. Domoticz czy HomeAssistant)
  • dysk z sieci domowej
  • drukarka
  • domowy serwer Minecrafta
  • domowy serwer DNS
  • i wiele, wiele więcej 🙂

Brzmi świetnie? To teraz co będziesz potrzebował:

  • serwer, na którym skonfigurujesz usługę – w tym tutorialu zaprezentuję Mikrus’a
  • ten serwer musi mieć przynajmniej jeden otwarty port i (najlepiej) stałe IP
  • chwilkę wolnego czasu i cierpliwość 🙂

Przygotowanie mikr.us’a

Jeżeli korzystasz z innego serwera niż mikr.us – pomiń ten krok. Zanim w ogóle zabierzemy się za jakąkolwiek instalację, musimy wyklikać drobne zmiany w panelu konfiguracyjnym. W tym celu zaloguj się do niego https://mikr.us/panel/.

W panelu po lewej stronie wybierz opcję TUN/TAP.

I wciśnij przycisk „Włącz TUN/TAP”. Co to da? W ten sposób włączysz zaawansowane reguły firewalla wymagane przez OpenVPN, które domyślnie są wyłączone dla zwykłych śmiertelników 🙂

Teraz musisz ustalić port dla swojego serwera. OpenVPN działa domyślnie na porcie 1194, którego niestety, nie możesz wykorzystać. Mikr.us to serwery współdzielone na jednej maszynie, przez co jesteś ograniczony do dwóch portów. Od niedawna możesz bezpłatnie poprosić o jeszcze kilka dodatkowych, więc nie stanowi to żadnego problemu. Porty możesz podejrzeć wybierając z bocznego menu „Porty TCP”.

Tutaj musisz podjąć małą decyzję. Zakładam, że wiesz, czym się różni protokół TCP od UDP. W skrócie – w przypadku tego pierwszego każdy pakiet musi zostać dostarczony i musi to być potwierdzone przez odbiorcę. W przypadku niepowodzenia następuje automatyczna retransmisja. Zyskujemy pewność dostarczenia informacji, tracimy elastyczność i prędkość. Ciekawie prezentuje to poniższy mem.

TCP/IP vs UDP | Programmer humor, Programmer jokes, Programming humor

Standardowo, OpenVPN działa na protokole UDP. Dlaczego? Bo jest szybszy. Prędkość przekazywania pakietów TCP jest w dużej mierze zależna od odległości geograficznej oraz faktu, że muszą one krążyć w dwie strony -otrzymanie każdego pakietu musi być potwierdzone. Przy małych odległościach nie ma to większego znaczenia. Przyjęło się więc, że dla połączeń VPN powinno się używać szybszego protokołu UDP, chyba że wystąpią problemy z połączeniem. Dlatego na mikrusie zalecam użycie jednego z domyślnie przypisanych portów, bo tylko dla nich można ustawić ten protokół. Jeżeli jednak masz już oba wykorzystane, to cóż, pozostaje Ci dodanie nowego portu i korzystanie z TCP.

Konfiguracja serwera OpenVPN

Skorzystamy z gotowego skryptu openvpn-install z repozytorium https://github.com/Angristan/OpenVPN-install. Dlaczego akurat ten? Bo szczyci się najczęstszą aktualizacją i wsparciem społeczności. Po drugie, oficjalnie obsługuje Ubuntu 16.04, które nadal występuje na starych mikrusach v3. A dlaczego skrypt, a nie ręczna konfiguracja? Bo ręcznie jest trudniej, a zależy mi na prostocie tego poradnika.

Zaloguj się przez do konsoli serwera, pobierz skrypt i nadaj mu uprawnienia do wykonywania.

curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
sudo chmod +x openvpn-install.sh

Teraz go wykonaj.

sudo ./openvpn-install.sh

Skrypt zada kilka pytań konfiguracyjnych. Wszystkie są dobrze opisane, ponadto, opiszę je tutaj. Niestety, jest ryzyko, że w kolejnej wersji skryptu będą one wyglądać trochę inaczej. Jeżeli tak się stanie i nie będziesz rozumiał, o co chodzi, napisz proszę komentarz, a ja postaram się wtedy zaktualizować poradnik.

Pytanie 1 – podaj zewnętrzny adres IPv4. Skrypt wykrywa adres wewnętrzny. Musimy podać więc adres serwera, a najlepiej domenę (w razie gdyby zmienił się adres serwera, problem nie będzie nas dotyczył). Podaj więc srv03.mikr.us (jeżeli jesteś na serwerze innym niż 03, to koniecznie podaj swoją nazwę serwera). Jeżeli korzystasz z innego dostawcy niż mikrus, musisz sam zdobyć swój zewnętrzny adres IP.

Pytanie 2 – skrypt sprawdzi, czy mamy dostępne połączenie IPv6. Osobiście uważam, że warto je skonfigurować, jeżeli tylko jest dostępne. Jeżeli nie masz tej możliwości, to skrypt pominie ten krok.

Pytanie 3 – pytanie o port. Omówiłem to wcześniej. Dla mikrusa wybierz opcję 2) żeby podać port ręcznie, a następnie podaj wybrany wcześniej port. jeżeli nie używasz mikrusa, pozostaw port domyślny, chyba że twój operator go zablokował (niektórzy operatorzy blokują połączenia VPN).

Pytanie 4 – protokół UDP czy TCP. Odpowiedź na to pytanie również omówiłem wcześniej. Polecam wybranie UDP, chyba że jest niedostępny lub powoduje problemy z jakością połączenia.

Pytanie 4 – jaki domyślny serwer DNS ma być używany po nawiązaniu połączenia? Już tłumaczę. Serwer DNS służy do rozwiązywania adresu domenowego na adresy IP serwerów. Po połączeniu się z serwerem OpenVPN zostanie on ustawiony jako główny. Jego niepodanie spowoduje, że nie będą działały żadne strony internetowe, do których będziemy chcieli się łączyć po domenie. Możesz wskazać obecny serwer, z którego korzysta mikrus, lub wybrać inny. Możesz także hostować swój własny lub wskazać jakiś z domyślnym blokowaniem serwerów reklam i phishingowych. jeżeli nie wiesz co wybrać, polecam wybrać OpenDNS lub AdGuard.

Pytanie 5 – czy chcesz użyć kompresji? Zysk – sprawniejszy transfer, minus – podatność na atak VORACLE. Zalecam bezpieczniejszą opcję, czyli nie używać.

Pytanie 6 – czy chcesz sam skonfigurować ustawienia zabezpieczeń? Polecam się za to nie brać, domyślne ustawienia są optymalne. Nie są wybrane te słabe, ani te panicznie bezpieczne, które zbędnie obciążają system.

Koniec! Wciśnij dowolny klawisz, aby zakończyć konfigurację. Skrypt teraz dokona konfiguracji na podstawie Twoich preferencji. Po ukończeniu generacji będziesz mógł wygenerować pierwszy certyfikat. Wciśnij dowolny klawisz i podaj nazwę.

Dodawanie i usuwanie certyfikatów

Aby dodać lub usunąć certyfikat, wykonaj ponownie skrypt.

sudo ./openvpn-install.sh

Jeżeli chcesz dodać nowy certyfikat, wybierz 1 i podaj jego nazwę, Analogicznie, jeżeli chcesz go usunąć, wybierz 2 i podaj nazwę.

Certyfikaty pojawią się w katalogu domowym użytkownika, o czym poinformuje Cię skrypt po stworzeniu certyfikatu.

Podstawowa konfiguracja

Chcemy wprowadzić kilka ustawień. Celem tego poradnika nie jest przekierowanie całego ruchu internetowego przez serwer (ale oczywiście możesz to zrobić!), ale rozszerzenie sieci o dodatkowe urządzenia z zewnątrz. W tym celu dodajmy nowe ustawienia. Wpierw otwórz plik konfiguracyjny serwera:

sudo nano /etc/openvpn/server.conf

I dodaj poniższe ustawienia na końcu pliku. Postarałem się je opisać tak, aby były zrozumiałe. Znak średnika pełni tutaj rolę komentarza, więc możesz skopiować poniższy kod razem z opisem. Zarządzanie klientami będzie opisane w dalszej części tego poradnika.

;żeby siebie widzieli klienci
client-to-client
;żeby udostępnić tylko określoną pulę adresów
route-nopull 
route 10.8.0.0 255.255.255.0
;odblokowanie zarządzania klientami
;management 0.0.0.0 5555

Zapisz plik kombinacją CTRL+X. Zrestartuj serwer OpenVPN.

sudo systemctl restart [email protected]

I u mnie pojawiał się w tym miejscu problem. Nie można było zrestartować serwisu, a w logach zapisało się „Failed to connect to bus: No such file or directory„. Nie wiem, czym jest to spowodowane. Możliwe, że problem występuje tylko na mikrusie.

Rozwiązanie jest na szczęście banalne – musisz zwiększyć limit procesora. W tym celu otwórz do edycji plik serwisu OpenVPN.

sudo nano /lib/systemd/system/[email protected]

Następnie odnajdź linijkę.

LimitNPROC=10

I zamień ją na następującą.

LimitNPROC=infinity

Całość powinna wyglądać jak na poniższym screenie.

Teraz musisz wyjść z pliku, zapisując zmiany kombinacją CTRL+X i potwierdzić, a następnie przeładować serwisy i zrestartować OpenVPN następującymi komendami.

sudo systemctl daemon-reload
sudo systemctl restart [email protected]

Połączenie z Windowsa

Pobierz najnowszą wersję klienta OpenVPN ze strony producenta. Przejdź więc tutaj i odnajdź najnowszą wersję pliku openvpn-install-X-Win10.exe (zobacz na poniższym zrzucie). W momencie pisania poradnika najnowsza to openvpn-install-2.4.9-I601-Win10.exe. Ściągnij ją i zainstaluj. Instalator zainstaluje prosty program, serwis działający w tle i doda go do autostartu systemu.

Program domyślnie przechowuje konfigurację w folderze C:\Users\%username%\OpenVPN\config\. Wejdź do tego folderu, dodaj nowy folder, np. mikrus, a wewnątrz niego wklej certyfikat wygenerowany w akapicie „Dodawanie i usuwanie certyfikatów”. Do pobierania plików z mikrusa polecam program WinSCP. Następnie uruchom program OpenVPN GUI – powinien się teraz pojawić w zasobniku systemowym. Kliknij na jego ikonę (w zaswobniku systemowym) prawym przyciskiem myszy i wskaż swoją konfigurację i wciśnij „Połącz”. To tyle, od teraz masz dostęp do sieci VPN.

Aby przetestować poprawność działania, połącz się z mikrusem za pomocą nowej sieci. W tym celu w programie Putty podaj adres 10.8.0.1 i port 22, a loginu i hasła użyj tego samego.

Połączenie z Linuxa

Otwórz konsolę na swoim urządzeniu z systemem Linux. Ja w tym celu skorzystam z mojego domowego Raspberry Pi. Następnie zainstaluj klienta OpenVPN.

sudo apt-get update
sudo apt-get install openvpn

Następnie skopiuj wygenerowany wcześniej certyfikat do „/etc/openvpn/” i zmień jego nazwę na „client.conf”. W tym celu najłatwiej jest użyć WinSCP. Ewentualnie, z poziomu konsoli, przejdź do katalogu, utwórz plik, wklej zawartość certyfikatu, zapisz kombinacją CTRL+X i potwierdź. Zwróć uwagę, żeby zawartość pliku skopiowała się identycznie – mi domyślnie wskoczyło justowanie tekstu, z którym połączenie nie zostanie nawiązane!

cd /etc/openvpn
sudo nano client.conf

Następnie aktywuj i uruchom serwis OpenVPN.

sudo systemctl enable [email protected]
sudo service openvpn@client start

Sprawdź, czy wszystko uruchomiło się poprawnie.

sudo service openvpn@client status

Powinieneś zobaczyć coś podobnego do screena poniżej.

Domyślne nawiązywanie połączenia z Raspberry

Aby połączenie było uruchamiane przy starcie Raspberry, musisz dokonać małej zmiany w konfiguracji. Otwórz plik konfiguracyjny pakietu openvpn na urządzeniu Raspberry.

sudo nano /etc/default/openvpn

Następnie dodaj wpis tak do konfiguracji poniższy wpis, tak jak na zrzucie.

AUTOSTART="client"

Zamiast tego możesz też odkomentować wpis AUTOSTART="all", aby wszystkie połączenia OpenVPN były nawiązywane automatycznie.

Pamiętaj o zrestartowaniu serwisu OpenVPN.

sudo service openvpn@client restart