Server PPTP za domácim routerom: najprv opravte 1723 a GRE
Prevádzkujte PPTP za domácim routerom: TCP 1723, IP protokol 47, zaškrtávacie pole priechodu a aritmetika MTU, plus kedy je L2TP alebo OpenVPN lepšia voľba.
PPTP za domácim routerom zlyháva dvoma nesúvisiacimi spôsobmi a ich zámena stojí celý večer. Jedna porucha je medzera v preposielaní: router prepustí TCP 1723 a zahodí IP protokol 47, takže klient zostane visieť na chybe 619. Druhá je problém veľkosti: tunel sa zdvihne, overí a potom zamrzne, keď musí prejsť paket plnej veľkosti. Zistiť, ktorú z nich máte, je prvý skutočný krok; zvyšok porovnáva, čo váš router dokáže vyjadriť, nie ktorá značka je lepšia.
Dva transporty a iba jeden z nich má port
PPTP sa delí na dva transporty: riadiace spojenie na TCP 1723 a rámce PPP zabalené do rozšíreného GRE, čiže IP protokol 47. GRE nemá číslo portu, preto pravidlo napísané ako presmerovanie portu 1723 ho nemôže pokryť, nech webové rozhranie pole nazve akokoľvek. Spotrebiteľský router zvyčajne ponúka zaškrtávacie pole s názvom priechod PPTP namiesto pravidla protokolu a toto pole robí dve veci: prepúšťa protokol 47 cez firewall a učí NAT sledovať tok GRE. Na linuxovom routeri sú to oddelené moduly a oddelené pravidlá, a preto polovičato nastavený priechod stále dáva fungujúci riadiaci kanál. Zistite, ktorá polovica existuje, skôr než čokoľvek zmeníte.
Vlastný firewall servera musí tiež povoliť protokol 47 z adresy routera. Firewall hostiteľa, ktorý prijíma iba 1723/tcp, reprodukuje chybu 619 zvnútra LAN, takže pokazené preposielanie a pokazené pravidlo hostiteľa vyzerajú rovnako.
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'
Ak moduly chýbajú, načítajte ich pomocou sudo modprobe nf_conntrack_proto_gre nf_nat_proto_gre a načítanie urobte trvalým, pretože reštart, ktorý zabudne pomocníka, vráti fungujúci tunel späť do chyby 619. Pravidlo preposielania musí prijímať protokol 47 len smerom k adrese servera, nie celú LAN. Definícia v RFC 2637 oddeľuje riadiacu a dátovú cestu, a preto žiadna obrazovka presmerovania portu neopisuje PPTP úplne.
Zaškrtávacie pole priechodu alebo výslovné pravidlo protokolu
Zaškrtávacie pole priechodu, ktoré iba otvorí firewall, je bližšie správnemu než ALG, ktorý prepisuje identifikátory volania. Polovica s firewallom je predvídateľná, lebo protokol 47 sa buď prijme, alebo zahodí, a počítadlá povedia ktorý. Polovica s prepisom je miesto, kde sa výrobcovia líšia, lebo identifikátory volania PPTP sú pre každý tunel a NAT, ktorý ich upravuje, musí sledovať každé volanie, ktorého sa dotkne. Keď sa pripojí jeden klient a dvaja nie, ALG je prvý podozrivý.
Pravidlo cieľového NAT pre 1723 má tiež problém vlastníctva. Ak staré pravidlo stále posiela 1723 hostiteľovi, ktorý prestal prevádzkovať server, pakety dopadnú na zatvorený port a vlastná služba PPTP routera prestane odpovedať, čo vyzerá ako porucha firewallu, ale v skutočnosti je to zastaraný cieľ. Prečítajte pravidlo a jeho cieľ, skôr než pridáte druhé. Na routeroch, ktoré PPTP ukončujú samy, súťaží pravidlo WAN so vstavanou službou, preto zvoľte jedného vlastníka pre 1723 a protokol 47.
Dvaja klienti za rovnakým NAT sú prípad, ktorý oddeľuje prosté preposielanie od šikovného. Preposielanie protokolu 47 bez prepisu identifikátorov volania sa zvyčajne správa lepšie než pomocník, ktorý sa ich snaží opraviť.
Zmerajte tunel, skôr než obviníte router
PPTP zmenšuje užitočný náklad a toto zmenšenie je aritmetika, nie záhada. Každý paket tunela nesie vonkajšiu IP hlavičku, rozšírenú GRE hlavičku, PPP hlavičku a pri šifrovaní aj MPPE hlavičku. Keď cesta nedokáže preniesť výsledný rámec, malé pakety prejdú, prihlásenie sa dokončí a relácia sa zastaví prvý raz, keď prenos súboru alebo TLS handshake pošle paket plnej veľkosti.
Vypočítajte číslo namiesto hádania. Rozšírené GRE stojí 8 bajtov, PPP stojí 4, MPPE stojí 4 a vonkajšia IP hlavička stojí 20, takže tunel zje 36 bajtov pred akýmkoľvek nákladom. Na PPPoE WAN, ktorý končí na 1492, je najväčšie PPP MTU, ktoré sa vmestí, 1492 mínus 36, teda 1456. Nastavte mtu a mru na túto hodnotu v možnostiach PPP a otestujte znova pingom bez fragmentácie.
ping -M do -s 1464 198.51.100.7
grep -E '^(mtu|mru)' /etc/ppp/options.pptpd
Ping meria cestu, nie tunel: 1464 bajtov nákladu plus 28 bajtov IP a ICMP hlavičiek presne vyplní rámec s 1492 bajtmi. Ak tento ping zlyhá, znižujte číslo, kým neprejde, a od výsledku odpočítajte 36. MTU tunela nastavené nad limit cesty spôsobí zamrznutie bez jediného riadku v logu, ktorý by spomínal veľkosť.
PPTP, L2TP/IPsec alebo OpenVPN na tom istom routeri
Ten istý router unesie ktorýkoľvek z troch bežných tunelov a rozdiel je v tom, čo musí vyjadriť. PPTP potrebuje dve pravidlá v dvoch rôznych vrstvách. L2TP cez IPsec potrebuje UDP 500 a 4500 na výmenu kľúčov a, ak ho nenesie NAT-T, protokol 50 pre náklad. OpenVPN potrebuje jeden port UDP a vôbec žiadneho pomocníka.
| 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 |
Stĺpec L2TP nie je automaticky priateľskejší než GRE. ESP je IP protokol 50 a tiež nemá port, takže router, ktorý má ťažkosti s protokolom 47, môže mať rovnaký problém s protokolom 50. NAT-T existuje preto, aby zabalil ESP do UDP 4500, a keď ho oba konce podporujú, pravidlo pre protokol 50 prestane byť potrebné. To je vlastnosť koncových bodov, nie zaškrtávacieho poľa PPTP na routeri. Potvrďte, akú enkapsuláciu klient skutočne vyjednal, skôr než napíšete pravidlá pre oboje.
OpenVPN je variant s najmenším počtom pohyblivých častí na strane routera. Jeden port UDP, jedno preposielanie, žiadny pomocník na sledovanie spojení a žiadny prepis identifikátorov volania. Cenou je klient, ktorý sa musí nainštalovať namiesto vstavaného vytáčania, a to je často jediný dôvod, prečo PPTP zostáva v rozhovore.
Čo opraviť a čo nahradiť
Oprava preposielania a MTU vám dá tunel, ktorý funguje, nie ten, ktorý by ste mali držať. Overovanie MSCHAPv2 pri PPTP je napadnuteľné už roky a fungujúci tunel prenáša prihlasovacie údaje, ktoré sa dajú obnoviť offline. Ak vzdialené zariadenie dokáže prevádzkovať L2TP/IPsec alebo OpenVPN, berte opravu ako dočasné opatrenie s dátumom.
Rozhodnutie sa zúži na to, čo podporuje vzdialený koniec a ako dlho má usporiadanie vydržať. Zastarané zariadenie, ktoré hovorí iba PPTP, dostane opravu; všetko, na čo sa dá nainštalovať klient, sa migruje.
Pred zatvorením tiketu overte, že klient prežije veľký prenos, nielen prihlásenie, a že router po reštarte stále drží pravidlo protokolu 47. Tunel, ktorý prejde jedným kopírovaním súboru a zomrie po ďalšej aktualizácii firmvéru, nebol nikdy dokončený.