PPTP bak ein heimeruter feilar på to uavhengige måtar, og å blande dei kostar ein heil kveld. Den eine feilen er eit hol i vidaresendinga: ruteren slepp TCP 1723 gjennom og droppar IP-protokoll 47, så klienten heng på feil 619. Den andre er eit storleiksproblem: tunnelen kjem opp, autentiserer, og frys deretter når ein pakke i full storleik må passere. Å finne ut kva for ein av dei du har, er det første verkelege steget; resten samanliknar kva ruteren din kan uttrykkje, ikkje kva merke som er betre.

To transportvegar, og berre éin av dei har ein port

PPTP deler seg i to transportvegar: ei kontrollforbinding på TCP 1723 og PPP-rammer pakka i utvida GRE, som er IP-protokoll 47. GRE har ikkje noko portnummer, så ein regel skriven som vidaresending av port 1723 kan ikkje dekkje han, uansett korleis nettgrensesnittet formulerer feltet. Ein forbrukarrouter tilbyr vanlegvis eit felt kalla PPTP-gjennomstrøyming i staden for ein protokollregel, og det feltet gjer to ting: det slepp protokoll 47 gjennom brannmuren, og det lærer NAT å følgje GRE-straumen. På ein Linux-router er desse oppgåvene separate modular og separate reglar, og difor gir ein halvkonfigurert gjennomstrøyming framleis ein fungerande kontrollkanal. Finn ut kva for ein halvdel som er til stades før du endrar noko.

Brannmuren til tenaren sjølv må også tillate protokoll 47 frå ruteradressa. Ein vertsbrannmur som berre godtek 1723/tcp, gjenskapar feil 619 frå innsida av LAN-et, noko som får ei broten vidaresending og ein broten vertsregel til å sjå like ut.

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'

Viss modulane manglar, lastar du dei med sudo modprobe nf_conntrack_proto_gre nf_nat_proto_gre og gjer lastinga varig, fordi ein omstart som gløymer hjelparen gjer ein fungerande tunnel til feil 619 igjen. Vidaresendingsregelen skal berre godta protokoll 47 mot adressa til tenaren, ikkje heile LAN-et. Definisjonen i RFC 2637 skil kontroll- og datastien, og difor skildrar ingen einskild portvideresendingsskjerm PPTP fullt ut.

Gjennomstrøymingsfelt eller ein uttrykkeleg protokollregel

Eit gjennomstrøymingsfelt som berre opnar brannmuren, er nærare det rette enn ein ALG som skriv om anrops-ID-ar. Brannmurhalvdelen er føreseieleg, fordi protokoll 47 anten vert godteken eller droppa, og teljarane viser kva. Omskrivingshalvdelen er der leverandørar skil seg, fordi PPTP-anrops-ID-ar er per tunnel, og ein NAT som redigerer dei, må følgje kvar eit anrop han rører. Når éin klient koplar til og to ikkje, er ALG-en den første mistenkte.

Ein destinasjons-NAT-regel for 1723 har også eit eigarproblem. Viss ein gammal regel framleis sender 1723 til ein vert som slutta å køyre tenaren, landar pakkane på ein lukka port, og den eigne PPTP-tenesta til ruteren sluttar å svare, noko som vert lese som ein brannmurfeil, men eigentleg er eit utdatert mål. Les regelen og destinasjonen før du legg til ein ny. På routerar som sjølve avsluttar PPTP, konkurrerer WAN-regelen med den innebygde tenesta, så vel éin eigar for 1723 og protokoll 47.

To klientar bak same NAT er tilfellet som skil ei enkel vidaresending frå ei smart. Å vidaresende protokoll 47 utan å skrive om anrops-ID-ar oppfører seg vanlegvis betre enn ein hjelpar som prøver å rette dei.

Mål tunnelen før du gir ruteren skulda

PPTP krympar den brukbare nyttelasta, og krympinga er aritmetikk, ikkje mystikk. Kvar tunnelpakke ber eit ytre IP-hovud, eit utvida GRE-hovud, eit PPP-hovud og, med kryptering, eit MPPE-hovud. Når stien ikkje kan bere den resulterande ramma, går små pakkar gjennom, innlogginga vert fullført, og økta stoppar første gong ei filoverføring eller eit TLS-handtrykk sender ein pakke i full storleik.

Rekn ut talet i staden for å gjette. Utvida GRE kostar 8 byte, PPP kostar 4, MPPE kostar 4, og det ytre IP-hovudet kostar 20, så tunnelen et 36 byte før noko nyttelast. På eit PPPoE-WAN som sluttar på 1492, er den største PPP-MTU-en som passar 1492 minus 36, altså 1456. Set mtu og mru til den verdien i PPP-innstillingane, og test på nytt med ein ping utan fragmentering.

ping -M do -s 1464 198.51.100.7
grep -E '^(mtu|mru)' /etc/ppp/options.pptpd

Pingen målar stien, ikkje tunnelen: 1464 byte nyttelast pluss 28 byte IP- og ICMP-hovud fyller nøyaktig ei ramme på 1492 byte. Viss den pingen feilar, senkjer du talet til han går gjennom, og trekk 36 frå resultatet. Ein tunnel-MTU sett over grensa til stien gir frysing utan ei einaste logglinje som nemner storleik.

PPTP, L2TP/IPsec eller OpenVPN på same ruter

Den same ruteren kan bere kven som helst av dei tre vanlege tunnelane, og skilnaden er kva han må uttrykkje. PPTP treng to reglar i to ulike lag. L2TP over IPsec treng UDP 500 og 4500 for nøkkelutvekslinga og, med mindre NAT-T ber det, protokoll 50 for nyttelasta. OpenVPN treng éin UDP-port og ingen hjelpar i det heile.

TunnelWhat the router must allowPractical note
PPTPTCP 1723 and IP protocol 47Two transports, two rules
L2TP/IPsecUDP 500, UDP 4500, protocol 50 without NAT-TESP has no port either
OpenVPNUDP 1194 or a chosen TCP portSingle rule, no helper

L2TP-kolonnen er ikkje automatisk venlegare enn GRE. ESP er IP-protokoll 50 og har heller ingen port, så ein ruter som har problem med protokoll 47, kan ha problem med protokoll 50 av same grunn. NAT-T finst for å pakke ESP inn i UDP 4500, og når begge endar støttar det, vert protokoll-50-regelen unødvendig. Det er ein eigenskap ved endepunkta, ikkje ved PPTP-feltet til ruteren. Stadfest kva for ein innkapsling klienten faktisk forhandla, før du skriv reglar for begge.

OpenVPN er alternativet med færrast bevegelege delar på rutarsida. Éin UDP-port, éi vidaresending, ingen hjelpar for tilkoplingssporing og inga omskriving av anrops-ID-ar. Bytten er ein klient som må installerast i staden for ein innebygd oppringar, og det er ofte den einaste grunnen til at PPTP vert verande i samtalen.

Kva som skal reparerast, og kva som skal bytast ut

Å rette vidaresendinga og MTU-en gir deg ein tunnel som verkar, ikkje ein du bør behalde. MSCHAPv2-autentiseringa til PPTP har vore angripbar i mange år, og ein fungerande tunnel flyttar på legitimasjonsdata som kan gjenopprettast offline. Viss den eksterne eininga kan køyre L2TP/IPsec eller OpenVPN, bør du handsame reparasjonen som eit mellombels tiltak med ein dato på.

Avgjerda avheng av kva den andre enden støttar, og kor lenge ordninga må vare. Eit gammalt apparat som berre snakkar PPTP, får reparasjonen; alt som kan installere ein klient, vert migrert.

Før du lukkar saka, må du stadfeste at klienten overlever ei stor overføring og ikkje berre ei innlogging, og at ruteren framleis held protokoll-47-regelen etter ein omstart. Ein tunnel som klarar éin filkopi og døyr etter neste fastvareoppdatering, vart aldri ferdig.

Relaterte artiklar