Ostatnio potrzebowałem połączyć ze sobą dwie podsieci, w których znajdowały się dwa serwery działające pod kontrolą Windows Server 2008 R2.
Jako rozwiązanie wybrałem OpenVPN, głównie ze względu na:
- łatwość konfiguracji
- stosunkowo silne szyfrowanie
- łatwą i po części automatyczną konfigurację routingu – serwer VPN na możliwość przesłania gotowych tras do klienta
- odczuwalnie szybsze działanie – czysto subiektywne spostrzeżenie, nie przeprowadzałem testów, ale wrażenie jest takie, że OpenVPN działa po prostu szybciej niż PPTP
- OpenVPN sprawia mniej problemów przy przechodzeniu przez NAT i firewalle – to akurat w przypadku łącza site-to-site niekoniecznie ma znaczenie, natomiast w przyszłości planuję podłączanie road warriors i wtedy kwestia łatwego połączenia się z dowolnej sieci będzie dość istotna
W dalszej części wpisu prezentuję krok po kroku, w jaki sposób utworzyć tunel site-to-site oparty na OpenVPN.
Założenia
Na potrzeby tego przykładu zakładamy istnienie dwu podsieci, które chcemy połączyć:
- 192.168.80.0/24 – podsieć komputera, który będzie pełnił rolę serwera tuneli, z publicznym adresem tunnel.luktom.net
- 192.168.70.0/24 – podsieć komputera, który będzie pełnił rolę klienta tunelu
Sam tunel posiadał będzie adresy z podsieci 10.9.0.0/24.
W przyszłości planowane jest umożliwienie połączeń dla road warriors (stąd – poza celami edukacyjnymi – użycie certyfikatów).
Do dzieła
Przede wszystkim pobieramy instalator OpenVPN i instalujemy wszystkie potrzebne składniki, tak na komputerze serwera jak i klienta.
Ponieważ tunel ma być typu site-to-site i w przyszłości ma dodatkowo umożliwiać połączenia dla road warriors, w mojej opinii najwygodniej jest użyć certyfikatów (zamiast współdzielonego klucza). W tym celu odpalamy Wiersz polecenia i przechodzimy do katalogu, do którego zainstalowaliśmy oprogramowanie OpenVPN, a następnie przechodzimy do podkatalogu easy-rsa, aby wygenerować stosowne certyfikaty i klucze.
Przy domyślnej instalacji na systemie 64-bitowym do katalogu easy-rsa trafimy poleceniem:
cd "c:\Program Files (x86)\OpenVPN\easy-rsa"
Generowanie certyfikatów i kluczy
Będąc w tym katalogu przystępujemy do generowania certyfikatów i kluczy, wykonując serię komend:
init-config
Tutaj na chwilę się zatrzymam, ponieważ można bardzo ułatwić sobie pracę edytując w tym momencie plik vars.bat i wpisując w nim ustawienia wspólne dla wszystkich certyfikatów.
Po edycji pliku vars.bat wykonujemy kolejne polecenia:
vars clean-all build-ca build-key-server server build-key client build-dh
Ważne, aby prawidłowo określić common name dla serwera i klienta, gdyż od tego zależeć będzie nazwa pliku w następnym kroku.
Po wygenerowaniu kluczy należy skopiować w sposób bezpieczny pliki:
- Do podkatalogu config serwera – pliki ca.crt, server.crt, server.key i dh1024.pem
- Do podkatalogu config klienta – pliki ca.crt, client.crt i client.key
Po skopiowaniu tych plików można przejść do tworzenia plików konfiguracyjnych.
Konfiguracja serwera
W katalogu config serwera tworzymy plik server.ovpn o następującej treści:
# serwer ma działać na porcie TCP 1194 port 1194 proto tcp # stosujemy routing zamiast bridgingu (polecenie dev tun) dev tun # ustawienia certyfikatów ca ca.crt cart server.crt key server.key dh dh1024.pem # podsieć używana dla tunelu server 10.9.0.0 255.255.255.0 # aby druga końcówka automatycznie dostawała zawsze ten sam adres ifconfig-pool-persist ipp.txt # informacje o podsieciach podłączonych do serwera push "route 192.168.80.0 255.255.255.0" # informacje o podsieciach podłączonych do klienta tunelu client-config-dir ccd route 192.168.70.0 255.255.255.0 # ustawienia związane z podtrzymaniem tunelu i kompresją keepalive 10 120 comp-lzo # ustawienia tworzenia logów status openvpn-status.log verb 3
Następnie w katalogu config serwera tworzymy katalog ccd, w którym umieszczamy plik client (bez rozszerzenia) o następującej treści:
iroute 192.168.70.0 255.255.255.0
Konfiguracja klienta
W folderze config klienta tworzymy plik client.ovpn o następującej treści:
# ten komputer jest klientem client # ustawienia połączenia z serwerem dev tun proto tcp remote tunnel.luktom.net 1194 nobind # ustawienia certyfikatów ca ca.crt cert client.crt key client.key ns-cert-type server # ustawienia związane z podtrzymaniem tunelu i kompresją keepalive 10 120 comp-lzo # ustawienia tworzenia logów status openvpn-status.log verb 3
Testowanie
Po skopiowaniu certyfikatów i kluczy oraz stworzeniu plików konfiguracyjnych możemy przystąpić do przetestowania łączności w ramach tunelu.
W tym celu na serwerze klikamy prawym przyciskiem myszy na pliku server.ovpn i wybieramy polecenie Start OpenVPN on this config file. Wykonujemy analogiczną czynność na kliencie tunelu na pliku client.ovpn.
Polecenia te zestawią nam tunel między hostami, dodatkowo w konsoli możemy obserwować wszelkie komunikaty o ew. błędach.
Gdy tunel zostanie pomyślnie zestawiony sugeruję przetestowanie drożności np. przy użyciu polecenia ping.
Jeśli łączność w tunelu została nawiązana poprawnie możemy przejść do konfiguracji przekazywania pakietów.
Przekazywanie pakietów
Aby routing działał poprawnie należy na obu końcówkach tunelu uruchomić przekazywanie pakietów.
Można to zrobić poprzez instalację roli Routing i dostęp zdalny lub prościej – poprzez edycję rejestru. Ten drugi sposób opisałem w artykule Aktywacja routingu IP w Windows 7 / Windows Server 2008.
Trasy dla klientów w podsieciach
Aby przestawiona konfiguracja działała poprawnie i aby klienci w poszczególnych podsieciach mogli kontaktować się z drugą podsiecią musi być spełniony jeden z warunków:
- Muszą mieć ustawioną bramę domyślna na hosta obsługującego tunel lub
- Muszą mieć w tabelach routingu trasę do drugiej podsieci do której mogą się dostać poprzez hosta obsługującego tunel lub
- Na bramie domyślnej musi być skonfigurowana trasa do drugiej podsieci obsługiwanej przez hosta z tunelem
Należy dopilnować, aby jeden z warunków powyżej był spełniony, w przeciwnym wypadku łączność klientów z jednej podsieci do drugiej będzie niemożliwa do nawiązania.
OpenVPN jako usługa systemowa
OpenVPN pozwala na uruchamianie go jako usługa systemowa – co jest bardzo wygodnie z analizowanym przez nas przykładzie.
Wszystko, co trzeba zrobić, aby uruchomić OpenVPN w trybie usługi systemowej sprowadza się do uruchomienia przystawki Usługi (services.msc), znalezienia usługi OpenVPN Service i ustalenia jej trybu uruchamiania na Automatyczny.
Podsumowanie
Jak widać stworzenie tunelu site-to-site nie jest zbyt problematyczne. Przedstawiona we wpisie konfiguracja jest absolutną podstawą a sam OpenVPN posiada znacznie więcej opcji konfiguracyjnych, z którymi polecam się zapoznać czytając Dokumentację OpenVPN.
OpenVPN i problem z generacją klucza DH - luktom.net sty 09 , 2014 at 21:40 /
[…] zeszłym tygodniu otrzymałem maila w sprawie artykułu OpenVPN i tunel site-to-site na Windows Server 2008. Czytelnik miał problem z generacją klucza DH, objawiający się tym, że wywołanie skryptu […]