A PPTP csatlakozik, majd megakad a Linux NAT mögött: a GRE-segéd
A TCP 1723 csatlakozik, és az adatút meghal: a PPTP GRE-ben utazik, amelynek nincsenek portjai. Töltse be a segédeket, csatolja őket kifejezetten, és nyissa meg a 47-es protokollt.
Valaki átirányítja az 1723-at, a kliens eléri a szervert, megkezdődik a hitelesítés, aztán minden hiba nélkül megáll. A kézenfekvő következtetés a rossz jelszó, ezért a jelszót háromszor újra beírják. Az átirányítás rendben volt, és a hitelesítő adatok is rendben voltak. Ami elromlott, az egy második protokoll, amelyet az átirányítás soha nem fedett le, és egy kernel-alapértelmezés, amely csendben felhagyott a segítségével.
Az átirányítás soha nem volt a probléma
A portátirányítási szabály TCP- vagy UDP-forgalmat ír le. Nem tud leírni olyan hasznos terhet, amely a munkamenet közepén másik IP-protokollra vált, és a PPTP pontosan ezt teszi.
Ezért tűnik egészségesnek a kapcsolat egészen addig a pillanatig, amikor megakad. Az a rész, amelyet egy portszabály irányíthat, sikerült, és az a rész, amelyet nem irányíthat, az a rész, amely elbukott.
TCP a vezérléshez, GRE az adatokhoz
A hívást a TCP 1723 felett tárgyalják. Amint feláll, a hasznos teher átkerül a GRE-be, a 47-es IP-protokollba, amely egyáltalán nem hordoz portszámokat. Egy portokra épülő szabálynak nincs mihez illeszkednie.
Amit a GRE hordoz, az egy hívásazonosító a fejlécében, és a NAT-fordítónak ezt a mezőt mindkét irányban konzisztensen át kell írnia, különben a munkamenet két fele felhagy az egyetértéssel. Az egyik irány átírva, a másik nem, olyan munkamenetet eredményez, amely hitelesít, majd minden adatcsomagot eldob. Pontosan ez a tünet formája: siker, majd csend.
A csupasz GRE PPTP nélkül nem igényel ilyen átírást, ezért egy egyszerű GRE-alagút működhet olyan routeren keresztül, amely ugyanazon az útvonalon elbukik egy PPTP-kliensnél.
Négy modul és egy sysctl, amely kikapcsolta őket
Két modul kezeli a keretezést, nf_conntrack_proto_gre és nf_nat_proto_gre. További kettő kezeli a hívásazonosítót, nf_conntrack_pptp és nf_nat_pptp. Az utóbbi betöltése a többit függőségeken keresztül behúzza, ezért a modullistának mind a négyet mutatnia kell.
A régebbi útmutatások a 2.6 korszak ip_ előtagját használják. Ezek a parancsok úgy tűnhetnek, mintha futnának, miközben semmit nem töltenek be, ezért a betöltött listát ellenőrizze, ne a kilépési állapotot.
A betöltésük már nem elég. A Linux 4.7 óta a sysctl net.netfilter.nf_conntrack_helper alapértéke 0, ami kikapcsolja az automatikus segéd-hozzárendelést az új folyamokhoz. Egy routeren lehet minden modul, és mégis semmit sem fordít. Ellenőrizze a tényleges értéket, mielőtt újra a modullistára nézne.
Vagy kapcsolja vissza globálisan az automatikus hozzárendelést, vagy csatolja a segédet azokhoz a folyamokhoz, amelyeknek szükségük van rá, és hagyjon minden mást békén:
iptables -t raw -A PREROUTING -p tcp --dport 1723 -j CT --helper pptpA második lehetőség az előnyösebb. A viselkedést a PPTP-forgalomra korlátozza ahelyett, hogy az egész routeren újraengedélyezné az automatikus hozzárendelést.
Olyan protokoll megnyitása, amelynek nincsenek portjai
Az 1723-at engedélyező tűzfal-szabály semmit sem mond a 47-es protokollról. A firewalld alatt engedélyezze a protokollt a kliens felé néző zónában. Egyszerű iptables esetén fogadja el a gre protokollt a bemeneti láncban.
Utána rögzítsen mindkét oldalon. A klienst elhagyó csomagok érkező válaszok nélkül azt jelentik, hogy a visszaút szűrve van, és ez más hiba, mint az elutasított hitelesítő adat.
Csatlakozás után a mérethatár
A GRE fejlécet szúr be, és a benne lévő PPP még többet ad hozzá, ezért egy működő kapcsolat jóval 1500 alatti MTU-t jelent. A kis válaszok betöltődnek, a nagyok megakadnak, ami egy második, független problémának tűnik, amely abban a pillanatban jelenik meg, amikor az elsőt megoldják.
Olvassa le az MTU-t a kliens PPP-adapterén, és hangolja össze a router saját számításával ahelyett, hogy addig csökkentené a számokat, amíg valami működni kezd. A teljes méretű csomagok, amelyek úgy mennek ki, hogy semmi nem jön vissza, erre a határra mutatnak, nem a fordításra.
Az útvonal megjavítása munkába állítja a felhasználót, és nem teszi jó választássá a PPTP-t. Az MS-CHAPv2 és az RC4 régóta elavult, ezért tekintse a modulok betöltését ideiglenes javításnak, és tervezze meg az áttérést egy karbantartott protokollra.