PPTP-server bak en hjemmeruter: fiks 1723 og GRE først
Kjør PPTP bak en hjemmeruter: TCP 1723, IP-protokoll 47, gjennomstrømningsfeltet og MTU-aritmetikken, pluss når L2TP eller OpenVPN er den bedre bytten.
PPTP bak en hjemmeruter feiler på to uavhengige måter, og å blande dem koster en hel kveld. Den ene feilen er et hull i videresendingen: ruteren slipper TCP 1723 gjennom og dropper IP-protokoll 47, så klienten henger på feil 619. Den andre er et størrelsesproblem: tunnelen kommer opp, autentiserer, og fryser deretter når en pakke i full størrelse må passere. Å finne ut hvilken av dem du har, er det første virkelige steget; resten sammenligner hva ruteren din kan uttrykke, ikke hvilket merke som er bedre.
To transportveier, og bare én av dem har en port
PPTP deler seg i to transportveier: en kontrollforbindelse på TCP 1723 og PPP-rammer pakket i utvidet GRE, som er IP-protokoll 47. GRE har ikke noe portnummer, så en regel skrevet som videresending av port 1723 kan ikke dekke den, uansett hvordan nettgrensesnittet formulerer feltet. En forbrukerruter tilbyr vanligvis et felt kalt PPTP-gjennomstrømning i stedet for en protokollregel, og det feltet gjør to ting: det slipper protokoll 47 gjennom brannmuren, og det lærer NAT å følge GRE-strømmen. På en Linux-ruter er disse oppgavene separate moduler og separate regler, og derfor gir en halvkonfigurert gjennomstrømning fortsatt en fungerende kontrollkanal. Finn ut hvilken halvdel som er til stede før du endrer noe.
Serverens egen brannmur må også tillate protokoll 47 fra ruterens adresse. En vertsbrannmur som bare godtar 1723/tcp gjenskaper feil 619 fra innsiden av LAN-et, noe som får en brutt videresending og en brutt vertsregel til å se 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'
Hvis modulene mangler, laster du dem med sudo modprobe nf_conntrack_proto_gre nf_nat_proto_gre og gjør lastingen varig, fordi en omstart som glemmer hjelperen gjør en fungerende tunnel til feil 619 igjen. Videresendingsregelen skal bare godta protokoll 47 mot serverens adresse, ikke hele LAN-et. Definisjonen i RFC 2637 skiller kontroll- og datastien, og derfor beskriver ingen enkelt portvideresendelsesskjerm PPTP fullt ut.
Gjennomstrømningsfelt eller en uttrykkelig protokollregel
Et gjennomstrømningsfelt som bare åpner brannmuren, er nærmere det riktige enn en ALG som skriver om anrops-ID-er. Brannmurhalvdelen er forutsigbar, fordi protokoll 47 enten godtas eller droppes, og tellerne viser hvilket. Omskrivingshalvdelen er der leverandører skiller seg, fordi PPTP-anrops-ID-er er per tunnel, og en NAT som redigerer dem, må følge hvert anrop den berører. Når én klient kobler til og to ikke, er ALG-en den første mistenkte.
En destinasjons-NAT-regel for 1723 har også et eierproblem. Hvis en gammel regel fortsatt sender 1723 til en vert som sluttet å kjøre serveren, lander pakkene på en lukket port, og ruterens egen PPTP-tjeneste slutter å svare, noe som leses som en brannmurfeil, men egentlig er et utdatert mål. Les regelen og destinasjonen før du legger til en ny. På rutere som selv avslutter PPTP, konkurrerer WAN-regelen med den innebygde tjenesten, så velg én eier for 1723 og protokoll 47.
To klienter bak samme NAT er tilfellet som skiller en enkel videresending fra en smart. Å videresende protokoll 47 uten å skrive om anrops-ID-er oppfører seg vanligvis bedre enn en hjelper som prøver å rette dem.
Mål tunnelen før du gir ruteren skylden
PPTP krymper den brukbare nyttelasten, og krympingen er aritmetikk, ikke mystikk. Hver tunnelpakke bærer et ytre IP-hode, et utvidet GRE-hode, et PPP-hode og, med kryptering, et MPPE-hode. Når stien ikke kan bære den resulterende rammen, går små pakker gjennom, innloggingen fullføres, og økten stopper første gang en filoverføring eller et TLS-håndtrykk sender en pakke i full størrelse.
Regn ut tallet i stedet for å gjette. Utvidet GRE koster 8 byte, PPP koster 4, MPPE koster 4, og det ytre IP-hodet koster 20, så tunnelen spiser 36 byte før noen nyttelast. På et PPPoE-WAN som slutter på 1492, er den største PPP-MTU-en som passer 1492 minus 36, altså 1456. Sett mtu og mru til den verdien i PPP-innstillingene, og test på nytt med en ping uten fragmentering.
ping -M do -s 1464 198.51.100.7
grep -E '^(mtu|mru)' /etc/ppp/options.pptpd
Pingen måler stien, ikke tunnelen: 1464 byte nyttelast pluss 28 byte IP- og ICMP-hoder fyller nøyaktig en ramme på 1492 byte. Hvis den pingen feiler, senker du tallet til den går gjennom, og trekker 36 fra resultatet. En tunnel-MTU satt over stiens grense gir frysing uten en eneste logglinje som nevner størrelse.
PPTP, L2TP/IPsec eller OpenVPN på samme ruter
Den samme ruteren kan bære hvilken som helst av de tre vanlige tunnelene, og forskjellen er hva den må uttrykke. PPTP trenger to regler i to ulike lag. L2TP over IPsec trenger UDP 500 og 4500 for nøkkelutvekslingen og, med mindre NAT-T bærer det, protokoll 50 for nyttelasten. OpenVPN trenger én UDP-port og ingen hjelper i det hele tatt.
| 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 |
L2TP-kolonnen er ikke automatisk vennligere enn GRE. ESP er IP-protokoll 50 og har heller ingen port, så en ruter som har problemer med protokoll 47, kan ha problemer med protokoll 50 av samme grunn. NAT-T finnes for å pakke ESP inn i UDP 4500, og når begge ender støtter det, blir protokoll-50-regelen unødvendig. Det er en egenskap ved endepunktene, ikke ved ruterens PPTP-felt. Bekreft hvilken innkapsling klienten faktisk forhandlet, før du skriver regler for begge.
OpenVPN er alternativet med færrest bevegelige deler på rutersiden. Én UDP-port, én videresending, ingen tilkoblingssporingshjelper og ingen omskriving av anrops-ID-er. Bytten er en klient som må installeres i stedet for en innebygd oppringer, og det er ofte den eneste grunnen til at PPTP blir værende i samtalen.
Hva som skal repareres, og hva som skal byttes ut
Å rette videresendingen og MTU-en gir deg en tunnel som virker, ikke en du bør beholde. PPTPs MSCHAPv2-autentisering har vært angripelig i mange år, og en fungerende tunnel flytter på legitimasjonsdata som kan gjenopprettes offline. Hvis den eksterne enheten kan kjøre L2TP/IPsec eller OpenVPN, bør du behandle reparasjonen som et midlertidig tiltak med en dato på.
Beslutningen avhenger av hva den andre enden støtter, og hvor lenge ordningen må vare. Et gammelt apparat som bare snakker PPTP, får reparasjonen; alt som kan installere en klient, blir migrert.
Før du lukker saken, må du bekrefte at klienten overlever en stor overføring og ikke bare en innlogging, og at ruteren fortsatt holder protokoll-47-regelen etter en omstart. En tunnel som klarer én filkopi og dør etter neste fastvareoppdatering, ble aldri ferdig.