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.
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.
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.
Proces generowania zaczynamy od wykonania skryptu init-config.bat
. Przygotuje nam on plik vars.bat, który musimy wedytować odpowiednio do naszych potrzeb.
Zmieniamy w nim następujące linie:
na
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
Kolejny krok to wygenerowanie klucz i certyfikatu dla serwera OpenVPN za pomocą skryptu build-key-server.bat server
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.
Następnie generujemy klucz Diffiego-Hellmana build-dh.bat
.
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.
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
.
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).
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—–
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.
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.
cześć, zaraz na początku artykułu jest obrazek który wygasł
http://losiakit.pl/wp-content/uploads/2015/02/ddvpn6.jpg
proszę o naprawienie lub przesłanie obrazka na maila.
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.
Dziękuje za szybką reakcję, dziś go spróbuje postawić na WR1043 V2.1 i dam znać
Ok, powodzenia. Na najnowszym DD-WRT (r25697) to testujesz?
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)
nie wiem co robie zle server.crt jest pusty.