PPTP už namų maršrutizatoriaus žlunga dviem nesusijusiais būdais, o jų painiojimas kainuoja visą vakarą. Viena gedimo priežastis – persiuntimo spraga: maršrutizatorius praleidžia TCP 1723 ir numeta IP protokolą 47, todėl klientas kabo ties klaida 619. Kita – dydžio problema: tunelis pakyla, autentifikuojasi, o paskui sustingsta, kai turi praeiti viso dydžio paketas. Išsiaiškinti, kuri iš jų pas jus, yra pirmas tikras žingsnis; likusi dalis lygina, ką jūsų maršrutizatorius gali išreikšti, o ne kuri markė geresnė.

Du transportai, ir tik vienas turi prievadą

PPTP skyla į du transportus: valdymo ryšį TCP 1723 ir PPP kadrus, įvyniotus į išplėstą GRE, tai yra IP protokolą 47. GRE neturi prievado numerio, todėl taisyklė, parašyta kaip 1723 prievado persiuntimas, jo neapima, kad ir kaip žiniatinklio sąsaja pavadintų tą lauką. Buitinis maršrutizatorius paprastai siūlo žymimąjį langelį, vardu PPTP pralaida, o ne protokolo taisyklę, ir tas langelis atlieka du darbus: praleidžia 47 protokolą pro ugniagesį ir išmoko NAT sekti GRE srautą. Linux maršrutizatoriuje tie darbai yra atskiri moduliai ir atskiros taisyklės, todėl pusiau sukonfigūruota pralaida vis tiek duoda veikiantį valdymo kanalą. Išsiaiškinkite, kuri pusė yra, prieš ką nors keisdami.

Serverio ugniagesys taip pat turi leisti 47 protokolą iš maršrutizatoriaus adreso. Prieglobos ugniagesys, priimantis tik 1723/tcp, atkuria 619 klaidą iš LAN vidaus, todėl sulaužytas persiuntimas ir sulaužyta prieglobos taisyklė atrodo vienodai.

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'

Jei modulių nėra, įkelkite juos su sudo modprobe nf_conntrack_proto_gre nf_nat_proto_gre ir padarykite įkėlimą nuolatiniu, nes perkrovimas, pamiršęs pagalbininką, vėl paverčia veikiantį tunelį 619 klaida. Persiuntimo taisyklė turi priimti 47 protokolą tik link serverio adreso, o ne visą LAN. RFC 2637 apibrėžimas atskiria valdymo ir duomenų kelią, todėl nė vienas vienas prievado persiuntimo ekranas neaprašo PPTP iki galo.

Pralaidos langelis arba aiški protokolo taisyklė

Pralaidos langelis, kuris tik atidaro ugniagesį, yra arčiau teisingo nei ALG, perrašantis skambučio identifikatorius. Ugniagesio pusė yra nuspėjama, nes 47 protokolas arba priimamas, arba numetamas, o skaitikliai parodo, kuris. Perrašymo pusė yra vieta, kur gamintojai skiriasi, nes PPTP skambučio identifikatoriai yra kiekvienam tuneliui, o juos redaguojantis NAT turi sekti kiekvieną paliestą skambutį. Kai vienas klientas prisijungia, o du ne, ALG yra pirmas įtariamasis.

Paskirties NAT taisyklė 1723 taip pat turi savininko problemą. Jei sena taisyklė vis dar siunčia 1723 prieglobai, kuri nustojo paleisti serverį, paketai patenka į uždarą prievadą ir paties maršrutizatoriaus PPTP tarnyba nustoja atsakinėti, kas atrodo kaip ugniagesio gedimas, bet iš tikrųjų yra pasenęs taikinys. Perskaitykite taisyklę ir jos paskirtį prieš pridėdami antrą. Maršrutizatoriuose, kurie patys užbaigia PPTP, WAN taisyklė konkuruoja su įtaisytąja tarnyba, todėl 1723 ir 47 protokolui pasirinkite vieną savininką.

Du klientai už to paties NAT yra atvejis, skiriantis paprastą persiuntimą nuo gudraus. 47 protokolo persiuntimas neperrašant skambučio identifikatorių paprastai elgiasi geriau nei pagalbininkas, kuris bando juos taisyti.

Išmatuokite tunelį prieš kaltindami maršrutizatorių

PPTP sumažina naudingąją apkrovą, ir tas sumažėjimas yra aritmetika, o ne mįslė. Kiekvienas tunelio paketas neša išorinę IP antraštę, išplėstą GRE antraštę, PPP antraštę ir su šifravimu MPPE antraštę. Kai kelias negali pernešti gaunamo kadro, maži paketai praeina, prisijungimas baigiasi, o sesija sustoja pirmą kartą, kai failo perdavimas ar TLS rankos paspaudimas nusiunčia viso dydžio paketą.

Apskaičiuokite skaičių, o ne spėliokite. Išplėstas GRE kainuoja 8 baitus, PPP – 4, MPPE – 4, o išorinė IP antraštė – 20, todėl tunelis suvalgo 36 baitus prieš bet kokią apkrovą. PPPoE WAN, kuris baigiasi ties 1492, didžiausias telpantis PPP MTU yra 1492 minus 36, tai yra 1456. Nustatykite mtu ir mru į tą reikšmę PPP parinktyse ir išbandykite dar kartą ping be fragmentavimo.

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

Ping matuoja kelią, o ne tunelį: 1464 baitai apkrovos plius 28 baitai IP ir ICMP antraščių tiksliai užpildo 1492 baitų kadrą. Jei tas ping nepavyksta, mažinkite skaičių, kol praeis, ir atimkite 36 iš rezultato. Virš kelio ribos nustatytas tunelio MTU sukelia sustingimą be nė vienos žurnalo eilutės, kuri minėtų dydį.

PPTP, L2TP/IPsec ar OpenVPN tame pačiame maršrutizatoriuje

Tas pats maršrutizatorius gali nešti bet kurį iš trijų įprastų tunelių, o skirtumas yra tai, ką jis turi išreikšti. PPTP reikia dviejų taisyklių dviejuose skirtinguose sluoksniuose. L2TP per IPsec reikia UDP 500 ir 4500 raktų mainams ir, jei NAT-T jo neneša, 50 protokolo apkrovai. OpenVPN reikia vieno UDP prievado ir visai jokio pagalbininko.

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 stulpelis nėra automatiškai draugiškesnis už GRE. ESP yra IP protokolas 50 ir jis taip pat neturi prievado, todėl maršrutizatorius, kuriam sunku su 47 protokolu, gali turėti sunkumų su 50 protokolu dėl tos pačios priežasties. NAT-T egzistuoja tam, kad įvyniotų ESP į UDP 4500, o kai abu galai tai palaiko, 50 protokolo taisyklės nebereikia. Tai galų savybė, o ne maršrutizatoriaus PPTP langelio. Patvirtinkite, kokią inkapsuliaciją klientas iš tikrųjų suderino, prieš rašydami taisykles abiem.

OpenVPN yra variantas su mažiausiai judančių dalių maršrutizatoriaus pusėje. Vienas UDP prievadas, vienas persiuntimas, jokio ryšių sekimo pagalbininko ir jokio skambučio identifikatorių perrašymo. Mainais reikia kliento, kurį reikia įdiegti, o ne įtaisyto rinkiklio, ir dažnai tai vienintelė priežastis, kodėl PPTP lieka pokalbyje.

Ką taisyti ir ką pakeisti

Persiuntimo ir MTU sutvarkymas duoda veikiantį tunelį, o ne tokį, kurį reikėtų laikyti. PPTP MSCHAPv2 autentifikacija jau metus yra pažeidžiama, o veikiantis tunelis perduoda prisijungimo duomenis, kuriuos galima atkurti neprisijungus. Jei nuotolinis įrenginys gali paleisti L2TP/IPsec arba OpenVPN, laikykite taisymą laikina priemone su data.

Sprendimas priklauso nuo to, ką palaiko tolimas galas ir kiek laiko susitarimas turi išsilaikyti. Senas įrenginys, kalbantis tik PPTP, gauna taisymą; viskas, kur galima įdiegti klientą, migruojama.

Prieš uždarydami bilietą patvirtinkite, kad klientas atlaiko didelį perdavimą, o ne tik prisijungimą, ir kad maršrutizatorius po perkrovimo vis dar laiko 47 protokolo taisyklę. Tunelis, kuris praeina vieną failo kopiją ir miršta po kito programinės įrangos atnaujinimo, niekada nebuvo baigtas.

Susiję straipsniai