Laboratorium 2: Sieci wirtualne. OpenVPV

Wprowadzenie

Bardzo często istnieje potrzeba połączenia zdalnego komputera (lub zdalnej sieci) do firmowej sieci lokalnej. Dobrym rozwiązaniem może być wydzierżawienie łącza telekomunikacyjnego i połączenie obu sieci (dołączenie zdalnego komputera do sieci lokalnej). Wydaje się jednak, że jest to dosyć nieracjonalne w sytuacji gdy (praktycznie) wszyscy mają dostęp do Internetu. Oprócz tego, dostawca łącza może łatwo uzyskać (albo udostępnić) dostęp do ruchu na łączu.

Z drugiej strony powstaje problem jak udostępniać zasoby sieci lokalnej tylko wybranym (być może podróżującym po świecie) użytkownikom i zapewnić wystarczającą prywatność (stanowiącą podstawę prowadzenia biznesu).

W ten sposób powstała idea VPN (Virtual Private Network — wirtualna sieć prywatna), która pozwala z dowolnego miejsca na świecie stworzyć szyfrowane, wirtualne „połączenie telekomunikacyjne” zdalnego komputera/sieci z siecią macierzystą firmy.

Innym zastosowaniem VPN jest ochrona przed monitorowaniem ruchu przez agendy rządowe: wybieramy dostawcę VPN za granicami kraju, nawiązujemy szyfrowane połączenie z serwerem VPN (fakt nawiązania połączenia będzie monitorowany, ale już przesyłane informacje już nie. W szczególności, poza zasięgiem lokalnych służb będą adresy z którymi nawiązujemy połączenie. Choć w przypadku skoordynowanej akcji służb — może to nie być żadną ochroną, a jedynie utrudnieniem.

Kolejnym zastosowaniem VPN jest „oszukiwanie” dostawców usług, ktrzy ich dostępność ograniczają „terytorialnie” („W twoim kraju ta usługa jest niedostępna!”). Wybierając dostawcę VPN w odpowiednim miejscu, powodujemy, że (z punktu widzenia „drugiego końca połączenia”) jesteśmy gdzie indziej.

Czasami może to być metoda na przekroczenie firewalla (oczywiście, przy założeniu że jednak dopuszcza on dostęp do jakichś usług (uznanych przez lokalne władze jako bezpieczne.)

Poniższa ilustracja pokazuje ideę realizowanego tunelu. Nazwę „Office” należy traktować symbolicznie: będzie to dostawca bezpiecznego połączenia z komputerem klienta. Home to albo indywidualny klient, albo oddział firmy.

Natomiast w przypadku sieci wirtualnych na potrzeby firm — sieć może być tak skonstruowana, że będzie pozwalała na pełną integrację lokalnego i zdalnego oddziału firmy. Można podejmować decyzję na temat sposobu organizacji dostępu do Internetu (przez odpowiednią realizację trasowania).

image

Sieci połączone tunelem mogą być również tak zorganizowane, że komputery będą się wzajemnie widziały, albo — gdy jest kilka oddziałów — połączenia VPN będą realizowały redundantną strukturę dostarczającą alternatywnych dróg połączeń.

Dostępne rozwiązania

  1. PPTP – używany w MS Windows (i uważany za bardzo podatny na ataki oraz daleki od bezpieczeństwa)
  2. L2TP – używany w MS Windows (udoskonalona wersja PPTP)
  3. OpenVPN
  4. IPsec (nieco ogólniejsza niż tylko VPN struktura do bezpiecznego przesyłania informacji)
  5. SSTP (ang. Secure Socket Tunneling Protocol) firmy Microsoft
  6. OpenConnect rozwiązanie bardzo podobne do AnyConnect firmy Cisco (i zgodne z nim)

Oprócz tego istnieją rozwiązania „firmowe”:

  • Cisco AnyConnect (stosowany przez Politechnikę Wrocławska)

Cel ćwiczeń

  1. Pokazanie i praktyczne przećwiczenie korzystania z VPN.
  2. Objaśnienie jak realizuje się transmisja sygnałów w złożonych sieciach.

Niestety, aby przeprowadzić te ćwiczenie będę musiał udostępnić jakiś serwer VPN. Zapewne wiąże się to z pewnym niebezpieczeństwem, ale wypada mi zaufać (wierząc, że groźba niezaliczenia jest wystarczającym argumentem).

Oprogramowanie

Poniżej przykłady różnych rozwiązań VPN.

  1. Android: Opera VPN
  2. Android: OpenVPN Connect
  3. Android: Private Tunnel VPN – Fast & Secure Cloud VPN
  4. Android: Cisco AnyConnect
  5. Windows: OpenVPN

Dostawcami VPN zajmować się nie będę — najczęściej (nawet jeżeli niezbyt drogie) są to rozwiązania komercyjne.

OpenVPN

Do przeprowadzenia zajęć wybrałem oprogramowanie OpenVPN.

  1. Jest darmowe.
  2. Jest dosyć popularne.
  3. Nie udało się uruchomić serwera PPTP.

Instalacja

  1. Windows: Oprogramowanie jest do pobrania ze strony https://openvpn.net/index.php/open-source/downloads.html. W laboratorium nie trzeba pobierać — powinno być w kartotece |C:|. Plik |openvpn-install-2.4.5-I601.exe|.
  2. Linux (Debian/Ubuntu): powinno być w standardowym zestawie pakietów.
  3. Android: OpenVPN Connect ze sklepu.

Uruchomienie

Po zainstalowaniu oprogramowania trzeba je skonfigurować. Aby konfigurację uprościć przygotowałem indywidualne pliki konfiguracyjne dla każdego. Oprócz podstawowych informacji technicznych (adres serwera, port na którym nasłuchuje) zawierają one klucze i certyfikaty niezbędne do zapewnienia zaszyfrowanego połączenia (i zachowania minimum pewności, że „po drugiej stronie” jest ten serwer, który ma być).

Pliki „rozdam” na zajęciach. Mają one postać |123456.opvn| gdzie 123456 to numer albumu studenta.

W świecie realnych tuneli VPN plik taki powinien być strzeżony jak oko w głowie i nie powinien być nigdy przesyłany nieszyfrowanym kanałem. W naszym przypadku — tylko i wyłącznie do testów — nie będzie to takie istotne (tym bardziej, że tunel będzie działał przez krótki czas).

Ubuntu

Plik wgrywamy „gdziekolwiek” (na przykład do kartoteki |$HOME|). Następnie musimy poddać go edycji. Szukamy linijek

i usuwamy znak # (i odstęp), żeby uzyskać:

Zapisujemy i wychodzimy z edytora.

Tunel uruchamiamy poleceniem

(123456 trzeba zastąpić własnym numerkiem.) Potrzebne będzie hasło administratora (w laboratorium dostarczam w miarę potrzeb).

Kończymy pracę naciskając Ctrl-C w oknie terminala, w którym byłą uruchomiona aplikacja.

Windows

Po zainstalowaniu oprogramowania (potrzebne są uprawnienia administratora) plik konfiguracyjny trzeba skopiować do kartoteki |C:Files|. Po uruchomieniu program będzie go tam znajdował. Program musi być uruchamiany w trybie administratora (po kliknięciu prawym klawiszem myszy na ikonie „uruchom jako administrator” czy jakoś tak).

Można tak wszystko skonfigurować, żeby program zawsze był uruchamiany z prawami administratora (po kliknięciu). Trzeba kliknąć prawym klawiszem myszy na ikonę programu, wybrać Właściwości i w zakładce „Zgodność”1 wybieramy zmień ustawienia dla wszystkich użytkowników, a w kolejnym oknie zaznaczamy uruchom program jako administrator.

Każdorazowe uruchomienie programu będzie związane z pytaniem, czy chcesz by program wprowadził zmiany na komputerze. Program ląduje w zasobniku systemowym, ale nie uruchamia połączenia. Trzeba wskazać go i prawym klawiszem myszy wybrać odpowiednią pozycję menu (123456)2 i wybrać Connect/Połącz.

Podobnie kończy się połączenie.

Uwaga 1: Ze względów oczywistych (nie posiadam komputera z Windows) nie mogłem tego przetrenować i sprawdzić.

Uwaga 2: Po zakończonych zajęciach należy usunąć plik konfiguracyjny z kartoteki |C:Files|. To, niestety, są komputery publiczne.

Android

Plik konfiguracyjny najlepiej wgrać do telefonu kabelkiem USB (i zapamiętać gdzie on jest).

Uruchamiamy aplikację i wybieramy OpenVPN Profile (rys. [apka]). W kolejnym oknie znajdujemy plik konfiguracyjny i go importujemy. Po przeczytaniu Profile cuccessfully imported dodajemy (Add na samej górze). Kolejny krok to połączenie: „przełączamy” włączniczek.

OpenVPN na Androidzie

OpenVPN na Androidzie

Kolejne zrzuty ekranu przedstawiają pracę aplikacji (wraz z wykresem statystyk), wynik działania programu śledzącego trasę pakietów do serwera kobalt.immt.pwr.wroc.pl (156.17.8.2) oraz efekt kontaktu ze stroną DNS leak test.

Zadania do wykonania

Na początek ogromna prośba: nie nadużywajcie VPN.

  1. Zajęcia mogą być krótsze — wszystko można wykonać w domu3 korzystając z komputera i telefonu komórkowego4.
  2. Obejrzeć dokładnie otrzymany plik konfiguracyjny i przygotować pytania (na wykład?) o niezrozumiałe5
  3. Wybrać sobie jakiś węzeł w sieci i sprawdzić połączenie6 „normalne” i VPN
  4. Sprawdzić czas ping do wybranego serwera: VPN vs normalnie.
  5. Skorzystać z jakichś usług dostępnych jedynie wewnątrz sieci PWr.
  6. Można przetestować speedtest, ale zwracam uwagę, że połączenie zawsze wychodzi przez łącze „domowe”, dodatkowo jest szyfrowane i kapsułkowane do UDP, więc nie będzie szybciej. Pytanie ile będzie wolniej.

Uwagi

VPN może przydać się w bardzo różnych sytuacjach. Ale gdy znajdziemy się w sieci, w które cały ruch jest filtrowany — nie uzyskamy możliwości kontaktu z serwerem i nawiązania połączenia. Stąd bardzo często serwer korzysta z portu 443 — przeznaczonego dla bezpiecznych połączeń po HTTPS…

Dodatkowe źródła informacji

  1. Microsoft udostępnia sporo różnych informacji na temat VPN: Virtual Private Networks
    a tam
  2. Common configuration for the VPN server
  3. Struktura sieci i metody projektowania z wykorzystanie IPSEC, PKI, SSL
  4. Dokumentacja OpenVPN
    Instrukcja laboratoryjna zostałą opracowana na podstawie:
  5. How To Set Up an OpenVPN Server on Ubuntu 16.04
    oraz
  6. Keijser, J. J.: OpenVPN Cookbook, Packt Publishing Ltd., 2017

Instrukcja w postaci jednego pliku…

…jest również dostępna.


  1. Tłumaczę z angielskiego i nie mam możliwości sprawdzić jak to będzie po naszemu.
  2. Tu będzie numer albumu.
  3. W warunkach laboratorium wszystko będzie znacznie mniej spektakularne: jest ono w sieci PWr.
  4. Instrukcje dla IOS i OSX znaleźć można na osobnej stronie.
  5. Plik jest sformatowany dla linuksa, zwykły Notatnik może mieć problemy, ale Wordpad powinien sobie poradzić po zmianie rozszerzenia z opvn na txt. Zawsze zostaje jakiś inny, dobry edytor: na przykład Notepad++.
  6. Za pomocą jakiegoś programu do śledzenia trasy: tracert, aplikacja pod Android albo Windows.