PPTP i Docker autentiserer, men fører ingen trafikk
PPTP treng TCP 1723 for kontroll og GRE for nyttelasta. I ein container manglar ofte conntrack-hjelparen, så pålogginga verkar og ingenting anna.
Klienten autentiserer, PPP forhandlar om ei adresse, og deretter bevegar ingenting seg. Ping feilar, nettlesaren feilar, og containeren ser tilkopla ut heile tida. Dette mønsteret er ikkje eit rutingtabellproblem, fordi rutingproblem bryt vanlegvis kontrollforbindinga òg. Det er vegen til nyttelasta, og i PPTP er nyttelasta ein annan protokoll enn den som nettopp lukkast.
Fem kontrollar, i den rekkjefølgja som sparar mest tid.
Kontroll 1: skil kontrollkanalen frå nyttelasta
PPTP autentiserer over TCP 1723 og ber deretter PPP-nyttelasta inne i GRE, IP-protokoll 47. GRE er korkje TCP eller UDP, så kvar regel som videresender kontrollporten seier ingenting om det. Ein NAT eller brannmur som slepp 1723 gjennom, kan droppe protokoll 47 utan klage, og økta blir halvbygd på ein måte som ser ut som suksess.
Viss pålogginga verkar og ingen pakke kjem tilbake, anteikn GRE først og prov det etterpå.
Kontroll 2: stadfest hjelparen i kjernen til verten
Tilkoplingssporing kan ikkje knyte ei TCP-kontrollforbinding til ein GRE-straum utan ein hjelpar. Modulen er nf_conntrack_pptp, han bur i kjernen til verten, og å laste han i containerbiletet oppnår ingenting fordi modular gjeld for heile verten. lsmod | grep nf_conntrack_pptp på Docker-verten er kontrollen. Viss han manglar, lastar modprobe nf_conntrack_pptp han for kjernen som køyrer og seier ingenting om neste oppstart, så legg han òg til i konfigurasjonen til verten.
Ein modul som forsvinn ved omstart, blir same saka neste månad.
Kontroll 3: les kjerne-policyen som slår han av
Sjølv med modulen til stades set kjernar frå 4.7 net.netfilter.nf_conntrack_helper som standard til 0, noko som slår av automatisk hjelpartildeling for kvar protokoll. Denne standarden er grunnen til at ein rett installert modul framleis ikkje gjer noko: koden er der, og policyen seier at han ikkje skal brukast. sysctl net.netfilter.nf_conntrack_helper rapporterer gjeldande verdi, og å setje han til 1 under køyring gjer hjelparen tilgjengeleg igjen. Behald verdien gjennom sysctl-konfigurasjonen til verten viss designet tillèt det.
Automatisk tildeling lèt trafikk skape forventningar implisitt, og det er nettopp derfor standarden vart endra. Afgrens han til den klarerte verten, eller bruk ein eksplisitt regel som rettar seg mot hjelparen.
Kontroll 4: sjå på vegen til containeren for seg
Ein lasta hjelpar lagar ikkje ei rute. Containeren treng ein veg til PPTP-tenaren, og videresending på verten må tillate GRE i begge retningar: iptables -L FORWARD -v -n viser om protokoll 47 blir godteken og om teljarane bevegar seg. Masquerade-reglane til Docker omset TCP og UDP, ikkje protokoll 47, så ein brua container kan trenge ei eksplisitt forward-godkjenning og, på nokre vertar, si eiga omsetjingsregel. Stadfest òg at containeren har den PPP-einingsstøtta som biletet ventar.
Les teljarane i staden for regelteksten. Ein regel som finst og ikkje treff noko, er dekorasjon.
Kontroll 5: prov at GRE blir spora, avgjer så om PPTP
Medan klienten køyrer, les sporingstabellen. Ei etablert PPTP-kontrollføring pluss ei relatert GRE-føring betyr at hjelparen koplar straumane og at den gjenverande feilen er ein annan stad. Ei kontrollføring utan GRE-føring betyr at nyttelasta blir droppa eller ikkje spora, noko som bringar deg tilbake til kontrollane 2 og 3.
PPTP sjølv er arv og MS-CHAPv2 er svak. Viss tenaren òg tilbyr L2TP/IPsec, IKEv2 eller WireGuard, fjernar eit byte til ein av dei heile denne klassen med problem.
Der PPTP må bli, fjernar å køyre klienten på verten i staden for i ein container eitt lag med NAT og filtrering, noko som ofte er den billegare avgjerda.