Serwer PPTP za domowym routerem: najpierw napraw 1723 i GRE
Uruchom PPTP za domowym routerem: TCP 1723, protokół IP 47, pole przekazywania i arytmetyka MTU, a także kiedy L2TP lub OpenVPN to lepsza wymiana.
PPTP za domowym routerem zawodzi na dwa niepowiązane sposoby, a mieszanie ich kosztuje cały wieczór. Jedna awaria to luka w przekazywaniu: router przepuszcza TCP 1723 i odrzuca protokół IP 47, więc klient wisi na błędzie 619. Druga to problem rozmiaru: tunel wstaje, uwierzytelnia się, a potem zastyga, gdy musi przejść pakiet pełnego rozmiaru. Ustalenie, który z nich masz, to pierwszy prawdziwy krok; reszta porównuje, co potrafi wyrazić twój router, a nie która marka jest lepsza.
Dwa transporty, a tylko jeden ma port
PPTP dzieli się na dwa transporty: połączenie sterujące na TCP 1723 oraz ramki PPP opakowane w rozszerzony GRE, czyli protokół IP 47. GRE nie ma numeru portu, więc reguła zapisana jako przekazywanie portu 1723 nie może go objąć, niezależnie od tego, jak interfejs webowy nazwie to pole. Router domowy zwykle oferuje pole o nazwie przepuszczanie PPTP zamiast reguły protokołu, a to pole robi dwie rzeczy: przepuszcza protokół 47 przez zaporę i uczy NAT śledzenia przepływu GRE. Na routerze Linux te zadania to osobne moduły i osobne reguły, dlatego połowicznie skonfigurowane przepuszczanie wciąż daje działający kanał sterujący. Ustal, której połowy brakuje, zanim cokolwiek zmienisz.
Zapora samego serwera też musi zezwalać na protokół 47 z adresu routera. Zapora hosta, która przyjmuje tylko 1723/tcp, odtwarza błąd 619 od wewnątrz LAN, przez co zepsute przekazywanie i zepsuta reguła hosta wyglądają identycznie.
sudo iptables -S FORWARD | grep -i gre
sudo nft list ruleset | grep -i gre
lsmod | grep -E 'nf_conntrack_proto_gre|nf_nat_proto_gre'
Jeśli modułów brakuje, wczytaj je przez sudo modprobe nf_conntrack_proto_gre nf_nat_proto_gre i uczyń wczytywanie trwałym, ponieważ restart, który zapomina pomocnika, zamienia działający tunel z powrotem w błąd 619. Reguła przekazywania musi przyjmować protokół 47 tylko w stronę adresu serwera, a nie całego LAN. Definicja w RFC 2637 rozdziela ścieżkę sterowania i danych, dlatego żaden pojedynczy ekran przekazywania portów nie opisuje PPTP w pełni.
Pole przepuszczania czy jawna reguła protokołu
Pole przepuszczania, które tylko otwiera zaporę, jest bliższe poprawnemu niż ALG przepisujący identyfikatory wywołań. Połowa zaporowa jest przewidywalna, bo protokół 47 jest albo przyjmowany, albo odrzucany, a liczniki mówią który. Połowa przepisująca to miejsce, w którym producenci się różnią, bo identyfikatory wywołań PPTP są dla każdego tunelu i NAT, który je edytuje, musi śledzić każde dotknięte wywołanie. Gdy jeden klient się łączy, a dwa nie, ALG jest pierwszym podejrzanym.
Reguła NAT celu dla 1723 ma też problem własności. Jeśli stara reguła nadal wysyła 1723 do hosta, który przestał uruchamiać serwer, pakiety trafiają na zamknięty port, a własna usługa PPTP routera przestaje odpowiadać, co czyta się jak awaria zapory, ale w rzeczywistości jest nieaktualnym celem. Przeczytaj regułę i jej cel, zanim dodasz drugą. Na routerach, które same kończą PPTP, reguła WAN konkuruje z usługą wbudowaną, więc wybierz jednego właściciela dla 1723 i protokołu 47.
Dwaj klienci za tym samym NAT to przypadek, który oddziela proste przekazywanie od sprytnego. Przekazywanie protokołu 47 bez przepisywania identyfikatorów wywołań zwykle zachowuje się lepiej niż pomocnik, który próbuje je naprawić.
Zmierz tunel, zanim obwinisz router
PPTP zmniejsza użyteczny ładunek, a to zmniejszenie jest arytmetyką, nie zagadką. Każdy pakiet tunelu niesie zewnętrzny nagłówek IP, rozszerzony nagłówek GRE, nagłówek PPP i, przy szyfrowaniu, nagłówek MPPE. Gdy ścieżka nie może przenieść powstałej ramki, małe pakiety przechodzą, logowanie się kończy, a sesja zatrzymuje się za pierwszym razem, gdy transfer pliku lub uścisk dłoni TLS wyśle pakiet pełnego rozmiaru.
Policz liczbę zamiast zgadywać. Rozszerzony GRE kosztuje 8 bajtów, PPP kosztuje 4, MPPE kosztuje 4, a zewnętrzny nagłówek IP kosztuje 20, więc tunel zjada 36 bajtów przed jakimkolwiek ładunkiem. Na WAN PPPoE kończącym się na 1492 największy mieszczący się PPP MTU to 1492 minus 36, czyli 1456. Ustaw mtu i mru na tę wartość w opcjach PPP i przetestuj ponownie pingiem bez fragmentacji.
ping -M do -s 1464 198.51.100.7
grep -E '^(mtu|mru)' /etc/ppp/options.pptpd
Ping mierzy ścieżkę, nie tunel: 1464 bajty ładunku plus 28 bajtów nagłówków IP i ICMP wypełniają dokładnie ramkę 1492 bajtów. Jeśli ten ping zawiedzie, obniżaj liczbę, aż przejdzie, i odejmij 36 od wyniku. MTU tunelu ustawione powyżej limitu ścieżki daje zastygnięcie bez ani jednej linii logu wspominającej rozmiar.
PPTP, L2TP/IPsec lub OpenVPN na tym samym routerze
Ten sam router może nieść każdy z trzech typowych tuneli, a różnica polega na tym, co musi wyrazić. PPTP wymaga dwóch reguł w dwóch różnych warstwach. L2TP po IPsec wymaga UDP 500 i 4500 do wymiany kluczy oraz, jeśli NAT-T tego nie niesie, protokołu 50 dla ładunku. OpenVPN wymaga jednego portu UDP i w ogóle żadnego pomocnika.
| Tunnel | What the router must allow | Practical note |
|---|---|---|
| PPTP | TCP 1723 and IP protocol 47 | Two transports, two rules |
| L2TP/IPsec | UDP 500, UDP 4500, protocol 50 without NAT-T | ESP has no port either |
| OpenVPN | UDP 1194 or a chosen TCP port | Single rule, no helper |
Kolumna L2TP nie jest automatycznie przyjaźniejsza niż GRE. ESP to protokół IP 50 i też nie ma portu, więc router, który ma trudności z protokołem 47, może mieć je z protokołem 50 z tego samego powodu. NAT-T istnieje, aby opakować ESP w UDP 4500, a gdy oba końce to obsługują, reguła protokołu 50 staje się zbędna. To właściwość końców, a nie pola PPTP routera. Potwierdź, jakie kapsułowanie klient faktycznie wynegocjował, zanim napiszesz reguły dla obu.
OpenVPN to opcja z najmniejszą liczbą ruchomych części po stronie routera. Jeden port UDP, jedno przekazywanie, żaden pomocnik śledzenia połączeń i żadne przepisywanie identyfikatorów wywołań. Wymianą jest klient, który trzeba zainstalować zamiast wbudowanego wybieraka, i to często jedyny powód, dla którego PPTP zostaje w rozmowie.
Co naprawić, a co wymienić
Naprawienie przekazywania i MTU daje tunel, który działa, a nie taki, który warto zachować. Uwierzytelnianie MSCHAPv2 w PPTP jest podatne na ataki od lat, a działający tunel przenosi dane logowania, które można odzyskać offline. Jeśli zdalne urządzenie potrafi uruchomić L2TP/IPsec lub OpenVPN, traktuj naprawę jako środek tymczasowy z datą.
Decyzja sprowadza się do tego, co obsługuje drugi koniec i jak długo układ ma przetrwać. Stare urządzenie mówiące tylko PPTP dostaje naprawę; wszystko, na czym można zainstalować klienta, jest migrowane.
Przed zamknięciem zgłoszenia potwierdź, że klient przetrwa duży transfer, a nie tylko logowanie, i że router po restarcie nadal trzyma regułę protokołu 47. Tunel, który przechodzi jedną kopię pliku i umiera po następnej aktualizacji firmware, nigdy nie został ukończony.