Serwer OpenVPN w oparciu o DD-WRT i router TP-Link TL-WR1043ND

Do przygotowania tego tekstu zainspirowały mnie dwa artykuły: VPN on dd-wrt with TP-LINK TL-WR1043ND oraz How to setup an OpenVPN server? no i oczywiście potrzeba zestawienia tunelu OpenVPN na TP-Link TL-WR1043ND.

Administratorzy sieci, serwerów lub systemów informatycznych wiedzą jak ważną rzeczą jest zapewnienie sobie zdalnego dostępu do zasobów firmowych. W przypadku awarii (oczywiście przy założeniu, ze nie jest to awaria łącza, bramki dostępowej czy serwera VPN) możliwość zdalnego połączenia znacznie skraca czas potrzebny na jej zdiagnozowanie i usunięcie. Samo połączenie powinno być stabilne i bezpieczne. Stabilność zapewnia dobre łącze a o bezpieczeństwo połączenia musimy zadbać we własnym zakresie. Z pomocą przychodzi nam tutaj technologia VPN (tu więcej o Virtual Private Network ) pozwalająca zestawić szyfrowany tunel pomiędzy miejscem gdzie się znajdujemy a siecią docelową.
Biorąc pod uwagę, że nie każda firma, ze względu na jej wielkość i zasoby informatyczne może (lub musi) pozwolić sobie na oddzielne maszyny będące routerem, firewallem czy serwerem VPN, w tym artykule postaram się opisać konfiguracje serwera OpenVPN w oparciu o TP-Link WR1043ND.

1. Wybór i przygotowanie routera.

TP-Link WR1043ND – mały, tani i stabilny a przy odpowiednich modyfikacjach oferujący całkiem spore możliwości sprzęt. Pozwala wgrać alternatywne oprogramowanie (DD-WRT, OpenWRT) zwiększające pole do popisu administratora sieci. Pomijając inne dane techniczne warto zwrócić uwagę na pojemność pamięci Flash, która wynosi 8 MB – to akurat pozwala uruchomić serwer OpenVPN. W modelach niższych (np TP-Link WR941ND) posiadających 4MB pamięci FLASH, VPN możemy zestawić tylko w oparciu o prostszy i mniej bezpieczny protokół PPTP (opcja serwera OpenVPN w nich nie występuje).
Na dzień dzisiejszy (listopad 2013) oprogramowanie DD-WRT działa tylko z routerami TP-Link WR1043ND w rewizji sprzętowej 1.x
UWAGA: Zmianę oprogramowania wykonujecie na własną odpowiedzialność. Nieumiejętne przeprowadzenie procesu flashowania może nieodwracalnie zepsuć wasz router.
Przygotowanie routera zaczynamy od wgrania oprogramowania DD-WRT. Firmware ściągamy stąd : http://www.dd-wrt.com/site/support/router-database. Na dzień dzisiejszy proponowaną wersją jest DD-WRT v24PreSP2 b.21061 – nie jest ona do końca poprawna, nie ma w niej min. profili sieci WiFi dla Polski. Dlatego proponuje wejść w sekcje Other downloads, znaleźć najnowszy build dla naszego rutera (w chwili pisania artykułu to build 22118) i wtedy zadecydować, którą wersje zainstalujemy. W opisie oparłem się na wersji b. 22118.

http://losiakit.pl/wp-content/uploads/2015/02/ddvpn1.jpg

Zmianę oprogramowania na routerze zawsze poprzedzamy przywróceniem go do ustawień domyślnych. Możemy postąpić zgodnie z zasadą 30-30-30 – czyli przytrzymujemy przycisk reset przez 90 sek. odpowiednio przy routerze włączonym-wyłączonym-właczonym. W praktyce te czasy spokojnie możemy skrócić. Wchodzimy na panel www routera i przechodzimy do zakładki System Tools > Firmware Upgrade wskazujemy ściągnięty plik factory-to-ddwrt.bin naciskamy przycisk Upgrade. Po kilkudziesięciu sekundach mamy zainstalowane DD-WRT.

http://losiakit.pl/wp-content/uploads/2015/02/ddvpn2.jpg

2. Generowanie certyfikatów

Certyfikaty urzędu certyfikacji (CA), serwera openVPN i użytkownika oraz klucze służące do szyfrowania ruchu generujemy za pomocą pakietu OpenVPN dostępnego tu http://openvpn.net/index.php/open-source/downloads.html. Oprogramowanie to posłuży nam jeszcze do zestawienia połączenia między naszą stacją a serwerem VPN. Instalujemy cały pakiet – włącznie z narzędziami SSL – są one potrzebne do wygenerowania certyfikatów i kluczy.

http://losiakit.pl/wp-content/uploads/2015/02/ddvpn3.jpg

Proces generowania zaczynamy od wykonania skryptu init-config.bat. Przygotuje nam on plik vars.bat, który musimy wedytować odpowiednio do naszych potrzeb.

http://losiakit.pl/wp-content/uploads/2015/02/ddvpn4.jpg

Zmieniamy w nim następujące linie:

http://losiakit.pl/wp-content/uploads/2015/02/ddvpn5.jpg
na

http://losiakit.pl/wp-content/uploads/2015/08/ddvpn6.jpg

Następnie wykonujemy skrypty vars.bat, clean-all.bat i build-ca.bat. Podczas generowania klucza i certyfikatu CA będziemy poproszeni o podanie odpowiedzi na kilka pytań – wszystkie zdefiniowaliśmy uprzednio w pliku vars.bat wiec pozostaje nam tylko klikać na Enter. Wszystkie nowe pliki zapisują się w ścieżce \..\OpenVPN\easy-rsa\keys
http://losiakit.pl/wp-content/uploads/2015/02/ddvpn7.jpg
Kolejny krok to wygenerowanie klucz i certyfikatu dla serwera OpenVPN za pomocą skryptu
build-key-server.bat server
http://losiakit.pl/wp-content/uploads/2015/02/ddvpn8.jpg
Parametr tego skryptu czyli „server” może być dowolnym wyrazem – będą to nazwy plików z kluczem i certyfikatem dla serwera.
Oprócz pytań jak w poprzednim skrypcie zostaną nam zadane dwa dodatkowe, na które musimy odpowiedzieć twierdząco.
http://losiakit.pl/wp-content/uploads/2015/02/ddvpn9.jpg
Następnie generujemy klucz Diffiego-Hellmana build-dh.bat.
http://losiakit.pl/wp-content/uploads/2015/02/ddvpn10.jpg
Ostatnią czynnością będzie wygenerowanie certyfikatu klienta – czyli osoby, która będzie się łączyła do serwera VPN. Oczywiście dla każdego klienta przygotowujemy oddzielny zestaw certyfikatów i kluczy. Pliki te generujemy wydając polecenie build-key.bat klient1.
W trakcie procesu zostaną na zadane pytania jak poprzednio. Klikamy na enter na wszystkie oprócz commnonName i emailAddress. Te pola muszą być unikalne dla każdego klienta. Na pytania o podpis certyfikatów odpowiadamy twierdząco.
http://losiakit.pl/wp-content/uploads/2015/02/ddvpn11.jpg
Aby dodatkowo wzmocnić bezpieczeństwo transmisji wygenerujemy klucz potrzebny do uwierzytelniania TLS. Dodaje on dodatkową sygnaturę HMAC do wszystkich pakietów SSL/TLS. Klucz ten generujemy na routerze.
Aby wygenerować klucz ta.key logujemy sie na ruter via SSH, i wydajemy polecenie openvpn --genkey --secret ta.key. Aby go podejrzeć (i docelowo skopiować do pliku) wydajemy polecenie cat ta.key.
http://losiakit.pl/wp-content/uploads/2015/02/ddvpn12.jpg

3. Konfiguracja serwera OpenVPN na routerze.

Uługę OpenVPN na routerze włacamy w sekcji Services > VPN. Opcje uruchoimieniowe odpowiadają wielu roznym scenariuszom pracy. W niniejszym artykule opcje przekazywania DHCP zdefiniowalem tak aby klieci OpenVPNa mieli swój zakres IP (nie kolidujący z DHCP wewnątrz LAN) będący częścią adresacji wewnętrznej sieci LAN. Jest to zgodne z tzw dobrymi praktykami. Oczywiście można ustawić to inaczej (odpowiedzialną za to jest opcja DHCP-Proxy mode).
http://losiakit.pl/wp-content/uploads/2015/02/ddvpn13.jpg
W pola Public Server Cert, CA Cert, Private Server Key, DH PEM i TLS Auth Key wpisujemy odpowiednio zawartość plików: server.crt, ca.crt, server.key, dh1024.pem i ta.key.
Wartości Wpisujemy bez nagłówków czyli tylko linie pomiędzy —–BEGIN PRIVATE KEY—– —–END PRIVATE KEY—–
http://losiakit.pl/wp-content/uploads/2015/02/ddvpn14.jpg
UWAGA: Na routerze musi byc ustawiona poprawna data. Inaczej serwer VPN będzie odrzucał połączenia.

4. Konfiguracja klienta

Mając zainstalowany pakiet OpenVPN wchodzimy do katalogu \..\Program Files\OpenVPN\config i tworzymy folder o nazwie takiej, jaka chcemy dla naszego połączenia (w niniejszym artykule Router1). W tym folderze umieszczamy wcześniej wygenerowane pliki: ca.crt, klient1.key, klient1.crt, ta.key oraz tworzymy plik konfiguracyjny połączenia Router1.ovpn z następującymi wpisami.
http://losiakit.pl/wp-content/uploads/2015/02/ddvpn15.jpg
Pole [IP_Servera] zastępujemy adresem IP naszego serwera VPN.

W celu inicjacji połączenia uruchamiamy (pierwsze uruchomienie jako Administrator) program OpenVPN GUI. Doda to jego ikonę w Zasobniku Systemowym. Klikając na nią prawym klawiszem myszki wybieramy połączenie Router1 i klikamy Connect. Po chwili połączenie zostaje zainicjowane i ikona zmieni kolor na zielony. Weryfikację uzyskania adresu IP z sieci LAN i poprawność połączenia przeprowadzamy za pomocą poleceń ipconfig i ping.

5 komentarzy

    1. Faktycznie gdzieś go wcięło przy zmianie serwera. Teraz już jest ok. Znaczenie linii jest zrozumiałe? Podawany w pliku adres e-mali jest takim, powiedzmy, ogólnym adresem (np działu IT). Przy generowaniu certyfikatów dla poszczególnych klientów, trzeba podawać dla każdego z nich niepowtarzalny adres e-mail. CN to dowolna nazwa np. serwera VPN.

  1. Wszystko skonfigurowałem jak podano wyżej (od siebie włączyłem w routerze DNS z no-IP.com) ale niestety nie działa:

    Wed Aug 14 13:11:03 2019 WARNING: –ns-cert-type is DEPRECATED. Use –remote-cert-tls instead.
    Wed Aug 14 13:11:03 2019 MANAGEMENT: >STATE:1565781063,RESOLVE,,,,,,
    Wed Aug 14 13:11:03 2019 TCP/UDP: Preserving recently used remote address: [AF_INET]176.102.188.51:1194
    Wed Aug 14 13:11:03 2019 Socket Buffers: R=[65536->65536] S=[65536->65536]
    Wed Aug 14 13:11:03 2019 UDP link local: (not bound)
    Wed Aug 14 13:11:03 2019 UDP link remote: [AF_INET]176.102.188.51:1194
    Wed Aug 14 13:11:03 2019 MANAGEMENT: >STATE:1565781063,WAIT,,,,,,
    Wed Aug 14 13:12:03 2019 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
    Wed Aug 14 13:12:03 2019 TLS Error: TLS handshake failed
    Wed Aug 14 13:12:03 2019 SIGUSR1[soft,tls-error] received, process restarting
    Wed Aug 14 13:12:03 2019 MANAGEMENT: >STATE:1565781123,RECONNECTING,tls-error,,,,,
    Wed Aug 14 13:12:03 2019 Restart pause, 5 second(s)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *