1/40 Część 2: Klasyczne protokoły tunelowania
  • W tej części zajmiemy się protokołami, które uformowały historyczny krajobraz technologii VPN.
  • Zaczniemy od GRE (IP Protocol 47) - uniwersalnego standardu tunelowania.
  • Omówimy PPP (Point-to-Point Protocol) - protokół warstwy 2, będący fundamentem wielu rozwiązań VPN.
  • Zakończymy na PPTP - pierwszym masowo wdrażanym protokole VPN firmy Microsoft.
  • Celem tej części jest zrozumienie mechanizmów transmisji danych, zasad konfiguracji oraz krytycznych ograniczeń w sferze bezpieczeństwa.

Ta część wykładu koncentruje się na protokołach, które ukształtowały wczesny krajobraz technologii VPN i wciąż stanowią podstawę wielu współczesnych wdrożeń. Znajomość GRE, PPP i PPTP jest niezbędna do zrozumienia bardziej zaawansowanych rozwiązań, takich jak L2TP/IPSec czy OpenVPN, które często korzystają z tych samych mechanizmów enkapsulacji i negocjacji połączenia. GRE jest szczególnie interesujący ze względu na swoją uniwersalność - może przenosić praktycznie dowolny protokół warstwy wyższej, co czyni go niezwykle elastycznym narzędziem w rękach administratora sieci. PPP z kolei wprowadza warstwę kontroli sesji i uwierzytelniania, która jest niezbędna w kontekście zdalnego dostępu dla wielu użytkowników. PPTP, mimo swoich poważnych wad bezpieczeństwa, stanowi interesujący przypadek studyjny ilustrujący ewolucję myślenia o bezpieczeństwie w sieciach komputerowych.

Studenci powinni zwrócić szczególną uwagę na zależności między poszczególnymi protokołami - GRE stanowi warstwę transportową dla PPTP, a PPP dostarcza mechanizmy uwierzytelniania i adresacji. Zrozumienie tych powiązań jest kluczowe przy projektowaniu i diagnostyce sieci VPN w środowiskach produkcyjnych. W trakcie laboratoriów będziemy konfigurować każdy z tych protokołów na rzeczywistych urządzeniach MikroTik, co pozwoli na praktyczne utrwalenie omawianych zagadnień teoretycznych.

2/40 GRE: Definicja i standardy
  • GRE (Generic Routing Encapsulation) to protokół tunelowania opracowany pierwotnie przez firmę Cisco.
  • Zdefiniowany w publikacji RFC 2784.
  • Jest to tzw. protokół "czysty" - służy wyłącznie do enkapsulacji (pakowania) pakietów.
  • Ważne: Standardowo nie zapewnia on szyfrowania ani mechanizmów uwierzytelniania.
  • Główna zaleta: Możliwość przesyłania praktycznie dowolnego protokołu warstwy wyższej (IPv4, IPv6, AppleTalk, IPX) przez sieć IP.

GRE jest protokołem tunelowania o niezwykle szerokim spektrum zastosowań, który mimo swojego podeszłego wieku wciąż znajduje zastosowanie w nowoczesnych sieciach. Jego główną zaletą jest prostota i niewielki narzut - nagłówek GRE ma zaledwie od 4 do 8 bajtów, co czyni go jednym z najmniej zasobożernych protokołów tunelujących. Należy jednak pamiętać, że GRE nie zapewnia żadnych mechanizmów bezpieczeństwa, takich jak szyfrowanie czy uwierzytelnianie, co w dzisiejszych czasach stanowi poważne ograniczenie. W praktyce GRE jest często stosowany w połączeniu z IPSec, który zapewnia warstwę kryptograficzną, podczas gdy GRE odpowiada za elastyczność transportową, w tym przenoszenie protokołów innych niż IP oraz ruchu multicast. Standard RFC 2784 definiuje podstawową specyfikację GRE, a RFC 2890 wprowadza opcjonalne rozszerzenia, takie jak pole Sequence Number do wykrywania utraty pakietów.

Z punktu widzenia konfiguracji na urządzeniach MikroTik, GRE jest stosunkowo prosty do skonfigurowania, ale wymaga starannego zaplanowania adresacji interfejsów tunelu i tras routingu. Należy również pamiętać o odpowiednim skonfigurowaniu zapory sieciowej, ponieważ protokół GRE (IP 47) jest często blokowany przez domyślne reguły firewalla na routerach i u dostawców Internetu. Nowoczesne implementacje GRE obsługują również mechanizm keepalive, który umożliwia monitorowanie stanu tunelu i automatyczne usuwanie nieaktywnych tras, co znacząco podnosi niezawodność połączeń Site-to-Site.

3/40 Budowa pakietu protokołu GRE
  • Struktura pakietu wewnątrz tunelu GRE:
  • [ Zewnętrzny nagłówek IP ] [ Nagłówek GRE ] [ Wewnętrzny nagłówek IP ] [ Dane ]
  • Zewnętrzny nagłówek IP: Zawiera publiczne adresy routerów (punktów końcowych tunelu). Numer protokołu IP = 47.
  • Nagłówek GRE: Rozmiar od 4 do 8 bajtów. Zawiera pole "Protocol Type", identyfikujące typ danych przesyłanych wewnątrz (np. 0x0800 dla IPv4).
  • Wewnętrzny nagłówek IP: Zawiera adresy prywatne (np. z puli 192.168.x.x).

Zrozumienie budowy pakietu GRE jest kluczowe dla diagnostyki problemów sieciowych i optymalizacji wydajności tuneli. Zewnętrzny nagłówek IP zawiera publiczne adresy punktów końcowych tunelu i jest używany do routowania pakietu przez sieć publiczną. Nagłówek GRE, znajdujący się między zewnętrznym a wewnętrznym nagłówkiem IP, zawiera pole Protocol Type, które identyfikuje typ enkapsulowanego protokołu - dla IPv4 jest to wartość 0x0800, a dla IPv6 0x86DD. Opcjonalne pola w nagłówku GRE, takie jak Checksum, Key i Sequence Number, mogą być używane do weryfikacji integralności, identyfikacji strumienia danych oraz ochrony przed atakami typu replay. Wewnętrzny nagłówek IP zawiera adresy prywatne urządzeń w sieciach LAN po obu stronach tunelu, które są niewidoczne dla routerów pośredniczących w sieci publicznej.

W praktyce administratora sieci znajomość struktury pakietu GRE jest niezbędna przy analizie przechwyconego ruchu w narzędziach takich jak Wireshark. Dzięki filtrowaniu protokołu GRE można precyzyjnie prześledzić ścieżkę pakietu przez tunel, zidentyfikować ewentualne problemy z fragmentacją oraz zweryfikować poprawność konfiguracji tras routingu. W przypadku tuneli GRE over IPSec analiza staje się bardziej złożona, ponieważ pakiet GRE jest dodatkowo szyfrowany, co ukrywa jego strukturę przed narzędziami do przechwytywania pakietów na odcinku publicznym.

4/40 Protokół IP 47 - Powszechny problem
  • Protokół GRE nie korzysta z portów TCP ani UDP.
  • Działa bezpośrednio w warstwie sieciowej jako protokół IP o numerze 47.
  • Częsty błąd: Administratorzy otwierają porty na zaporze (np. TCP 1723 dla PPTP), ale zapominają o zezwoleniu na ruch GRE (protokół 47).
  • Objawy: Tunel nie zestawia się poprawnie lub komunikacja jest jednostronna.
  • W systemie MikroTik: /ip firewall filter add protocol=gre action=accept

Fakt, że protokół GRE działa bezpośrednio na poziomie warstwy sieciowej z numerem protokołu IP 47, ma daleko idące konsekwencje zarówno dla konfiguracji zapór sieciowych, jak i dla kompatybilności z translacją adresów NAT. Większość administratorów, przyzwyczajonych do zarządzania ruchem za pomocą portów TCP i UDP, popełnia podstawowy błąd, konfigurując reguły firewalla wyłącznie dla portu TCP 1723 podczas wdrażania PPTP. Tymczasem bez otwarcia protokołu 47 na zaporze sieciowej tunel danych (GRE) nie będzie działał, mimo że kanał sterowania (TCP) zestawi się poprawnie, co prowadzi do mylących objawów awarii. W systemie Windows objawia się to błędem 619, który informuje o niemożności ustanowienia połączenia, nie precyzując jednak przyczyny. W zaawansowanych sieciach korporacyjnych protokół 47 bywa blokowany domyślnie przez polityki bezpieczeństwa, co wymaga świadomego wyjątku w regułach firewalla.

Problem dodatkowo komplikuje fakt, że nie wszystkie domowe routery poprawnie obsługują translację NAT dla protokołów innych niż TCP i UDP. Wiele tanich urządzeń konsumenckich nie implementuje helperów dla protokołu GRE, co uniemożliwia zestawienie tunelu PPTP zza takiego routera. Rozwiązaniem jest zastosowanie mechanizmu PPTP Passthrough, który jest dostępny w większości routerów średniej i wyższej półki, lub migracja na protokół VPN wykorzystujący wyłącznie UDP lub TCP, taki jak OpenVPN czy WireGuard.

5/40 Cechy GRE: Protokół bezstanowy
  • GRE z założenia jest protokołem bezstanowym - urządzenie wysyła pakiet w tunel bez weryfikacji dostępności odbiorcy.
  • Brak mechanizmu potwierdzenia odbioru danych (odpowiednik ACK w TCP).
  • Brak wbudowanej retransmisji w przypadku utraty pakietów GRE.
  • Odpowiedzialność za integralność i dostarczenie danych spoczywa na protokołach warstw wyższych (np. protokołu TCP).
  • Zaleta: Znikome obciążenie procesora. Wada: Trudniejsza diagnostyka w podstawowej wersji.

Bezstanowość protokołu GRE jest zarówno jego zaletą, jak i wadą, w zależności od kontekstu zastosowania. W środowiskach operatorskich, gdzie sieć szkieletowa jest w pełni zarządzana i monitorowana, brak narzutu związanego z utrzymywaniem stanu połączenia przekłada się na wyższą wydajność i mniejsze opóźnienia. Z kolei w sieciach o nieprzewidywalnej topologii, takich jak połączenia przez publiczny Internet, bezstanowość oznacza, że router nie jest w stanie samodzielnie wykryć awarii drugiego końca tunelu bez dodatkowych mechanizmów. Dlatego właśnie w praktyce inżynierskiej GRE prawie zawsze konfiguruje się z mechanizmem keepalive, który emuluje zachowanie protokołu stanowego poprzez okresowe wysyłanie pakietów kontrolnych. Protokół keepalive w GRE polega na wysyłaniu przez jeden z routerów pustych pakietów GRE, które drugi router musi odesłać z powrotem, potwierdzając swoją dostępność.

Konsekwencją bezstanowości jest również fakt, że odpowiedzialność za niezawodną dostawę danych spoczywa w całości na protokołach warstw wyższych, głównie na TCP. W przypadku utraty pakietu GRE, protokół TCP wewnątrz tunelu wykryje brak potwierdzenia i zainicjuje retransmisję, co jest mechanizmem całkowicie przezroczystym dla warstwy tunelującej. Oznacza to, że GRE nie dodaje własnych opóźnień związanych z retransmisją, ale też nie oferuje żadnych gwarancji dostarczenia pakietów - jest to typowe zachowanie protokołu warstwy 3, który działa w modelu best-effort.

6/40 Mechanizm GRE Keepalives
  • Skoro protokół jest bezstanowy, router musi samodzielnie sprawdzać, czy drugi koniec tunelu jest aktywny.
  • Mechanizm Keepalive: Router A wysyła wewnątrz tunelu specjalny pakiet kontrolny, który Router B musi odesłać.
  • Jeśli Router A nie otrzyma odpowiedzi w zadanym czasie (np. 10 s), uznaje tunel za nieaktywny.
  • Pozwala to na dynamiczne usuwanie tras routingu prowadzących przez uszkodzony tunel.
  • W systemie RouterOS: parametr keepalive=10s,10 (wysyłanie co 10 s, rozłączenie po 10 błędach).

Mechanizm keepalive w protokole GRE jest niezbędny do utrzymania spójności tablic routingu w dynamicznych środowiskach sieciowych. Bez niego router musiałby polegać wyłącznie na protokołach routingu dynamicznego, takich jak OSPF, które również wykorzystują własne mechanizmy wykrywania dostępności sąsiadów. Keepalive w GRE działa na poziomie warstwy tunelu, co oznacza, że sprawdza nie tylko dostępność interfejsu sieciowego, ale także poprawność działania całej ścieżki komunikacyjnej między punktami końcowymi. W przypadku awarii łącza pośredniego w sieci publicznej, pakiety keepalive przestają docierać do celu, co powoduje oznaczenie tunelu jako nieaktywnego. W systemie RouterOS parametry keepalive konfiguruje się jako parę wartości: interwał wysyłania pakietów oraz liczbę nieudanych prób przed uznaniem tunelu za nieaktywny.

W praktyce warto pamiętać, że zbyt krótki interwał keepalive może generować niepotrzebny ruch sieciowy i obciążenie procesora, szczególnie w sieciach z wieloma tunelami GRE. Z kolei zbyt długi interwał opóźnia wykrycie awarii, co może prowadzić do przekierowywania ruchu przez uszkodzony tunel i utraty pakietów. Standardowe wartości interwału to od 5 do 10 sekund przy 3 do 10 nieudanych próbach, co daje wykrycie awarii w czasie od 15 do 100 sekund. W środowiskach o krytycznym znaczeniu czasu przywracania spójności stosuje się dodatkowe mechanizmy monitorowania, takie jak BFD (Bidirectional Forwarding Detection).

7/40 Praktyczne zastosowania protokołu GRE
  • 1. Łączenie oddziałów w bezpiecznych sieciach operatorskich (np. wewnątrz MPLS), gdzie dodatkowe szyfrowanie nie jest wymagane.
  • 2. Obsługa protokołów routingu dynamicznego (OSPF, RIP) przez Internet. Sam protokół IPSec nie przenosi ruchu rozgłoszeniowego i grupowego (multicast), GRE tak!
  • 3. Tunelowanie IPv6 przez infrastrukturę IPv4 (mechanizm 6in4).
  • Najczęstszy bezpieczny scenariusz: GRE over IPSec - wykorzystanie elastyczności GRE wewnątrz bezpiecznego kanału IPSec.

GRE znajduje zastosowanie w wielu scenariuszach wykraczających poza typowe połączenia VPN, co czyni go niezwykle wszechstronnym narzędziem w arsenale administratora sieci. Jednym z najważniejszych zastosowań jest transport protokołów routingu dynamicznego, takich jak OSPF czy EIGRP, które wymagają komunikacji multicast lub broadcast między routerami. Ponieważ IPSec nie przenosi natywnie ruchu grupowego, GRE z IPSec stanowi standardowe rozwiązanie w sieciach korporacyjnych, gdzie routing dynamiczny między oddziałami jest niezbędny. GRE jest również powszechnie stosowany do tunelowania IPv6 przez infrastrukturę IPv4 (6in4), co było kluczowe w okresie przejściowym między wersjami protokołu IP zanim dostawcy Internetu upowszechnili natywny IPv6. W środowiskach operatorskich GRE jest używany wewnątrz sieci MPLS do transportu ruchu klientów między punktami obecności.

Najbezpieczniejszym i najczęściej stosowanym wariantem GRE w praktyce korporacyjnej jest GRE over IPSec, który łączy elastyczność enkapsulacji GRE z solidnym szyfrowaniem IPSec. W tym modelu pakiet GRE jest najpierw enkapsulowany, a następnie całość jest szyfrowana przez IPSec, co zapewnia poufność, integralność i uwierzytelnianie na poziomie całego tunelu. Rozwiązanie to jest szczególnie popularne w sieciach Cisco i MikroTik, gdzie konfiguracja GRE over IPSec jest stosunkowo prosta i dobrze udokumentowana. Alternatywnym podejściem jest IPSec over GRE, gdzie szyfrowanie jest wykonywane przed enkapsulacją, ale jest to rozwiązanie rzadziej spotykane.

8/40 Konfiguracja GRE w RouterOS - Krok 1

Założenia: Biuro A (Public IP 1.1.1.1), Biuro B (Public IP 2.2.2.2).

Tworzenie logicznego interfejsu tunelu:

# Router A
/interface gre add name=gre-to-B remote-address=2.2.2.2 local-address=1.1.1.1

# Router B
/interface gre add name=gre-to-A remote-address=1.1.1.1 local-address=2.2.2.2

Konfiguracja GRE w systemie RouterOS jest procesem wieloetapowym, który wymaga zrozumienia logiki działania interfejsów wirtualnych w tym systemie. Pierwszym krokiem jest utworzenie samego interfejsu tunelu za pomocą polecenia /interface gre add, gdzie podaje się lokalny i zdalny publiczny adres IP. RouterOS automatycznie rozpoznaje typ protokołu na podstawie kontekstu - polecenie gre tworzy tunel GRE standardowy z IP Protocol 47. Po utworzeniu interfejsu należy go skonfigurować pod kątem adresacji IP, ponieważ tunel GRE zachowuje się jak wirtualny kabel łączący dwa routery. Najczęściej stosuje się adresację z podsieci /30, która zapewnia dwa użyteczne adresy IP - jeden dla każdego końca tunelu. Weryfikacja poprawności konfiguracji odbywa się za pomocą polecenia ping między adresami interfejsów tunelu.

Ważnym aspektem konfiguracji GRE w RouterOS jest zrozumienie różnicy między interfejsem GRE a interfejsem EoIP. GRE działa w warstwie 3 i przesyła pakiety IP, podczas gdy EoIP działa w warstwie 2 i przesyła ramki ethernetowe. Wybór między nimi zależy od wymagań - jeśli potrzebujemy routingu między sieciami, wybieramy GRE; jeśli potrzebujemy mostkowania sieci (ta sama podsieć po obu stronach), wybieramy EoIP. W praktyce GRE jest wybierany znacznie częściej ze względu na niższy narzut i lepszą wydajność w typowych scenariuszach łączenia oddziałów.

9/40 Konfiguracja GRE w RouterOS - Krok 2 (Adresacja)

Tunel traktujemy jak połączenie punkt-punkt (wirtualny kabel). Na jego końcach nadajemy adresy IP ze wspólnej podsieci, np. 10.0.0.0/30.

# Router A
/ip address add address=10.0.0.1/30 interface=gre-to-B

# Router B
/ip address add address=10.0.0.2/30 interface=gre-to-A

Po tej operacji powinna być możliwa komunikacja ping między adresami 10.0.0.1 i 10.0.0.2.

Po skonfigurowaniu interfejsu GRE i nadaniu mu adresacji IP, kolejnym krokiem jest dodanie tras statycznych, które umożliwią komunikację między sieciami LAN znajdującymi się za routerami. W przypadku prostego połączenia dwóch oddziałów wystarczy dodać po jednej trasie statycznej na każdym routerze, wskazując sieć LAN drugiej lokalizacji z bramą ustawioną na adres IP interfejsu tunelu po drugiej stronie. Dla bardziej rozbudowanych sieci z wieloma lokalizacjami zdecydowanie zaleca się stosowanie protokołów routingu dynamicznego, takich jak OSPF, które automatycznie wykrywają zmiany topologii i aktualizują tablice routingu. W systemie RouterOS konfiguracja OSPF na interfejsie GRE jest stosunkowo prosta - wystarczy dodać interfejs tunelu do konfiguracji OSPF i zdefiniować odpowiednie obszary.

Należy pamiętać, że trasy statyczne w połączeniach GRE nie są dynamicznie aktualizowane w przypadku awarii tunelu, co może prowadzić do blackholingu ruchu. Dlatego tak ważne jest stosowanie mechanizmu keepalive, który deaktywuje interfejs tunelu w przypadku utraty łączności, co z kolei powoduje usunięcie tras statycznych korzystających z tego interfejsu z tablicy routingu. W systemie RouterOS mechanizm ten działa automatycznie - gdy interfejs GRE zostanie oznaczony jako nieaktywny przez keepalive, wszystkie trasy korzystające z niego jako bramy są automatycznie usuwane z tablicy routingu, co zapobiega przekazywaniu ruchu w kierunku uszkodzonego tunelu.

10/40 Konfiguracja GRE w RouterOS - Krok 3 (Routing)

Konfiguracja tras przesyłu dla sieci lokalnych za routerami (np. Biuro A: 192.168.10.0/24, Biuro B: 192.168.20.0/24).

# Router A (trasa do sieci LAN B)
/ip route add dst-address=192.168.20.0/24 gateway=10.0.0.2

# Router B (trasa do sieci LAN A)
/ip route add dst-address=192.168.10.0/24 gateway=10.0.0.1

Routing rekurencyjny jest jednym z najbardziej podstępnych błędów konfiguracyjnych w sieciach VPN, który może całkowicie unieruchomić tunel i jest trudny do zdiagnozowania bez odpowiedniego zrozumienia mechanizmów routingu. Problem pojawia się, gdy trasa domyślna lub trasa do zdalnego punktu końcowego tunelu prowadzi przez interfejs wirtualny tunelu, który dopiero próbujemy zestawić. W takiej sytuacji router próbując wysłać pakiet przez tunel, najpierw sprawdza tablicę routingu, aby znaleźć trasę do publicznego adresu IP drugiego końca tunelu, i odkrywa, że według tablicy powinien wysłać go przez tunel, który właśnie próbuje zestawić, co tworzy nieskończoną pętlę logiczną.

Rozwiązaniem tego problemu jest zapewnienie, że trasa do publicznego adresu IP zdalnego punktu końcowego tunelu zawsze prowadzi przez fizyczny interfejs sieci WAN, a nie przez trasę domyślną, która mogłaby kierować ruch w stronę tunelu. W systemie RouterOS najprostszym rozwiązaniem jest dodanie jawnej trasy statycznej dla zdalnego adresu publicznego z bramą ustawioną na adres IP routera dostawcy Internetu na interfejsie WAN. Taka trasa, mająca wyższy priorytet niż trasa domyślna, zapewnia, że ruch do zdalnego punktu końcowego tunelu zawsze będzie kierowany bezpośrednio przez sieć publiczną, niezależnie od konfiguracji tras domyślnych.

11/40 Zjawisko routingu rekurencyjnego
  • Uwaga na krytyczny błąd konfiguracyjny!
  • Pojawia się, gdy router próbuje wysłać pakiet transportowy tunelu przez ten sam tunel, który próbuje zestawić.
  • Skutek: Pętla logiczna i niestabilność tunelu (ciągłe zrywanie i nawiązywanie połączenia).
  • Rozwiązanie: Trasa do publicznego adresu punktu końcowego tunelu musi zawsze prowadzić przez fizyczny interfejs WAN, a nie przez trasę domyślną kierowaną w tunel.

Problem MTU w tunelach GRE jest szczególnie istotny, ponieważ narzut nagłówków IP i GRE wynoszący 24 bajty powoduje, że standardowy pakiet o rozmiarze 1500 bajtów po enkapsulacji ma już 1524 bajty, co przekracza MTU sieci Ethernet. Konsekwencją jest fragmentacja pakietu na routerze wysyłającym, co zwiększa obciążenie procesora i może prowadzić do problemów wydajnościowych. W przypadku pakietów z ustawioną flagą Don't Fragment, nadmiarowy rozmiar skutkuje odrzuceniem pakietu i wygenerowaniem komunikatu ICMP Fragmentation Needed, co z kolei powoduje objawy zacinania się aplikacji sieciowych. Aby uniknąć tych problemów, administratorzy obniżają wartość MTU na interfejsie tunelu GRE do około 1476 bajtów, co po dodaniu nagłówków GRE i IP daje pełne 1500 bajtów.

Jeszcze skuteczniejszym rozwiązaniem niż ręczne obniżanie MTU jest zastosowanie mechanizmu MSS Clamping dla ruchu TCP przechodzącego przez tunel. MSS Clamping modyfikuje deklarowaną wartość MSS podczas trójfazowego uzgadniania połączenia TCP, wymuszając rozmiar segmentu danych uwzględniający narzut enkapsulacji GRE. W systemie RouterOS regułę MSS Clamping konfiguruje się w łańcuchu mangle zapory sieciowej, co pozwala na selektywne stosowanie tej modyfikacji wyłącznie do ruchu przechodzącego przez tunel GRE. Dla tunelu GRE standardowa wartość MSS wynosi 1436 bajtów, co po dodaniu nagłówków TCP (20 B) i IP (20 B) daje 1476 bajtów, czyli efektywne MTU tunelu.

12/40 Parametry MTU w protokole GRE
  • MTU sieci Ethernet: 1500 bajtów.
  • Nagłówki: IP (20 B) + GRE (4 B) = 24 bajty narzutu.
  • Efektywne MTU tunelu GRE: 1500 - 24 = 1476 bajtów.
  • Przesłanie pakietu 1500 B bez podziału spowoduje jego fragmentację lub odrzucenie ze względu na rozmiar po enkapsulacji.
  • Rekomendacja: Zastosowanie mechanizmu MSS Clamping (np. na wartość 1436 B) dla ruchu przechodzącego przez tunel.

Kwestia MTU w tunelach GRE jest często bagatelizowana przez początkujących administratorów, co prowadzi do trudnych do zdiagnozowania problemów wydajnościowych. Wartość MTU tunelu GRE wynika z prostego rachunku: standardowe MTU Ethernetu wynosi 1500 bajtów, od których należy odjąć 20 bajtów zewnętrznego nagłówka IP i 4 bajty nagłówka GRE, co daje 1476 bajtów dostępnych dla pakietu wewnętrznego. Gdy wewnętrzny pakiet IP ma rozmiar 1476 bajtów lub mniej, po enkapsulacji zmieści się w standardowej ramce ethernetowej bez konieczności fragmentacji. W praktyce wiele systemów operacyjnych automatycznie wykrywa MTU ścieżki za pomocą mechanizmu Path MTU Discovery i dostosowuje rozmiar wysyłanych pakietów, ale w przypadku tuneli VPN mechanizm ten często zawodzi, ponieważ routery pośredniczące nie zawsze generują komunikaty ICMP Fragmentation Needed.

W systemie RouterOS można skonfigurować MSS Clamping dla ruchu TCP przechodzącego przez tunel GRE, co jest zdecydowanie preferowanym rozwiązaniem w porównaniu z ręcznym obniżaniem MTU na interfejsach klienckich. Reguła MSS Clamping automatycznie modyfikuje deklarowaną wartość MSS w pakietach SYN, zapobiegając generowaniu segmentów TCP o rozmiarze powodującym fragmentację po enkapsulacji GRE. Administratorzy powinni również pamiętać, że niektóre implementacje GRE w starszych urządzeniach nie obsługują flagi DF, co może prowadzić do nieoczekiwanej fragmentacji pakietów na ścieżce między punktami końcowymi tunelu.

13/40 PPP (Point-to-Point Protocol) - Wprowadzenie
  • PPP to protokół warstwy drugiej (Danych), stworzony dla bezpośrednich połączeń punkt-punkt.
  • Jest następcą starszego standardu SLIP.
  • W kontekście VPN: popularne standardy takie jak PPTP, L2TP, SSTP czy PPPoE działają w oparciu o ramkowanie PPP.
  • Zrozumienie działania PPP jest kluczowe, gdyż stanowi ono "wnętrze" (mechanizm negocjacji i logowania) większości tych tuneli.

Protokół PPP, choć obecnie rzadko używany samodzielnie w nowoczesnych sieciach, stanowi fundament, na którym zbudowano wiele kluczowych technologii dostępowych i tunelujących. Jego największą zaletą jest elastyczność - PPP może działać na praktycznie każdym medium transmisyjnym, od łączy szeregowych, przez linie modemowe, aż po wirtualne interfejsy w sieciach VPN. W kontekście PPPoE, który jest powszechnie stosowany przez dostawców Internetu do zarządzania sesjami abonenckimi, PPP zapewnia mechanizmy autoryzacji, adresacji i rozliczania usług. W przypadku VPN protokół PPP jest wykorzystywany jako warstwa enkapsulacji dla danych użytkownika wewnątrz tuneli PPTP, L2TP i SSTP, dostarczając ram dla negocjacji parametrów połączenia oraz uwierzytelniania. Zrozumienie PPP jest zatem niezbędne do pełnego opanowania technologii VPN.

PPP działa w ramach trzech głównych komponentów: metody ramkowania umożliwiającej enkapsulację danych w ramki, protokołu LCP do zarządzania łączem oraz rodziny protokołów NCP do konfiguracji poszczególnych protokołów warstwy sieciowej. Standard PPP został zdefiniowany w RFC 1661 i od tego czasu przeszedł liczne rozszerzenia, z których najważniejsze to uwierzytelnianie CHAP i MS-CHAP, kompresja nagłówków (RFC 2507) oraz wielołącze (Multilink PPP). PPP obsługuje również wykrywanie błędów za pomocą sum kontrolnych FCS (Frame Check Sequence), co zapewnia integralność danych na poziomie łącza.

14/40 Architektura protokołu PPP
  • PPP składa się z kilku wyspecjalizowanych protokołów:
  • LCP (Link Control Protocol): Odpowiada za zestawienie łącza, negocjację parametrów (MRU) oraz wybór metody uwierzytelniania.
  • Protokoły uwierzytelniające: PAP, CHAP, MS-CHAP (weryfikacja tożsamości klienta).
  • NCP (Network Control Protocols): Negocjacja parametrów warstwy trzeciej. Najważniejszy to IPCP (przydzielanie adresów IP, DNS).

Protokół LCP (Link Control Protocol) jest odpowiedzialny za nawiązanie, utrzymanie i zakończenie połączenia PPP na poziomie warstwy łącza danych. W ramach wymiany pakietów Configure-Request, Configure-Ack i Configure-Nak negocjowane są takie parametry jak maksymalna jednostka transmisyjna MRU, rodzaj enkapsulacji, a także protokół uwierzytelniania, który będzie używany w dalszych fazach. W przypadku braku akceptacji proponowanych parametrów przez jedną ze stron, LCP może wielokrotnie modyfikować wartości w kolejnych pakietach Configure-Request, aż do osiągnięcia porozumienia lub zakończenia negocjacji po przekroczeniu limitu prób. Protokół LCP obsługuje również mechanizmy wykrywania błędów pętli (Loopback Detection) oraz testowania integralności łącza za pomocą pakietów Echo-Request i Echo-Reply. Każde z tych funkcji jest realizowane przez oddzielną klasę pakietów LCP, co czyni ten protokół niezwykle elastycznym narzędziem konfiguracyjnym.

Protokoły NCP, w szczególności IPCP (IP Control Protocol), przejmują kontrolę po pomyślnym zakończeniu fazy uwierzytelniania i odpowiadają za konfigurację parametrów warstwy sieciowej w tunelu PPP. W przypadku IPCP najważniejszym zadaniem jest negocjacja i przydzielenie adresu IP klientowi, a także dostarczenie adresów serwerów DNS. IPCP działa na podobnej zasadzie co LCP, wykorzystując pakiety Configure-Request i Configure-Ack, ale operuje na protokole sieciowym, a nie na parametrach łącza. W środowiskach VPN z protokołem PPTP, IPCP przydziela adres IP do wirtualnego interfejsu klienta, który jest unikalny w sieci lokalnej serwera.

15/40 Fazy nawiązywania połączenia PPP
  • 1. Link Dead: Stan oczekiwania na fizyczne medium komunikacyjne.
  • 2. Link Establishment (LCP): Wymiana pakietów konfiguracyjnych w celu ustalenia parametrów łącza.
  • 3. Authentication: Wymagana w VPN weryfikacja danych logowania użytkownika.
  • 4. Network Layer Protocol (IPCP): Negocjacja adresacji (serwer przydziela adres IP do wirtualnego interfejsu klienta).
  • 5. Open: Faza aktywnej transmisji danych użytkowych.

Faza Link Dead to początkowy stan automatu stanów PPP, w którym oczekiwane jest pojawienie się nośnika fizycznego lub logicznego, na przykład zestawienie połączenia modemowego lub aktywacja wirtualnego interfejsu sieciowego. Po wykryciu nośnika następuje przejście do fazy Link Establishment, gdzie protokół LCP rozpoczyna wymianę pakietów konfiguracyjnych, ustalając między innymi maksymalny rozmiar ramki MRU oraz wybraną metodę uwierzytelniania. W przypadku braku akceptacji negocjowanych parametrów przez jedną ze stron, LCP może wielokrotnie powtarzać próby konfiguracji, aż do osiągnięcia konsensusu lub przekroczenia limitu czasowego. Faza ta kończy się wysłaniem pakietu LCP Configure-Ack przez obie strony, co oznacza gotowość do przejścia do etapu uwierzytelniania.

Faza uwierzytelniania Authentication stanowi kluczowy element bezpieczeństwa połączenia PPP, w ramach którego klient musi udowodnić swoją tożsamość za pomocą wynegocjowanego wcześniej protokołu, takiego jak CHAP lub MS-CHAPv2. Po pomyślnym uwierzytelnieniu następuje faza Network Layer Protocol, w której IPCP przydziela klientowi adres IP i konfiguruje parametry sieciowe, takie jak serwery DNS. Ostatnia faza Open oznacza pełną gotowość do transmisji danych użytkownika, gdzie ramki PPP są swobodnie wymieniane między klientem a serwerem aż do momentu zakończenia sesji.

16/40 Uwierzytelnianie: PAP (Password Authentication Protocol)
  • Najstarsza i najbardziej prymitywna metoda weryfikacji.
  • Klient przesyła login i hasło w formie niezaszyfrowanej.
  • Krytyczna wada: Dane wędrują jawnym tekstem (cleartext).
  • Przechwycenie pakietu (sniffing) pozwala na natychmiastowe odczytanie hasła.
  • Zalecenie: Nigdy nie stosować w sieciach publicznych ani nowoczesnych VPN-ach.

Protokół PAP (Password Authentication Protocol) jest najstarszym i najsłabszym mechanizmem uwierzytelniania dostępnym w ramach stosu protokołów PPP, zdefiniowanym w dokumencie RFC 1334. Działanie PAP jest niezwykle proste - klient wysyła do serwera swoją nazwę użytkownika i hasło w postaci czystego tekstu, bez żadnego szyfrowania ani maskowania. Serwer porównuje otrzymane dane z wpisami w lokalnej bazie lub na serwerze RADIUS i odsyła pakiet Authenticate-Ack w przypadku zgodności lub Authenticate-Nak w przypadku błędu. PAP wykonuje tę operację tylko raz na początku sesji, co oznacza, że w trakcie trwania połączenia nie ma żadnej dodatkowej weryfikacji tożsamości.

Ze względu na przesyłanie hasła w formie jawnej, PAP jest wyjątkowo podatny na ataki typu sniffing, gdzie osoba atakująca może przechwycić pakiety PPP i natychmiast odczytać dane logowania. Co więcej, PAP nie zapewnia żadnej ochrony przed atakami typu replay, ponieważ przesłane hasło może być użyte wielokrotnie do nieautoryzowanego dostępu. Z tych powodów PAP powinien być stosowany wyłącznie w całkowicie kontrolowanych i izolowanych sieciach wewnętrznych, gdzie ryzyko przechwycenia pakietów jest znikome.

17/40 Uwierzytelnianie: CHAP (Challenge Handshake Authentication Protocol)
  • Metoda typu "wyzwanie-odpowiedź". Hasło nigdy nie jest przesyłane przez sieć.
  • 1. Serwer wysyła losową wartość (wyzwanie).
  • 2. Klient łączy wyzwanie ze swoim hasłem i oblicza z nich skrót (hash MD5).
  • 3. Klient odsyła wynikowy hash do serwera.
  • 4. Serwer wykonuje identyczne obliczenia. Zgodność wyników oznacza poprawną autoryzację.
  • Zapewnia ochronę przed podsłuchem hasła, lecz bazuje na starszych algorytmach.

Protokół CHAP (Challenge Handshake Authentication Protocol) stanowi znaczący postęp w stosunku do PAP, eliminując problem przesyłania haseł w formie jawnej. Mechanizm działania CHAP opiera się na schemacie wyzwanie-odpowiedź, w którym serwer wysyła do klienta losową wartość zwaną wyzwaniem (challenge), zawierającą identyfikator sesji oraz losowy ciąg bajtów. Klient łączy otrzymane wyzwanie ze swoim hasłem przy użyciu funkcji skrótu MD5 i odsyła wynik działania jako odpowiedź. Serwer wykonuje identyczne obliczenia na swojej kopii hasła i porównuje wynik z odpowiedzią klienta, co pozwala na potwierdzenie znajomości hasła bez jego jawnego przesyłania.

CHAP wykonuje cykliczne uwierzytelnianie przez cały czas trwania sesji, wysyłając nowe wyzwania w losowych odstępach czasu, co zapewnia ochronę przed atakami typu replay. W przypadku zmiany adresu IP przez router pośredniczący, CHAP może również wymusić ponowne uwierzytelnienie dla zwiększenia bezpieczeństwa. Mimo że algorytm MD5 jest obecnie uznawany za przestarzały i podatny na ataki kolizyjne, protokół CHAP wciąż spełnia swoją rolę w środowiskach o niskim ryzyku, szczególnie gdy jest stosowany jako jedna z wielu warstw zabezpieczeń.

18/40 Uwierzytelnianie: Protokół MS-CHAPv2
  • Standard firmy Microsoft, domyślny dla wbudowanych klientów VPN w systemie Windows.
  • Wprowadza wzajemne uwierzytelnianie - klient również weryfikuje tożsamość serwera.
  • Służy do generowania kluczy sesyjnych wykorzystywanych do późniejszego szyfrowania danych (MPPE).
  • Chroni przed atakami typu "fałszywy serwer VPN".
  • Uwaga: Jest podatny na zaawansowane ataki słownikowe. Wymaga stosowania skomplikowanych haseł użytkowników.

Protokół MS-CHAPv2 (Microsoft Challenge Handshake Authentication Protocol w wersji 2) został opracowany przez firmę Microsoft jako udoskonalenie wcześniejszej wersji MS-CHAPv1, eliminując problem jednostronnego uwierzytelniania i dodając wzajemną weryfikację obu stron połączenia. W praktyce oznacza to, że nie tylko serwer weryfikuje tożsamość klienta, ale również klient ma możliwość potwierdzenia, że łączy się z autoryzowanym serwerem VPN, co chroni przed atakami typu man-in-the-middle z wykorzystaniem fałszywych serwerów. Proces uwierzytelniania opiera się na dwóch rundach wyzwanie-odpowiedź - w pierwszej serwer weryfikuje klienta, a w drugiej klient weryfikuje serwer.

Kluczową funkcją MS-CHAPv2 jest generowanie kryptograficznych kluczy sesyjnych, które są następnie używane przez protokół MPPE do szyfrowania ruchu w tunelu PPTP. Klucze te są wyprowadzane z hasła użytkownika oraz wartości wyzwań wymienionych podczas uwierzytelniania przy użyciu algorytmu SHA-1 oraz funkcji wyprowadzania kluczy zdefiniowanych w specyfikacji Microsoft. Niestety, MS-CHAPv2 jest podatny na zaawansowane ataki słownikowe offline, gdzie przechwycone pary wyzwanie-odpowiedź mogą być wykorzystane do odgadnięcia hasła metodą brutalnej siły przy użyciu mocy obliczeniowej współczesnych procesorów graficznych.

19/40 Mechanizm MPPE (Microsoft Point-to-Point Encryption)
  • Podstawowy protokół PPP nie oferuje szyfrowania treści. Funkcję tę zapewnia rozszerzenie MPPE.
  • MPPE szyfruje pakiety PPP przy użyciu algorytmu RC4 (o długości klucza 40 lub 128 bitów).
  • Klucze są generowane dynamicznie podczas procesu logowania metodą MS-CHAPv2.
  • Mimo że RC4 jest obecnie uznawany za słaby algorytm kryptograficzny, stanowi jedyny natywny standard szyfrowania dla PPTP.

MPPE (Microsoft Point-to-Point Encryption) jest rozszerzeniem protokołu PPP dodającym szyfrowanie strumieniowe do pakietów przesyłanych w ramach tunelu VPN. Mechanizm ten wykorzystuje algorytm RC4, który został zaprojektowany w latach 80. przez Rona Rivesta i jest stosowany w wielu starszych protokołach kryptograficznych. MPPE obsługuje trzy długości klucza - 40, 56 i 128 bitów, z czego ten ostatni jest zalecany jako zapewniający minimalny akceptowalny poziom bezpieczeństwa. Klucze szyfrujące są generowane dynamicznie podczas procesu uwierzytelniania MS-CHAPv2 i są okresowo odświeżane w trakcie sesji, co ma na celu ograniczenie ilości danych zaszyfrowanych tym samym kluczem.

Algorytm RC4, na którym opiera się MPPE, został wielokrotnie skompromitowany w literaturze kryptograficznej, a w szczególności wykazano, że pierwsze bajty strumienia klucza RC4 są wysoce przewidywalne, co umożliwia ataki na słabo zaszyfrowane nagłówki protokołów. Ponadto, MPPE nie zapewnia mechanizmu Perfect Forward Secrecy, co oznacza, że złamanie hasła użytkownika umożliwia odszyfrowanie całego ruchu VPN zarejestrowanego w przeszłości. Mimo tych wad, MPPE pozostaje integralną częścią protokołu PPTP i jest wymagane do uzyskania jakiegokolwiek poziomu poufności w tym standardzie.

20/40 Konfiguracja profilu PPP w systemie RouterOS

Profil (PPP Profile) to szablon określający parametry wspólne dla grupy użytkowników.

/ppp profile add
name="profile-vpn"
local-address=192.168.99.1 (Adres routera w tunelu)
remote-address=pool-vpn (Zakres adresów IP dla klientów)
dns-server=8.8.8.8
use-encryption=yes (Wymóg szyfrowania MPPE)

Profil PPP w systemie RouterOS jest mechanizmem szablonowym, który grupuje parametry konfiguracyjne dla wielu użytkowników VPN, zapobiegając konieczności wielokrotnego definiowania tych samych ustawień dla każdego konta oddzielnie. Przy tworzeniu profilu administrator określa przede wszystkim adres lokalny interfejsu tunelu widziany z perspektywy routera oraz pulę adresów przydzielanych klientom w momencie nawiązywania połączenia. Parametr local-address przyjmuje pojedynczy adres IP, który staje się bramą dla klientów VPN, podczas gdy remote-address wskazuje na zdefiniowaną wcześniej pulę adresów lub pojedynczy adres IP. W przypadku szyfrowania parametr use-encryption=yes wymusza stosowanie MPPE, co skutkuje odrzuceniem połączeń klientów próbujących nawiązać sesję bez szyfrowania.

Dodatkowe opcje profilu PPP w RouterOS obejmują między innymi limit czasu sesji (session-timeout), limit czasu bezczynności (idle-timeout) oraz możliwość kompresji nagłówków za pomocą protokołów VJ Compression i MPPC. Profil może również definiować parametry warstwy sieciowej dla klienta, takie jak adresy serwerów DNS, adresy serwerów WINS czy domyślną bramę dla ruchu klienta. W środowiskach produkcyjnych często stosuje się kilka profili dla różnych grup użytkowników, na przykład osobny profil dla pracowników zdalnych i osobny dla połączeń Site-to-Site między oddziałami.

21/40 Baza użytkowników VPN (Secrets)

Lokalna baza kont na urządzeniu (możliwa jest również integracja z serwerem RADIUS).

/ppp secret add
name="uzytkownik_test"
password="SilneHaslo_2024!"
service=any (lub pptp, l2tp)
profile="profile-vpn"

Istnieje możliwość przypisania statycznego adresu IP dla wybranego użytkownika.

Baza ppp secret w systemie RouterOS stanowi lokalne repozytorium danych uwierzytelniających dla wszystkich usług VPN działających na routerze, w tym PPTP, L2TP, SSTP i PPPoE. Każdy wpis w bazie zawiera nazwę użytkownika, hasło, typ usługi, profil PPP oraz opcjonalnie statyczny adres IP, który ma być przydzielony klientowi przy każdym połączeniu. Hasła w bazie przechowywane są w formie zahashowanej z użyciem algorytmu MD5, co stanowi dodatkową warstwę ochrony przed nieautoryzowanym dostępem do plików konfiguracyjnych routera. Parametr service określa, z której usługi VPN może korzystać dany użytkownik, co pozwala na precyzyjne zarządzanie uprawnieniami.

RouterOS wspiera również integrację z zewnętrznymi serwerami RADIUS, co jest zalecane w środowiskach korporacyjnych z dużą liczbą użytkowników wymagających centralnego zarządzania dostępem. W przypadku integracji z RADIUS-em, lokalna baza ppp secret działa jako rezerwa, do której następuje odwołanie w przypadku braku odpowiedzi z serwera centralnego. Administratorzy mogą również korzystać z haseł tymczasowych z ograniczonym czasem ważności, co jest przydatne w scenariuszach udzielania dostępu gościom lub podwykonawcom na ograniczony czas.

22/40 Mechanizm Proxy-ARP w połączeniach PPP
  • Stosowany, gdy klienci VPN otrzymują adresy z tej samej podsieci co sieć lokalna LAN.
  • Pakiety ARP (warstwa 2) nie przechodzą przez router, co uniemożliwia komunikację między LAN a klientem VPN.
  • Rozwiązanie: Włączenie funkcji Proxy-ARP na interfejsie LAN (lub bridge'u) routera.
  • Router zacznie odpowiadać w imieniu klientów VPN na zapytania ARP pochodzące z sieci lokalnej.
  • Włączenie w systemie MikroTik: /interface bridge set bridge-local arp=proxy-arp

Problem komunikacji między klientami VPN a urządzeniami w sieci lokalnej wynika z fundamentalnej różnicy między warstwą 2 a warstwą 3 w modelu OSI. Gdy klient VPN otrzymuje adres IP z tej samej podsieci co sieć LAN, urządzenia w sieci lokalnej próbują wysłać do niego ramkę ARP w celu poznania adresu MAC, ale ramka ta nigdy nie dociera do klienta przez tunel VPN, ponieważ PPP nie przenosi ramek warstwy 2. Router, który znajduje się między siecią LAN a klientem VPN, nie przekazuje zapytań ARP do tunelu, przez co adresacja IP staje się niespójna - komputer w LAN wie, że klient jest w tej samej sieci, ale nie zna jego adresu fizycznego.

Mechanizm Proxy-ARP rozwiązuje ten problem, nakazując routerowi odpowiadanie na zapytania ARP w imieniu klientów VPN, którzy znajdują się po drugiej stronie tunelu. Router przechowuje w swojej tablicy ARP informacje o adresacji klientów, ponieważ sam przydzielił im adresy IP w fazie IPCP, i może zastąpić brakującą odpowiedź ARP własnym adresem MAC. W systemie RouterOS włączenie Proxy-ARP na interfejsie bridge lub LAN powoduje, że router zaczyna aktywnie odpowiadać na zapytania ARP dla wszystkich adresów, które są osiągalne przez inne interfejsy - w tym przez interfejsy wirtualne klientów VPN.

23/40 PPTP: Architektura komunikacji
  • Protokół PPTP wykorzystuje do działania dwa równoległe kanały:
  • 1. Kanał sterowania (TCP 1723): Zadania administracyjne, negocjacja sesji i uwierzytelnianie.
  • 2. Tunel danych (IP Protocol 47 GRE): Faktyczny przesył ramek PPP z danymi użytkownika.
  • To rozdzielenie jest najczęstszą przyczyną problemów z przechodzeniem przez zapory sieciowe.

Architektura protokołu PPTP opiera się na dwóch całkowicie oddzielnych kanałach komunikacyjnych, które pełnią odmienne funkcje i są zarządzane przez różne mechanizmy sieciowe. Kanał sterowania działa na porcie TCP 1723 i wykorzystuje protokół TCP do niezawodnej transmisji komunikatów kontrolnych, takich jak żądania zestawienia sesji, negocjacja parametrów tunelu oraz przekazywanie stanów połączenia. W ramach tego kanału wymieniane są również informacje o typie enkapsulacji, wersji protokołu PPTP oraz identyfikatory sesji Call ID, które umożliwiają korelację ruchu sterowania z ruchem danych. Kanał ten nawiązywany jest jako pierwszy, a jego zestawienie warunkuje możliwość transmisji danych.

Kanał danych, z kolei, wykorzystuje protokół GRE z modyfikacjami specyficznymi dla PPTP i nie korzysta z mechanizmów kontroli przepływu ani retransmisji TCP. Pakiety GRE przenoszą zaszyfrowane ramki PPP z danymi użytkownika i są opatrzone polem Call ID, które umożliwia serwerowi rozróżnienie wielu jednoczesnych sesji klienckich. Rozdzielenie kanałów sprawia, że administratorzy sieci często popełniają błąd, konfigurując zapory wyłącznie dla portu TCP 1723, co pozwala na zestawienie kanału sterowania, ale uniemożliwia transmisję danych, prowadząc do charakterystycznych objawów błędu 619 w systemie Windows.

24/40 Modyfikacje protokołu GRE w PPTP
  • PPTP nie korzysta ze standardowego GRE, lecz z jego rozszerzonej wersji.
  • Dodano pole "Call ID" w nagłówku, co pozwala routerowi na rozróżnianie sesji wielu klientów łączących się z tego samego publicznego adresu IP (za translatorem adresów).
  • Wewnątrz tak zmodyfikowanego pakietu GRE znajduje się zaszyfrowana za pomocą MPPE ramka PPP.

Standardowy protokół GRE zdefiniowany w RFC 2784 nie zawiera mechanizmów umożliwiających multipleksowanie wielu sesji w ramach jednego tunelu, co stanowiło poważne ograniczenie dla wdrożeń PPTP w środowiskach z translacją adresów NAT. Aby rozwiązać ten problem, specyfikacja PPTP (RFC 2637) wprowadziła modyfikację w postaci dodania pól Call ID i Call Serial Number do nagłówka GRE, które pełnią funkcję identyfikatorów sesji. Call ID jest 16-bitową wartością przypisywaną przez serwer podczas zestawiania połączenia i umieszczaną w każdym pakiecie GRE pochodzącym z danej sesji, co pozwala na jednoznaczne skorelowanie pakietów danych z odpowiednią sesją PPP.

Dzięki polu Call ID, router realizujący translację NAT jest w stanie poprawnie kierować pakiety GRE do odpowiedniego klienta, nawet jeśli wielu klientów łączy się z tego samego publicznego adresu IP. W praktyce oznacza to, że PPTP może działać poprawnie za routerem domowym wyposażonym w helper PPTP Passthrough, który monitoruje kanał sterowania TCP i zapamiętuje przypisane wartości Call ID dla każdej sesji. Należy jednak pamiętać, że standardowy GRE nie oferuje tej funkcjonalności, co jest kolejnym argumentem przemawiającym za stosowaniem PPTP zamiast czystego GRE w scenariuszach dostępu zdalnego z różnych lokalizacji.

25/40 Przechodzenie przez NAT (PPTP Passthrough)
  • Mechanizm translacji adresów NAT (w szczególności PAT) natywnie koliduje z brakiem numerów portów w protokole GRE.
  • Większość routerów domowych posiada funkcję PPTP Passthrough (helper).
  • Zadaniem helpera jest monitorowanie sesji na porcie TCP 1723 i poprawne przekierowanie skorelowanych pakietów GRE do odpowiedniego urządzenia w sieci lokalnej.
  • Brak tej funkcji skutkuje najczęściej błędem połączenia o numerze 619 w systemie Windows.

Mechanizm translacji adresów NAT (Network Address Translation) stanowi poważne wyzwanie dla protokołów sieciowych, które nie korzystają z portów TCP lub UDP, ponieważ algorytm NAT opiera się właśnie na numerach portów do jednoznacznej identyfikacji sesji. Protokół GRE, będący podstawą tunelu danych w PPTP, nie posiada portów - identyfikuje się wyłącznie przez numer protokołu IP 47, co uniemożliwia standardowemu algorytmowi NAT poprawne przekierowanie pakietów GRE do odpowiedniego klienta w sieci lokalnej. W efekcie, pakiety GRE docierające do routera z zewnątrz nie mogą być przypisane do konkretnego urządzenia w sieci wewnętrznej, co skutkuje odrzuceniem tych pakietów.

Rozwiązaniem jest mechanizm PPTP Passthrough, zwany również helperem GRE, który jest zaimplementowany w większości nowoczesnych routerów domowych i biznesowych. Helper monitoruje ruch na porcie TCP 1723, wyciąga z niego informacje o wartościach Call ID podczas zestawiania sesji PPTP, a następnie wykorzystuje te informacje do poprawnego kierowania pakietów GRE do odpowiednich urządzeń w sieci lokalnej. Bez aktywnego PPTP Passthrough, połączenie PPTP zza routera NAT nie będzie działać, a klient otrzyma błąd 619 informujący o niemożności ustanowienia połączenia z serwerem zdalnym.

26/40 Bezpieczeństwo protokołu PPTP - Analiza krytyczna
  • Współcześnie protokół PPTP jest uznawany za WYCOFANY I NIEBEZPIECZNY.
  • Luki MS-CHAPv2: Słabość algorytmu DES umożliwia złamanie kluczy metodą brutalną w czasie poniżej jednej doby przy użyciu mocy obliczeniowej chmury.
  • Luki MPPE: Algorytm RC4 posiada błędy konstrukcyjne ułatwiające kryptoanalizę treści.
  • Brak mechanizmu Perfect Forward Secrecy.
  • Jedyny powód ciągłej obecności: Natywne wsparcie w niemal każdym systemie i prosta konfiguracja.

Protokół PPTP został poddany szczegółowej analizie bezpieczeństwa przez niezależnych badaczy, którzy zidentyfikowali szereg poważnych luk kryptograficznych czyniących go nieodpowiednim do ochrony współczesnych transmisji danych. Kluczowym problemem jest słabość algorytmu DES stosowanego w MS-CHAPv2 do generowania kluczy sesyjnych - klucz DES o długości zaledwie 56 bitów może być złamany metodą brutalnej siły w czasie od kilku minut do kilku godzin przy użyciu współczesnych procesorów graficznych lub usług chmurowych. Po złamaniu klucza MS-CHAPv2, atakujący uzyskuje dostęp do haseł użytkowników oraz do kluczy szyfrujących MPPE, co umożliwia całkowite odszyfrowanie całego ruchu w tunelu PPTP.

Kolejnym poważnym problemem jest brak mechanizmu Perfect Forward Secrecy w protokole PPTP, co oznacza, że złamanie pojedynczego hasła użytkownika umożliwia odszyfrowanie wszystkich nagranych wcześniej sesji tego użytkownika. W połączeniu ze słabościami algorytmu RC4 stosowanego w MPPE, które umożliwiają ataki statystyczne na zaszyfrowany strumień danych, protokół PPTP nie zapewnia praktycznie żadnej ochrony przed zdeterminowanym atakującym posiadającym dostęp do sieci. Z tych powodów wszystkie instytucje zajmujące się bezpieczeństwem IT, w tym National Institute of Standards and Technology NIST, jednoznacznie zalecają wycofanie protokołu PPTP z użytku produkcyjnego.

27/40 Konfiguracja serwera PPTP w systemie RouterOS

Aktywacja usług serwerowych:

/interface pptp-server server set
enabled=yes
authentication=mschap2 (Zalecana jedyna rozsądna opcja)
default-profile=profile-vpn
max-mru=1450 max-mtu=1450

Konfiguracja serwera PPTP w systemie RouterOS wymaga kilku precyzyjnych kroków konfiguracyjnych, które decydują o stabilności i bezpieczeństwie całej usługi VPN. Podstawowym poleceniem jest /interface pptp-server server set enabled=yes, które aktywuje nasłuchiwanie na porcie TCP 1723 i przygotowuje router do przyjmowania połączeń przychodzących. Parametr authentication określa dozwolone metody uwierzytelniania - zaleca się pozostawienie wyłącznie metody mschap2 i wyłączenie starszych protokołów pap i chap, które są podatne na ataki. Właściwe ustawienie parametrów max-mtu i max-mru na poziomie 1450 bajtów pozwala uniknąć problemów z fragmentacją pakietów, które mogą wynikać z narzutu nagłówków PPTP, GRE i MPPE.

Parametr default-profile wskazuje na wcześniej utworzony profil PPP, który definiuje pulę adresów IP dla klientów oraz inne ustawienia sieciowe. RouterOS umożliwia również zaawansowaną konfigurację serwera PPTP, w tym ustawienie limitu jednoczesnych połączeń (max-sessions), limit czasu sesji oraz adresację dla połączeń przychodzących. Po skonfigurowaniu serwera należy koniecznie zweryfikować jego działanie za pomocą komendy /interface pptp-server server print, która wyświetli aktualny stan usługi oraz listę aktywnych połączeń klienckich.

28/40 Reguły zapory (Firewall) dla usług PPTP

Należy zezwolić na ruch przychodzący (Input chain) do routera:

# Protokół TCP port 1723 (Sterowanie)
/ip firewall filter add chain=input protocol=tcp dst-port=1723 action=accept comment="PPTP Control"

# Protokół IP 47 - GRE (Tunel danych)
/ip firewall filter add chain=input protocol=gre action=accept comment="PPTP Data"

Błąd w regułach skutkuje zawieszeniem klienta na etapie weryfikacji loginu i hasła.

Konfiguracja reguł zapory sieciowej dla usług PPTP jest często źródłem błędów, które uniemożliwiają poprawne działanie tunelu VPN nawet przy prawidłowo skonfigurowanym serwerze. Najważniejszą zasadą jest konieczność zezwolenia na dwa oddzielne typy ruchu przychodzącego - TCP na porcie 1723 dla kanału sterowania oraz protokół IP 47 dla tunelu danych GRE. Reguły te powinny być dodane do łańcucha input zapory sieciowej, ponieważ zarówno kanał sterowania, jak i tunel danych są adresowane bezpośrednio do routera jako punktu końcowego tunelu. Kolejność reguł w łańcuchu input ma znaczenie - reguły zezwalające na PPTP powinny znajdować się przed domyślnymi regułami blokującymi.

W środowiskach produkcyjnych zaleca się dodatkowo ograniczenie dostępu do serwera PPTP wyłącznie z zaufanych adresów IP źródłowych, co znacząco redukuje ryzyko ataków typu brute-force na hasła użytkowników. W systemie RouterOS można to zrealizować, dodając parametr src-address do reguł firewalla, lub stosując listy adresów (address lists) do grupowania dozwolonych źródeł. Dodatkowo warto rozważyć zastosowanie reguł limitowania połączeń na porcie TCP 1723 w celu ochrony przed zmasowanymi atakami typu SYN flood, które mogłyby doprowadzić do przeciążenia serwera VPN.

29/40 Konfiguracja w systemie Windows - Krok 1
  • 1. Przejdź do: Start -> Ustawienia -> Sieć i Internet -> VPN.
  • 2. Wybierz opcję "Dodaj połączenie VPN".
  • 3. Dostawca sieci VPN: Windows (wbudowane).
  • 4. Nazwa połączenia: np. "VPN Firmowy PPTP".
  • 5. Adres serwera: Publiczny adres IP lub nazwa domenowa bramy VPN.

Konfiguracja połączenia PPTP w systemie Windows rozpoczyna się w panelu Ustawienia w sekcji Sieć i Internet, gdzie należy wybrać kategorię VPN i kliknąć przycisk Dodaj połączenie VPN. W nowoczesnych wersjach Windows interfejs konfiguracyjny został znacząco uproszczony w porównaniu z klasycznym panelem sterowania, co ułatwia konfigurację, ale ogranicza dostęp do zaawansowanych opcji. W pierwszym kroku należy wybrać dostawcę Windows wbudowane oraz nadać połączeniu dowolną nazwę identyfikującą, na przykład VPN Firmowy PPTP. Adres serwera to publiczny adres IP lub nazwa domenowa bramy VPN, która musi być osiągalna z poziomu sieci klienta.

Wybór odpowiedniej nazwy połączenia ma znaczenie praktyczne w przypadku korzystania z wielu różnych połączeń VPN na jednym komputerze, ponieważ ułatwia identyfikację poszczególnych konfiguracji. Adres serwera może być podany zarówno w formie adresu IPv4, jak i w formie w pełni kwalifikowanej nazwy domenowej FQDN, co jest zalecane w przypadku dynamicznych adresów IP serwera VPN. Po wypełnieniu podstawowych pól, Windows zapisuje konfigurację i udostępnia możliwość edycji zaawansowanych parametrów przed pierwszym logowaniem.

30/40 Konfiguracja w systemie Windows - Krok 2
  • 6. Typ sieci VPN: Wybierz jawnie Protokół PPTP (skraca czas negocjacji).
  • 7. Typ informacji logowania: Nazwa użytkownika i hasło.
  • 8. Wprowadź dane zidentyfikowane wcześniej w sekcji "Secrets" na routerze.
  • 9. Zapisz i przetestuj połączenie.

W drugim kroku konfiguracji PPTP w systemie Windows kluczowym wyborem jest typ sieci VPN, który domyślnie ustawiony jest na Automatyczny, ale zdecydowanie zaleca się ręczne wybranie protokołu PPTP w celu przyspieszenia procesu negocjacji. Wybór automatyczny wymusza na kliencie sekwencyjne próby zestawienia połączenia z użyciem różnych protokołów, co może wydłużyć czas logowania nawet o kilkadziesiąt sekund. Jawnie wybrany typ PPTP eliminuje zbędne próby negocjacji z innymi protokołami, takimi jak L2TP/IPSec czy SSTP, i przechodzi bezpośrednio do zestawiania sesji z serwerem.

Typ informacji logowania powinien być ustawiony na Nazwa użytkownika i hasło, co odpowiada standardowemu mechanizmowi uwierzytelniania MS-CHAPv2 stosowanemu w PPTP. Dane logowania muszą być zgodne z wpisami w bazie ppp secret na serwerze RouterOS, przy czym należy zwrócić uwagę na wielkość liter w nazwie użytkownika oraz hasle. Windows oferuje również możliwość zapisania danych logowania, co jest wygodne, ale stwarza zagrożenie w przypadku dostępu do komputera przez osoby niepowołane - zaleca się stosowanie dodatkowej ochrony systemowej w postaci szyfrowania dysku i blokady ekranu.

31/40 Konfiguracja Split Tunneling w Windows
  • Domyślnie system kieruje cały ruch (pełny tunel) przez VPN, co może obciążać łącze firmowe.
  • Aby włączyć Split Tunneling (ruch internetowy poza tunelem):
    • Wejdź w ustawienia karty sieciowej VPN we właściwościach klasycznego Panelu Sterowania.
    • Właściwości protokołu IPv4 -> Zaawansowane.
    • Odznacz opcję "Użyj domyślnej bramy w sieci zdalnej".

Split Tunneling to technika konfiguracji sieci VPN, w której tylko ruch kierowany do sieci firmowej jest przesyłany przez tunel VPN, podczas gdy cały pozostały ruch internetowy jest kierowany bezpośrednio przez lokalne łącze klienta bez szyfrowania. Domyślnie system Windows stosuje model Full Tunneling, w którym cały ruch klienta, w tym zapytania DNS i ruch do serwisów internetowych, jest przesyłany przez tunel VPN, co może znacząco obciążać łącze firmowe i zwiększać opóźnienia dla aplikacji internetowych. Split Tunneling jest szczególnie przydatny w scenariuszach, w których pracownicy zdalni potrzebują jednoczesnego dostępu do zasobów firmowych oraz do ogólnego Internetu, na przykład w celach badawczych lub komunikacyjnych.

Włączenie Split Tunneling w Windows odbywa się przez odznaczenie opcji Użyj domyślnej bramy w sieci zdalnej w zaawansowanych ustawieniach protokołu IPv4 dla karty sieciowej VPN. Po odznaczeniu tej opcji, Windows nie dodaje trasy domyślnej przez interfejs tunelu VPN, a jedynie trasy do sieci firmowych, które są skonfigurowane statycznie lub otrzymane z serwera za pomocą protokołu IPCP. Należy pamiętać, że Split Tunneling zmniejsza poziom bezpieczeństwa, ponieważ ruch internetowy nie jest chroniony szyfrowaniem VPN, co może być istotne w przypadku korzystania z niezabezpieczonych sieci publicznych, takich jak hotspoty Wi-Fi w kawiarniach czy na lotniskach.

32/40 Diagnostyka problemów: Kod błędu 619
  • "Nie można ustanowić połączenia z komputerem zdalnym...".
  • Najczęstsza przyczyna: Blokada protokołu GRE (protokół 47) po drodze między klientem a serwerem.
  • Sprawdź, czy router klienta wspiera "PPTP Passthrough".
  • Zweryfikuj, czy dostawca Internetu nie blokuje ruchu spoza protokołów TCP/UDP.

Kod błędu 619 w systemie Windows jest jednym z najczęściej występujących komunikatów diagnostycznych podczas próby zestawienia połączenia PPTP i w większości przypadków wskazuje na problem z transmisją pakietów GRE między klientem a serwerem. Szczegółowy komunikat informuje, że nie można ustanowić połączenia z komputerem zdalnym, co często wynika z blokowania protokołu IP 47 przez zaporę sieciową po stronie klienta, po stronie serwera lub gdziekolwiek na ścieżce sieciowej między nimi. W praktyce błąd 619 pojawia się w momencie, gdy kanał sterowania TCP na porcie 1723 został już zestawiony, ale router nie może nawiązać komunikacji przez tunel GRE z powodu braku odpowiedzi na pakiety danych.

Aby zdiagnozować błąd 619, należy przede wszystkim sprawdzić, czy router domowy klienta posiada włączoną funkcję PPTP Passthrough, która jest odpowiedzialna za poprawne przekierowanie pakietów GRE do urządzenia klienckiego. W przypadku korzystania z publicznych sieci Wi-Fi, dostawca Internetu może blokować protokoły inne niż TCP i UDP, co uniemożliwia działanie GRE na poziomie sieci szkieletowej. Dodatkową przyczyną błędu 619 może być niewłaściwa konfiguracja zapory na samym serwerze VPN, która zezwala na ruch TCP 1723, ale blokuje protokół IP 47 na interfejsie wewnętrznym lub na routerze brzegowym sieci firmowej.

33/40 Diagnostyka problemów: Kody 800 i 807
  • Przyczyna: Serwer VPN jest całkowicie nieosiągalny dla klienta.
  • Podstawowe kroki naprawcze:
    • Sprawdź dostępność portu TCP 1723 narzędziem telnet lub Test-NetConnection.
    • Upewnij się, że serwer posiada poprawny publiczny adres IP.
    • Przeanalizuj logi systemowe na routerze MikroTik (sekcja /log print).

Kody błędów 800 i 807 w systemie Windows wskazują na całkowity brak łączności z serwerem VPN, co odróżnia je od błędu 619, który pojawia się po częściowym zestawieniu połączenia. Błąd 800 The remote connection was not made informuje, że klient nie może nawiązać nawet wstępnego kontaktu z serwerem na porcie TCP 1723, co wynika najczęściej z blokady tego portu na zaporze sieciowej lub z nieosiągalności serwera w ogóle. Błąd 807 The connection was prevented because of a policy configured on your RAS/VPN server wskazuje z kolei na odrzucenie połączenia przez serwer po nawiązaniu wstępnej komunikacji, co może być spowodowane błędną konfiguracją polityk dostępu lub wyczerpaniem limitów połączeń.

Diagnostyka błędów 800 i 807 powinna rozpocząć się od sprawdzenia dostępności serwera za pomocą narzędzia telnet lub Test-NetConnection w PowerShell, które pozwalają na weryfikację, czy port TCP 1723 odpowiada na zapytania z sieci zewnętrznej. W przypadku RouterOS pomocne jest sprawdzenie logów systemowych za pomocą komendy /log print, gdzie mogą znajdować się wpisy o odrzuconych połączeniach z określeniem przyczyny. Należy również zweryfikować, czy serwer VPN posiada poprawnie skonfigurowany publiczny adres IP i czy reguły NAT na routerze brzegowym poprawnie przekierowują ruch na porcie TCP 1723 do wewnętrznego adresu serwera.

34/40 Diagnostyka problemów: Kod błędu 691
  • "Odmowa dostępu: nazwa użytkownika lub hasło są nieprawidłowe".
  • Przyczyna: Pomyłka w danych logowania lub niedopasowanie metod uwierzytelniania między stronami.
  • Sprawdź, czy serwer nie wymaga wyłącznie MS-CHAPv2, podczas gdy klient próbuje użyć słabszych metod.
  • Dopasuj ustawienia w zakładce "Zabezpieczenia" we właściwościach połączenia sieciowego.

Kod błędu 691 to sygnał, że proces uwierzytelniania zakończył się niepowodzeniem, co oznacza, że klient dostarczył nieprawidłowe dane logowania lub metody uwierzytelniania między klientem a serwerem nie są zgodne. W przeciwieństwie do błędów 619 i 800, błąd 691 wskazuje, że kanał sterowania TCP oraz tunel GRE zostały pomyślnie zestawione, ale serwer odrzucił próbę logowania na etapie uwierzytelniania PPP. Serwer RouterOS zapisuje szczegółowe informacje o nieudanych próbach logowania w logach systemowych, co pozwala na szybkie zidentyfikowanie konta, z którego próbowano nawiązać połączenie z nieprawidłowym hasłem.

Najczęstszą przyczyną błędu 691 jest niezgodność metod uwierzytelniania między klientem a serwerem - serwer może wymagać wyłącznie MS-CHAPv2, podczas gdy klient próbuje użyć przestarzałego PAP lub CHAP. W systemie Windows problem ten rozwiązuje się, wchodząc we właściwości połączenia VPN, zakładkę Zabezpieczenia i jawnie wybierając dozwolone metody uwierzytelniania. Należy również upewnić się, że nazwa użytkownika i hasło są wprowadzone poprawnie, z uwzględnieniem wielkości liter oraz ewentualnych znaków specjalnych, które mogą być nieprawidłowo interpretowane przez formularz logowania.

35/40 Model Site-to-Site PPTP (Połączenie router-router)
  • System RouterOS może pełnić również funkcję klienta (PPTP Client).
  • Konfiguracja: /interface pptp-client add connect-to=[Publiczny_IP] user=[Nazwa] password=[Hasło].
  • Stosowane do szybkiego łączenia dwóch sieci LAN.
  • Wymaga ręcznego dopisania tras statycznych lub uruchomienia protokołu routingu.
  • Jest to najprostsza metoda zestawienia tunelu "na żądanie", gdy bezpieczeństwo danych jest drugorzędne.

Model Site-to-Site z wykorzystaniem PPTP w systemie RouterOS umożliwia połączenie dwóch odrębnych sieci lokalnych w jedną spójną infrastrukturę sieciową przy minimalnym nakładzie konfiguracyjnym. W tym scenariuszu jeden router pełni funkcję serwera PPTP, a drugi router działa jako klient PPTP, który inicjuje połączenie za pomocą interfejsu pptp-client. Klient PPTP konfiguruje się poprzez polecenie /interface pptp-client add z parametrami connect-to określającym publiczny adres serwera oraz user i password, które odpowiadają wpisom w bazie ppp secret na serwerze. Po nawiązaniu połączenia na obu routerach pojawia się wirtualny interfejs, który może być używany do dalszej konfiguracji routingu.

Po zestawieniu tunelu Site-to-Site konieczne jest dodanie tras statycznych na obu routerach, które umożliwią komunikację między sieciami LAN znajdującymi się po obu stronach połączenia. Alternatywnie można skonfigurować protokół routingu dynamicznego, taki jak OSPF lub RIP, który będzie automatycznie propagował informacje o sieciach dostępnych przez tunel. Model Site-to-Site PPTP jest często stosowany w małych i średnich przedsiębiorstwach do szybkiego łączenia oddziałów, ale ze względu na ograniczenia bezpieczeństwa nie powinien być używany do transmisji danych wrażliwych bez dodatkowego szyfrowania warstwy aplikacyjnej.

36/40 Wydajność protokołu PPTP
  • Mocną stroną PPTP jest jego mała złożoność obliczeniowa.
  • Algorytm szyfrowania RC4 nie obciąża procesorów tak znacząco jak AES stosowany w IPSec.
  • Na urządzeniach o słabszych procesorach PPTP oferuje wyższą przepustowość realną niż rozwiązania nowsze.
  • Jest to główny argument za utrzymywaniem tego standardu w tanich urządzeniach konsumenckich.

Wydajność protokołu PPTP jest często wskazywana jako jego główna zaleta w porównaniu z nowszymi protokołami VPN, szczególnie w kontekście urządzeń o ograniczonej mocy obliczeniowej, takich jak tanie routery domowe czy starsze serwery. Niski narzut wydajnościowy wynika przede wszystkim ze stosowania algorytmu szyfrowania RC4, który jest znacząco mniej wymagający obliczeniowo niż algorytm AES stosowany w IPSec, szczególnie na urządzeniach pozbawionych sprzętowego wsparcia dla kryptografii. W praktyce oznacza to, że na routerze z procesorem o niskiej częstotliwości taktowania PPTP może osiągnąć przepustowość nawet dwukrotnie wyższą niż L2TP/IPSec przy tych samych warunkach sieciowych.

Należy jednak pamiętać, że wyższa wydajność PPTP odbywa się kosztem znacznie niższego poziomu bezpieczeństwa, co czyni ten wybór akceptowalnym wyłącznie w scenariuszach, w których ochrona danych nie jest priorytetem. Współcześnie nawet tanie urządzenia sieciowe często posiadają sprzętowe akceleratory kryptograficzne wspierające AES, co niweluje przewagę wydajnościową PPTP nad bezpieczniejszymi alternatywami. Dodatkowo narzut związany z enkapsulacją GRE i PPP w PPTP jest porównywalny z narzutem innych protokołów, a różnice w przepustowości wynikają głównie z szybkości szyfrowania, a nie z samej struktury pakietów.

37/40 Protokół EoIP (Ethernet over IP) - Rozwiązanie autorskie
  • Autorski standard firmy MikroTik, bazujący na modyfikacji GRE (Protocol 47).
  • Umożliwia przesyłanie pełnych ramek warstwy 2 (Ethernet) przez tunel.
  • Pozwala na "przezroczyste" rozciągnięcie tego samego segmentu sieci lokalnej między lokalizacjami.
  • Wymaga obecności systemu RouterOS na obu końcach połączenia.

Protokół EoIP (Ethernet over IP) jest autorskim rozwiązaniem firmy MikroTik, które rozszerza możliwości standardowego tunelu GRE o przenoszenie pełnych ramek warstwy 2, w tym nagłówków ethernetowych, co pozwala na stworzenie przezroczystego połączenia między dwoma segmentami sieci lokalnej. W przeciwieństwie do tunelu GRE warstwy 3, który przenosi wyłącznie pakiety IP, EoIP enkapsuluje całe ramki ethernetowe, umożliwiając pracę protokołów warstwy 2, takich jak DHCP, ARP czy protokoły rozgłoszeniowe, przez tunel. Dzięki temu urządzenia w dwóch różnych lokalizacjach mogą znajdować się w tej samej domenie rozgłoszeniowej, co jest szczególnie przydatne w przypadku potrzeby mostkowania sieci zamiast routingu.

EoIP wykorzystuje ten sam numer protokołu IP 47 co GRE, ale stosuje własny nagłówek zawierający dodatkowe pole identyfikatora tunelu EoIP Tunnel ID, które umożliwia multipleksowanie wielu tuneli EoIP między tymi samymi routerami. W systemie RouterOS EoIP może być łączony z szyfrowaniem IPSec w celu zapewnienia poufności danych, co tworzy rozwiązanie EoIP over IPSec, będące bezpieczną alternatywą dla rozciągania sieci warstwy 2 przez Internet. EoIP jest często stosowany w środowiskach operatorskich i u dostawców Internetu do dostarczania klientom przezroczystego połączenia warstwy 2 między oddziałami, umożliwiając migrację maszyn wirtualnych i innych usług wymagających ciągłości warstwy 2.

38/40 Dobre praktyki przy stosowaniu PPTP
  • Jeśli sytuacja techniczna wymusza zastosowanie PPTP, należy:
  • 1. Wymusić stosowanie bardzo długich i złożonych haseł (powyżej 14 znaków).
  • 2. Ograniczyć dostęp do serwera VPN wyłącznie do zaufanych adresów IP źródłowych.
  • 3. Zmienić domyślny port TCP 1723 na inny w celu ochrony przed automatycznymi skanerami.
  • 4. Systematycznie monitorować logi serwera pod kątem prób ataku brute-force.

W sytuacjach, gdy użycie PPTP jest wymuszone przez ograniczenia sprzętowe lub organizacyjne, wdrożenie zestawu dobrych praktyk może znacząco podnieść poziom bezpieczeństwa wdrożenia. Podstawą jest wymuszenie stosowania bardzo długich i złożonych haseł, składających się z minimum 14 znaków zawierających małe i duże litery, cyfry oraz znaki specjalne, co zwiększa odporność na ataki słownikowe i brute-force. Administrator powinien również regularnie zmieniać hasła użytkowników VPN oraz niezwłocznie dezaktywować konta osób, które utraciły uprawnienia dostępu. W RouterOS warto skonfigurować limit nieudanych prób logowania z użyciem mechanizmu address list, który automatycznie blokuje adres IP źródłowego po przekroczeniu progu błędnych logowań.

Ograniczenie dostępu do serwera PPTP wyłącznie do zaufanych adresów IP źródłowych jest jednym z najskuteczniejszych sposobów redukcji ryzyka ataków, ponieważ eliminuje możliwość prób logowania z nieznanych lokalizacji. Zmiana domyślnego portu TCP 1723 na inny, mniej oczywisty numer portu, utrudnia działanie automatycznym skanerom sieciowym poszukującym serwerów VPN, choć nie stanowi skutecznej ochrony przed zdeterminowanym atakującym. Dodatkowo zaleca się wdrożenie monitorowania logów serwera w czasie rzeczywistym z wykorzystaniem narzędzi takich jak Syslog lub skryptów wysyłających powiadomienia o nietypowej aktywności, co umożliwia szybką reakcję na próby włamania.

39/40 Bezpieczne alternatywy dla PPTP
  • Naturalnym następcą w świecie Windows jest L2TP/IPSec.
  • Rozwiązaniem odpornym na blokady firewalli (port 443) jest protokół SSTP.
  • Szczegółowe omówienie obu technologii nastąpi w dalszej części kursu.
  • Mimo wad, znajomość mechanizmów działania PPTP jest fundamentem wiedzy o tunelowaniu danych.

Naturalnym następcą protokołu PPTP w ekosystemie Windows jest L2TP/IPSec, który łączy elastyczność tunelowania PPP z solidnymi mechanizmami kryptograficznymi pakietu IPSec, w tym szyfrowaniem AES i uwierzytelnianiem za pomocą certyfikatów lub kluczy pre-shared. L2TP/IPSec eliminuje wszystkie główne słabości PPTP - zamiast słabego RC4 stosuje AES, zamiast podatnego MS-CHAPv2 wykorzystuje certyfikaty X.509 lub Kerberos, a także zapewnia Perfect Forward Secrecy, chroniąc przeszłe sesje przed odszyfrowaniem po kompromitacji klucza długoterminowego. Niestety, L2TP/IPSec charakteryzuje się wyższym narzutem wydajnościowym i większą złożonością konfiguracji, szczególnie w zakresie zarządzania certyfikatami i konfiguracji IPSec.

Alternatywą dla scenariuszy wymagających łatwej konfiguracji i przechodzenia przez zapory sieciowe jest protokół SSTP (Secure Socket Tunneling Protocol), który wykorzystuje port TCP 443 i protokół HTTPS, co czyni go praktycznie nieblokowalnym na większości firewalli korporacyjnych. SSTP oferuje solidne szyfrowanie z użyciem SSL/TLS z certyfikatami serwera, zapewniając poziom bezpieczeństwa porównywalny z bezpiecznymi połączeniami HTTPS stosowanymi w bankowości internetowej. W nowoczesnych środowiskach coraz większą popularność zdobywa również WireGuard, który łączy prostotę konfiguracji z nowoczesną kryptografią opartą na protokole Noise i algorytmie Curve25519, oferując przy tym doskonałą wydajność nawet na słabszych urządzeniach.

40/40 Podsumowanie części 2
  • Przeanalizowaliśmy działanie protokołu GRE - uniwersalnego nośnika danych (IP Protocol 47).
  • Omówiliśmy mechanizmy negocjacji i autoryzacji w standardzie PPP (LCP, IPCP).
  • Poznaliśmy budowę systemu PPTP (kanał sterowania TCP oraz tunel danych GRE).
  • Poznaliśmy zasady konfiguracji serwera oraz klienta.
  • Zidentyfikowaliśmy kluczowe zagrożenia bezpieczeństwa wynikające z konstrukcji PPTP.
  • Zadanie domowe: Spróbuj uruchomić i nawiązać połączenie VPN PPTP z użyciem wbudowanego klienta systemu mobilnego.

W drugiej części kursu przeanalizowaliśmy trzy kluczowe technologie sieciowe - GRE, PPP i PPTP - które stanowią fundament historycznego i technicznego rozwoju protokołów VPN. Generic Routing Encapsulation okazał się być niezwykle elastycznym protokołem tunelowania, zdolnym do przenoszenia praktycznie dowolnego protokołu warstwy wyższej, ale pozbawionym jakichkolwiek mechanizmów bezpieczeństwa. Protokół PPP dostarczył nam wglądu w mechanizmy negocjacji połączenia, uwierzytelniania i adresacji, które są wykorzystywane przez wiele nowoczesnych protokołów VPN, w tym L2TP, SSTP i PPPoE. PPTP, mimo swoich poważnych wad bezpieczeństwa wynikających ze stosowania słabych algorytmów kryptograficznych, pozostaje interesującym przypadkiem studyjnym ilustrującym ewolucję technologii VPN.

Z praktycznego punktu widzenia, znajomość konfiguracji GRE i PPTP w systemie RouterOS jest cenną umiejętnością w środowiskach, gdzie starsze protokoły są wciąż używane z powodów kompatybilności lub ograniczeń budżetowych. Jednocześnie świadomość ograniczeń bezpieczeństwa tych protokołów pozwala na podejmowanie świadomych decyzji architektonicznych i migrację do bezpieczniejszych rozwiązań tam, gdzie jest to uzasadnione. Zachęcamy do wykonania zadania domowego polegającego na samodzielnym zestawieniu tunelu PPTP z wykorzystaniem klienta mobilnego, co pozwoli na praktyczne utrwalenie omawianych zagadnień przed przejściem do bardziej zaawansowanych protokołów w kolejnej części kursu.