VPN point-to-site w Azure

8 Mar

Trochę czasu minęło od ostatniego wpisu – uczyłem się do kolejnych egzaminów MS (tym razem do certyfikatu MCSA: Windows Server 2012). Teraz jak już jestem po egzaminie chciałbym pokazać jak utworzyć połączenie VPN point-to-site między komputerem a Azure’m. Scenariuszy wykorzystania takiego połączenia jest wiele, w każdym razie po zestawieniu VPN’a będziemy mieli dwustronną łączność między maszynami wirtualnymi w chmurze a dowolnymi komputerami, które są podłączone do Internetu i mają oczywiście zainstalowanego klienta do połączenia. Ale zanim do tego dojdzie trzeba przejść poniższą ścieżkę niezbędnej konfiguracji.

Utworzenie nowej sieci wirtualnej w Azure i połączenia point-to-site

Zacznijmy od zadeklarowania następujących stałych (a może zmiennych?), których będziemy używać przy wykonywaniu poszczególnych komend Powershell. Dzięki temu będziemy mogli korzystać z nich zamiast z długich zapisów adresacji sieci, itp. UWAGA: Nazwa podsieci GatewaySubnet musi się tak nazywać w przeciwnym razie VPN nie zadziała!

Teraz możemy przejść do zasadniczej części całego przedsięwzięcia. Stwórzmy nową grupę zasobów:

Następnie utwórzmy podsieci dla nowej sieci wirtualnej. W tym momencie przydadzą się stałe, które zadeklarowaliśmy na samym początku. Musimy utworzyć jeden subnet dla podsieci default oraz jeden dla GatewaySubnet:

Podsieci możesz utworzyć tyle ile chcesz, pamiętając by była chociaż jedna ogólna – w której będziemy tworzyć maszyny wirtualne i jedna dla GatewaySubnet – w której będą znajdować się klienci łączący się do VPN. Jeśli jednak chcesz mieć więcej podsieci np. jedną dla serwerów Windows i drugą dla Linuxa nic nie stoi na przeszkodzie.

W nowej grupie zasobów tworzymy nową sieć wirtualną przy wykorzystaniu podsieci, które utworzyliśmy we wcześniejszym kroku.

W odpowiedzi powinniśmy dostać obszerną informację że sieć wraz z podsieciami została utworzona. O tym fakcie świadczyć będą wpisy (w moim przypadku były trzy – jeden dla sieci wirtualnej i dwa dla podsieci default oraz GatewaySubnet):

Teraz jakbyśmy zalogowali się do portalu Azure zobaczylibyśmy nową grupę zasobów VPNTestRG zawierającą jeden zasób w postaci sieci wirtualnej P2SVnet o podsieciach:

  • default: 192.168.1.0/24
  • GatewaySubnet 192.168.100.0/26

Zmapujmy konfigurację nowo utworzonej sieci wirtualnej i podsieci GatewaySubnet do zmiennych:

Następnie tworzymy konfigurację publicznego adresu IP dla podsieci GatewaySubnet. Bez tego brama VPN nie będzie działać.

W tym momencie w portalu Azure możemy zobaczyć nowy zasób GWIP w grupie VPNTestRg. Tu będzie przechowywany publiczny adres IP dla bramy VPNa.

Żeby móc łączyć stacje klienckie do tworzonego VPNa potrzebny będzie certyfikat którym będziemy uwierzytelniać połączenie. Aby utworzyć certyfikat można wykorzystać narzędzie makecert.exe – jeśli korzystasz z Visual Studio to powinno być dostępne po uruchomieniu linii komend Visual Studio, ewentualnie makecert.exe jest częścią pakietu Windows Software Development Kit (SDK):

Ponieważ mam już u siebie zainstalowane Visual Studio, odpalam Developer Command Prompt i wydaję polecenie:

Certyfikat utworzy się w miejscu z którego wykonywaliśmy powyższą komendę np. na dysku C. Teraz trzeba otworzyć plik certyfikatu, przejść do zakładki Details i wybrać Copy to File…

p2sVPNcert

Następnie wybieramy Base-64 encoded X.509 (.CER). Wybieramy ścieżkę zapisu i klikamy Finish. Teraz otwieramy nowo zapisany plik (u mnie P2SVPNRootCert.cer) edytorem tekstu i kopiujemy wszystko pomiędzy —–BEGIN CERTIFICATE—– a —–END CERTIFICATE——

cert copy

Cały ten string możemy sobie zachować dla ułatwienia w zmiennej w Powershell. Uwaga: string po otwarciu w notatniku jest oddzielony znakami końca linii więc trzeba go przekopiować i wyedytować tak aby całość zawierała się w jednej linijce.

Teraz wypadałoby w końcu wgrać nasz root certificate do Azure’a. Robimy to poprzez komendę NewAzureRmVpnClientRootCertificate. UWAGA: po parametrze -Name podajemy nazwę pliku z którego kopiowaliśmy powyższy string.

Mając certyfikat tworzymy wirtualną bramę jako GatewayType podając Vpn i jako VpnType podając RouteBased.

Może się chwilę zejść więc masz czas na kawę/herbatę/co tam chcesz 😉 Na koniec w każdym razie Powershell wypluje obszerną informację zawierającą dane nowej bramy, a w grupie zasobów w portalu Azure obok zasobów sieci wirtualnej i publicznego adresu IP powinien pojawić się nowy zasób wirtualnej bramy sieciowej. Tak to wygląda u mnie:

vpntestrg overview

Konfiguracja klienta do połączenia z VPN Azure

Teraz pozostało nam ściągnąć klienta do połączeń VPN z nowo utworzoną grupą zasobów. Służy do tego komenda Get-AzureRmVpnClientPackage, która generuje link do pobrania paczki konfiguracyjnej na komputer o danej architekturze. Korzystam z kompa z procesorem x64 dlatego u mnie komenda wygląda następująco:

Dla systemów 32bitowych należy zamiast „Amd64” podać „x86”.

Tak czy inaczej w odpowiedzi powinniśmy dostać link, który należy skopiować i po prostu wkleić w przeglądarkę. Ściągnie się plik .exe, który instalujemy. Doda on połączenie VPN w połączeniach sieciowych PCta, ale zanim z niego skorzystamy musimy jeszcze wygenerować i zainstalować u siebie certyfikat klienta do uwierzytelnienia połączenia.

Do wygenerowania certyfikatu klienta z linii komend wystarczy odpalić poniższą komendę zastępując P2SVPNRootCertificate nazwą certyfikatu root którą użyliśmy przy jego tworzeniu. W moim przypadku komenda będzie wyglądać następująco (P2SVPNClientCertificate to nazwa nowo tworzonego certyfikatu klienta):

Teraz po uruchomieniu certmgr.exe z linii komend w kontenerze Personal – Certificates powinien pojawić się certyfikat P2SVPNClientCertificate. Klikamy na nim prawym przyciskiem i wybieramy All Tasks – Export…

export cert

W kreatorze zaznaczamy opcję Yes, export the private key, i przechodzimy dalej zostawiając wartości domyślne. W pewnym momencie trzeba będzie podać hasło do zabezpieczenia certyfikatu i ścieżkę zapisu. Po zakończeniu pracy z kreatorem mamy gotowy certyfikat pfx, który musimy zainstalować na wszystkich komputerach, które będą łączyć się VPNem do Azure’a.

Łączmy się!

Jeśli mamy już zainstalowany certyfikat kliencki oraz paczkę konfiguracyjną do łączenia się z naszą siecią wirtualną w Azure możemy już nawiązać połączenie. W tym celu wchodzimy w listę dostępnych połączeń sieciowych i wybieramy połączenie o nazwie utworzonej sieci wirtualnej. Klikamy Connect.

P2SVNet vpn connection

Jeśli dostaniemy powiadomienie o konieczności uruchomienia połączenia w trybie administratora klikamy Continue. Dalej z listy wybieramy certyfikat kliencki, który zainstalowaliśmy wcześniej i klikamy OK.

select cert p2svpn

I już połączenie powinno hulać 🙂

connection status p2svpn

Możemy to jeszcze sobie sprawdzić wpisując w linii komend ipconfig /all. Na liście konfiguracji adapterów powinno pojawić się miedzy innymi coś w stylu:

Jak widać dostaliśmy adres IP z puli adresów klientów VPN, które określiliśmy sobie na samym początku w Powershell pod stałą $VPNClientAddressPool.

Gratulacje! 🙂

Teraz możesz tworzyć maszyny wirtualne korzystające z tej skonfigurowanej do połączeń VPN grupy zasobów i mieć z nimi bezpośrednie połączenie ze swojego komputera. W ramach ćwiczeń możesz spróbować utworzyć VPN point-to-site dla już istniejącej grupy zasobów, która np. zawiera już jakieś maszyny wirtualne. Powodzenia!

Dodaj komentarz