Połączenie VPN z routerem komórkowym Sparrow NW10

13.05.2021 How to / Komunikacja przemysłowa
Połączenie VPN z routerem komórkowym Sparrow NW10
Wizerunek autora
Producent: Elmatic
  • Zakłady przemysłowe

Wpis przeprowadzi Cię przez proces konfiguracji serwera OpenVPN na routerze LTE z serii Sparrow od Elmatic. 
Zapraszam do konfiguracji!

Wstęp

Sparrow NW10 to przemysłowy router LTE wyposażony w interfejsy Ethernet, RS-232, RS-485, 2 sloty na karty SIM i 2 złącza antenowe. Router posiada funkcję VPN, w tym wsparcie dla OpenVPN. Niewielkie wymiary urządzenia, metalowa obudowa i prosta konstrukcja sprawiają, że Sparrow NW10 jest solidnym i niezawodnym routerem dla rozwiązań przemysłowych.
Dzięki wsparciu OpenVPN, możemy skonfigurować połączenie pomiędzy sieciami LAN poprzez sieć komórkową. Funkcjonalność znajdzie zastosowanie wszędzie tam, gdy chcemy uzyskać zdalny i bezpieczny dostęp do sieci przemysłowej.

Sieć zostanie skonfigurowana według poniższego schematu:

schemar


Klient VPN (komputer oraz telefon), musi mieć dostęp do Internetu. Adresy wirtualne klienta/serwera zostaną przypisane automatycznie przy konfiguracji OpenVPN.

Instalacja OpenVPN

W pierwszej kolejności zajmiemy się instalacją oprogramowania na komputerze lokalnym z systemem Windows. Proces instalacji przebiega standardowo, przy czym podczas wyboru komponentów do instalacji, należy zaznaczyć pakiet EasyRSA 2 Certificate Management Scripts. Będziemy z niego korzystać, aby wygenerować certyfikat X.509.

Uwaga: Na dole wpisu dodaliśmy aktualizację na temat generowania certyfikatu z pomocą EasyRSA 3 :) Pliki certyfikatów nazwaliśmy inaczej, więc należy zwrócić na to uwagę w następnych krokach. Jeśli wygenerowałeś już wszytskie certyfikaty/klucze możesz przejść do tworzenia plików konfiguracyjnych
 

instalacja

Generowanie certyfikatu CA

Na czas generowania certyfikatu, warto zmienić uprawnienia dla katalogu, w którym zainstalowany jest OpenVPN. Częstym problem przy generowaniu certyfikatu są ograniczone uprawnienia dla katalogu instalacyjnego. Po zakończeniu procesu, przywróć domyślne uprawnienia użytkownika.

uprawnienia

Po instalacji OpenVPN, wraz z pakietem EasyRSA, zabieramy się do wygenerowanie certyfikatu X.509. Otwieramy wiersz poleceń (w roli administratora) i przechodzimy do folderu z zainstalowanym OpenVPN.

cli

Pakiet EasyRSA, który zainstalowaliśmy, działa w oparciu o platformę OpenSSL. Wykorzystanie poniższych instrukcji, pozwala na wygenerowanie certyfikatu CA (ang. Certificate Authority), certyfikatu serwera, klienta, kluczy oraz koniecznych zabezpieczeń.

Pierwszym krokiem, jest przygotowanie pliku vars.bat, w którym znajdują się parametry używane przy wywoływaniu kolejnych skryptów. Zaletą EasyRSA są gotowe skrypty, które przyśpieszają i automatyzują proces.

Przez konsolę uruchamiamy plik init-config.bat, który tworzy plik vars.bat (a dokładniej: skopiuje plik vars.bat.sample i zmieni jego nazwę na vars.bat):

init-bat

Następnie należy zmodyfikować plik vars.bat, uzupełniając odpowiednie parametry konfiguracji, takiej jak lokalizacja, nazwa organizacji itp.:

plik_vars

W pliku vars.bat można również zmienić długość klucza prywatnego lub klucza D-H (Diffie-Hellman), lecz w naszej konfiguracji pozostawiam te parametry bez zmian.
Po zapisaniu pliku, należy uruchomić go w konsoli.

run vars

Do utworzenia certyfikatu klienta i serwera potrzebny jest certyfikat organu certyfikującego (CA). 
Urząd certyfikujący jest jednostką poświadczającą tożsamość certyfikatów, które podpisują (w naszym przypadku, musimy podpisać certyfikat serwera i klienta). W sieciach publicznych, np. Internet, organy certyfikujące, poświadczają certyfikaty X.509, które zapewniają szyfrowanie TLS, kiedy korzystamy ze stron internetowych przez protokół HTTPs.
W naszej konfiguracji sami będziemy wystawiać certyfikat CA - na własne potrzeby – więc można uznać go za zaufany.

Uwaga: Najlepiej, aby certyfikat CA tworzyć na komputerze odłączonym od Internetu albo przynajmniej za firewallem, tak aby zminimalizować możliwość wykradnięcia certyfikatu.

W następnym kroku uruchamiamy plik clean-all.bat, który tworzy folder „keys” oraz pliki „index.txt” i „serial” (jeśli folder będzie utworzony wcześniej, zostanie automatycznie usunięty).

clean-all

Następnie generujemy certyfikat CA potwierdzając parametry, które wcześniej zdefiniowaliśmy w pliku vars. Domyślnie certyfikat generowany jest na 10 lat. Parametry certyfikatu można zmienić w pliku build-ca.bat.

build-ca

W folderze keys pojawił się certyfikat CA oraz klucz prywatny CA.

Uwaga:  parametr Common Name dla CA, serwera i klienta musi być różny, aby uniknąć błędu przy uwierzytelnieniu połączeń VPN.

Certyfikat Serwera

Aby wygenerować certyfikat dla serwera uruchamiamy plik build-key-server.bat z nazwą dla certyfikatu i klucza (w naszym przypadku server01) jako parametrem.

Podobnie jak w przypadku certyfikatu CA, domyślny okres ważności certyfikatu serwera wynosi 10 lat. Można go zmienić modyfikując wartość parametru "days" w skrypcie.
W trakcie generowania certyfikatu będziemy proszeni o potwierdzenie/wypełnienie parametrów, między innymi:

  • Common Name - należy podawać unikatową nazwę!
  • A challenge password - służy do zabezpieczenia żądania certyfikatu podczas wysyłki do podpisu w zewnętrznym centrum certyfikacji (my używamy swojego lokalnego, więc możemy pominąć),
  • An optional company name – pozostawiamy puste

Na koniec należy odpowiedzieć twierdząco zezwalając na podpisanie certyfikatu. Po wykonaniu skryptu, w folderze "keys", zostaną zapisane pliki server01.crt (certyfikat serwera) oraz server01.key (klucz prywatny serwera).

build-key-serwer

Teraz możemy wygenerować plik z parametrami algorytmu Diffiego-Hellmana.
W konsoli uruchamiamy skrypt build-dh.bat. Czas generowania klucza może zależeć od mocy obliczeniowej komputera.

build-dh

W katalogu „keys”, skrypt utworzył 2048 bitowy klucz dh2048.pem.

Certyfikat klienta

Sytuacja wygląda analogicznie jak w przypadku certyfikatu serwera.

build-key-client

Po wygenerowaniu wszystkich kluczy i certyfikatów, w katalogu „keys” powinniśmy znaleźć wszystkie potrzebne pliki.

keys

Na tym etapie, otrzymaliśmy certyfikat serwera i klienta podpisany certyfikatem CA.
Aby utworzyć klienta OpenVPN na naszym komputerze, należy przenieść certyfikat CA, certyfikat oraz klucz prywatny klienta do katalogu „config” w folderze OpenVPN.

Pliki konfiguracyjne

Następnym krokiem jest stworzenie plików konfiguracyjnych serwera i klienta, zgodnych ze standardem OpenVPN. W naszym przypadku, konfiguracji serwera dokonamy w Sparrow NW10, który przyjmie role serwera OpenVPN, dlatego przygotowujemy tylko plik konfiguracyjny klienta.  

client                     ## tryb serwer/klient
remote *.*.*.* 1194 ## publiczny adres IP serwera oraz nr portu, na której ustawiona jest usługa OpenVPN
dev tun ## tryb pracy TUN/TAP
proto udp ## protokół komunikacyjny TCP/UDP
resolv-retry infinite ## opcja ustawiająca ciągłe rozsztyganie/ustalanie nazwy hosta serwera OpenVPN
nobind ## nie otwiera portu po stronie klienta
persist-key ## podczas restartu nie będzie ponownie wczytywany klucz
persist-tun ## podczas restaru utrzymuje podniesiony wirtualny interfejs
ca ca.crt ## certyfikat CA - przy konfiguracji na telefon, najlepiej przekopiować klucz, jak poniżej
cert client01.crt ## nazwa pliku z certyfikatu klienta, najlepiej wstawić, jak poniżej
key client01.key ## nazwa pliku z kluczem prywatnym klienta
remote-cert-tls server ## dodatkowa weryfikacja certyfikatu
cipher AES-256-CBC ## ustawienie zalecanego algorytmu szyfrowania
## parametry muszą być identyczne w ustawianiach klienta i serwera
keepalive 20 60 ## wysyła ping co 20 sek. z timeout 60 sek.
comp-lzo ## algorytm kompresji, zmniejsza użycie transferu
verb 3 ## poziom szczegółowości logów

 

Plik zapisujemy z rozszerzeniem .ovpn i przenosimy do katalogu „config”. Folder „config” powinien zawierać pliki: 

config

Konfiguracja Sparrow NW10

Na początku należy upewnić się czy router ma dostęp do świata zewnętrznego poprzez sieć komórkową. Po włożeniu karty SIM i konfiguracji zakładki Link Management > Cellural, w zakładce Overview powinny pojawić się parametry sieciowe wraz z adresacją IP.

overview

Uwaga: Jeśli adresy sieci nie pojawią się, jedną z przyczyn mogą być ustawienia APN. W ustawieniach sieci komórkowej należy odznaczyć pole Auto APN i wpisać stały adres APN zgodny z siecią komórkową operatora.

Następnie przechodzimy do zakładki VPN > OpenVPN i dodajemy nową konfigurację OpenVPN. 
W General Settings określamy parametry konfiguracji:

config1

config2

Istotne parametry:

  • Mode: Server
  • Protocol: UDP
  • Connection Type: TUN, czyli tryb router
  • Max Clients: należy uzupełnić zależnie od zastosowania
  • Authentication Method: wybieramy X.509
  • Encryption Type: AES-256-CBC
  • Local IP address: określa lokalny adres IP serwera - możemy zostawić puste
  • Local Port: domyślnie 1194 (numer portu się zgadać z plikiem konfig. klienta)
  • Subnet: określa adresacji wirtualnej sieci VPN – możemy zostawić ją domyślnie.
  • Keepalive, Renegotiate: muszą się zagadać z plikiem konfig. Klienta
  • Private Key Password: hasło wpisane przy generowaniu certyfikatu serwera (zależnie od wersji EasyRSA "challange password" lub "Pass phrase")
  • Output Verbosity Level: poziom szczegółowości log’ów, zalecany 3 (musi się zagadać z plikiem konfig. Klienta)

W zakładce Advance Settings zaznaczamy Enable NAT oraz Enable Compression LZ0 (opcja pozawala na kompresje transmisji).

Poniżej, w zakładce Route Management, ustawiamy parametry routingu. W polu Route wpisujemy adres sieci LAN wraz z maską sieci po stronie klienta, natomiast w polu Push Route wpisujemy adres sieci LAN po stronie serwera.

config3

W zakładce Client Settings ustawiamy parametry klienta. W polu Internal Route wpisujemy adres sieci LAN od strony klienta, a w polu Push Route adres sieci LAN po stronie Serwera. Dodatkowo, uzupełniamy pole Common Name, a pozostałe pola mogą zostać puste.
Uwaga: W polu Common Name musimy wpisać nazwę klienta taką samą jak przy generowaniu certyfikatu klienta. Jeśli nazwa będzie się różnić, komunikaja zostanie nawiązana, lecz nie będzie działać poprawnie!

config4

W następnym kroku przechodzimy do zakładki X.509 Certificate i dodajemy certyfikat CA, certyfikat serwera, klucz prywatny serwera oraz klucz D-H. Po wybraniu plików wczytujemy je do konfiguracji Sparrow przez kliknięcie przycisków widocznych po prawej stronie. Po poprawnym wczytaniu plików widok powinien prezentować się następująco:

files

Uwaga: W następnej zakładce, Configuration File, możemy wczytać plik konfiguracyjny klienta (plik z rozszerzeniem .ovpn). W naszym przypadku, pozostawiamy tą zakładkę pustą (po załadowanie pliku konfiguracyjnego klienta, serwer VPN nie wystartuje).

Routing

Ostatnim krokiem jest sprawdzenie tablicy routing’u. Przechodzimy do zakładki Network > Route. Po poprawnej konfiguracji OpenVPN w tabeli powinny pojawić się 2 nowe pola:

routing

Oznacza to, że przekierowujemy wszystkie zapytania kierowane do sieci 192.168.3.0/24 na wirtualny adres klienta VPN (10.8.0.2). Natomiast zapytania kierowane do sieci wirtualnej 10.8.0.0/24 są przekierowywane na domyślny adres Gateway (w tym przypadku sieć komórkową).

Uwaga: Przed przystąpieniem do połączenia przez OpenVPN, upewnij się że data i godzina na stacji klienta jest taka sama jak na serwerze.

Po połączeniu przez OpenVPN, urządzenia z podsieci 192.168.5.0/24 są widoczne z sieci od strony klienta.

client_notification

W zakładce OpenVPN > Status można sprawdzić status połączenia od strony serwera.


client_status

Następnie testujemy czy hosty z sieci serwera są dostępne z sieci klienta.

ping

ping1

Uwaga: podczas ping’owania hostów z sieci lokalnej, upewnij się, że reguły firewall nie blokują zapytań ICMP! Jeśli firewall nie przepuszcza takich zapytań, ping’owanie hostów może okazać się niemożliwe, mimo poprawnie skonfigurowanego połączenia VPN.

Konfiguracja klienta OpenVPN na systemie Android

Pierwszym krokiem do utworzenia połączenia jest instalacja darmowej aplikacji OpenVPN na telefonie. Aplikacja jest do ściągnięcia ze Sklep Play/Huawei App Gallery.
Przed instalacją warto zapoznać się uprawnieniami, o które prosi aplikacja.

openvpn_play openvpn_play1

Następnym krokiem jest utworzenie pliku konfiguracyjnego klienta OpenVPN.
W pliku konfiguracyjnym na systemie Android, zalecam przekopiować certyfikaty CA, klienta i klucz prywatny do pliku konfiguracyjnego otwartym tekstem.

 

client                         ## tryb serwer/klient
remote 87.251.249.162 1194 ## publiczny adres IP serwera oraz nr portu, na której ustawiona jest usługa OpenVPN
dev tun ## tryb pracy TUN/TAP
proto udp ## protokół komunikacyjny TCP/UDP
resolv-retry infinite ## opcja ustawiająca ciągłe rozsztyganie/ustalanie nazwy hosta serwera OpenVPN
nobind ## nie otwiera portu po stronie klienta
persist-key ## podczas restartu nie będzie ponownie wczytywany klucz
persist-tun ## podczas restaru utrzymuje podniesiony wirtualny interfejs
<ca> ## certyfikat CA - przy konfiguracji na telefon, najlepiej przekopiować klucz, jak poniżej
-----BEGIN CERTIFICATE-----
MIIGrTCCBJ***
***/NQE371Qtmgc9pcFB4vEA3
-----END CERTIFICATE-----
</ca>
<cert> ## nazwa pliku z certyfikatu klienta, najlepiej wstawić, jak poniżej
-----BEGIN CERTIFICATE-----
MIIHDTCC***
***AidKr2eJsh3H
-----END CERTIFICATE-----
</cert>
<key> ## nazwa pliku z kluczem prywatnym klienta
-----BEGIN PRIVATE KEY-----
MIIJQwIBADAN***
***o32w9XpvHFx4+g=
-----END PRIVATE KEY-----
</key>
remote-cert-tls server ## dodatkowa weryfikacja certyfikatu
cipher AES-256-CBC ## ustawienie zalecanego algorytmu szyfrowania
## parametry muszą być identyczne w ustawianiach klienta i serwera
keepalive 20 60 ## wysyła ping co 20 sek. z timeout 60 sek.
comp-lzo ## algorytm kompresji, zmniejsza użycie transferu
verb 3 ## poziom szczegółowości logów

Po przeniesieniu pliku konfiguracyjnego z rozszerzeniem .ovpn na telefon, wczytujemy go w aplikacji OpenVPN. Przechodzimy do zakładki File i wczytujemy plik konfiguracyjny.

android1

 android2

 android3

Po nawiązaniu połączenia sprawdźmy zakładkę status na Sparrow NW10:

android_status

Uwaga: Przed przystąpieniem do połączenia OpenVPN, upewnij się że data i godzina jest taka sama na obu urządzeniach.

Po nawiązaniu komunikacji przez OpenVPN, urządzenia z podsieci 192.168.127.0/24 powinny być widoczne z poziomu telefonu.
Do sprawdzenia połączenia wykorzystano aplikację „Termux” (do ściągnięcia ze Sklepu Play), który pozwala otworzyć wiersz poleceń w systemie Android.
Używając polecenia ping sprawdzamy czy host jest osiągalny.

termux

*Aktualizacja 12.2021 - generowanie certyfikatów X.509 przy pomocy EasyRSA 3 (ver 3.0.8).

Trzecia wersja przynosi pewne zmiany, które dla Państwa wygody krótko opiszę w poniższym poradniku.

Cały proces przeprowadzimy na systemie Windows 10, a najnowszy soft EasyRSA można pobrać z oficjalnego repozytorium GitHub.

github

Po pobraniu paczki nie musimy niczego instalować, wystarczy jej rozpakowanie i skorzystanie z gotowych skryptów.

Uwaga: Folder najlepiej umieścić w lokalizacji, której ścieżka nie zawiera spacji! W przeciwnym wypadku pojawi się błąd, który nie został jeszcze poprawiony w tej wersji. Sugeruję umieszczenie folderu EasyRSA np. pod ścieżkę C:\EasyRSA-3.0.8.

Krok 1.
Przechodzimy do pliku vars gdzie możemy zdefiniować parametry naszej organizacji, widniejące później w certyfikatach.

vars

Krok 2.
Uruchamiamy plik EasyRSA-Start.
Na początek wpisujemy poniższą komendę, aby zacząć cały proces. 

./easyrsa init-pki

init-pki

Następnie generujemy certyfikat CA.

./easyrsa build-ca

Skrypt prosi nas o podanie Passphrase, czyli hasła do wygenerowania certyfikatu CA.
Uwaga: pamiętajmy, by hasło było silne.

build-ca

Po otrzymaniu certyfikatu CA pozostają nam 3 kwestie:

  • pliki serwera
  • pliki klienta
  • klucz D-H

Zaczynamy od wywołania certyfikatu serwera.

./easyrsa build-server-full server

Skrypt poprosi o ustawienie hasła do klucza serwera oraz CA.

server-ca

W identyczny sposób generujemy certyfikat klienta.

./easyrsa build-client-full client

client-cert

Na koniec – generujemy klucz D-H.

./easyrsa gen-dh

d-h

W tym momencie mamy wszystkie niezbędne pliki (znajdują się w folderze \pki oraz w \pki\issued i \pki\private):

  • ca.crt
  • server.crt
  • client.crt
  • server.key
  • client.key
  • dh.pem

Teraz możemy przejść do tworzenia plików konfiguracyjnych - zwróć uwagę na nazwy certyfikatów oraz kluczy ;) 

Podsumowanie

Podsumowując, powyższa konfiguracja pozwoliła nam na połączenie klient-serwer OpenVPN ze routerem komórkowym Sparrow NW10 w roli serwera. Dzięki takiemu połączeniu możemy zapewnić sobie zdalny dostęp do sieci lokalnej poprzez szyfrowany tunel VPN.

Z kwestii bezpieczeństwa, upewnij się, że:

  • domyślne hasło do konsoli webowej zostało zmienione
  • upewnij się, że certyfikaty CA, serwera, klienta, klucze prywatne są przechowywane w bezpiecznym miejscu, do którego nie mają dostępu niepowołane osoby
  • wyłączono możliwość zdalnego dostępu przez HTTP, oraz inne protokoły, których nie będziemy używać (zakładka Maintenance > System > Security)
  • ustawiono reguły firewall (jeśli konieczne)

Skontaktuj się ze specjalistą Elmark

Masz pytania? Potrzebujesz porady? Zadzwoń lub napisz do nas!