Niekto presmeruje 1723, klient sa dostane na server, začne sa overovanie a potom sa všetko bez chyby zastaví. Prirodzený záver je nesprávne heslo, takže heslo sa trikrát znova napíše. Presmerovanie bolo v poriadku a prihlasovacie údaje boli v poriadku. Zlomil sa druhý protokol, ktorý presmerovanie nikdy nepokrývalo, a predvolené nastavenie jadra, ktoré s ním ticho prestalo pomáhať.

Presmerovanie nikdy nebolo problémom

Pravidlo presmerovania portu opisuje prevádzku TCP alebo UDP. Nedokáže opísať obsah, ktorý sa v polovici relácie prepne na iný protokol IP, a PPTP robí presne to.

Preto spojenie vyzerá zdravo až do okamihu, keď zamrzne. Časť, ktorú pravidlo portu môže riadiť, uspela, a časť, ktorú riadiť nemôže, je tá časť, ktorá zlyhala.

TCP na riadenie, GRE na dáta

Volanie sa vyjednáva cez TCP 1723. Keď stojí, obsah prejde do GRE, protokolu IP 47, ktorý vôbec nenesie čísla portov. Pravidlo založené na portoch nemá čo porovnávať.

Čo GRE nesie, je identifikátor volania v jeho hlavičke, a NAT prekladač musí toto pole prepisovať konzistentne v oboch smeroch, inak sa obe polovice relácie prestanú zhodovať. Prepísaný jeden smer a neprepísaný druhý vytvorí reláciu, ktorá sa overí a potom zahodí každý dátový paket. Presne tak vyzerá podoba príznaku: úspech, potom ticho.

Holé GRE bez PPTP nepotrebuje také prepisovanie, preto obyčajný tunel GRE môže fungovať cez router, ktorý pre klienta PPTP na tej istej ceste zlyhá.

Štyri moduly a sysctl, ktorý ich vypol

Dva moduly sa starajú o rámcovanie, nf_conntrack_proto_gre a nf_nat_proto_gre. Ďalšie dva sa starajú o identifikátor volania, nf_conntrack_pptp a nf_nat_pptp. Načítanie posledného stiahne ostatné cez závislosti, takže zoznam modulov by mal ukázať všetky štyri.

Staršie návody používajú predponu ip_ z éry 2.6. Tie príkazy sa môžu javiť ako bežiace, hoci nič nenačítavajú, preto kontrolujte načítaný zoznam, nie výstupný stav.

Mať ich načítané už nestačí. Od Linuxu 4.7 má sysctl net.netfilter.nf_conntrack_helper predvolenú hodnotu 0, čo vypína automatické priradenie pomocníka novým tokom. Router môže mať všetky moduly a napriek tomu nič neprekladať. Skontrolujte efektívnu hodnotu, kým sa znova pozriete na zoznam modulov.

Buď znova zapnite automatické priradenie globálne, alebo pripojte pomocníka k tokom, ktoré ho potrebujú, a ostatné nechajte na pokoji:

iptables -t raw -A PREROUTING -p tcp --dport 1723 -j CT --helper pptp

Druhá možnosť je vhodnejšia. Obmedzuje správanie na prevádzku PPTP namiesto opätovného zapnutia automatického priradenia na celom routeri.

Otvorenie protokolu, ktorý nemá porty

Pravidlo firewallu, ktoré povoľuje 1723, nehovorí nič o protokole 47. Vo firewalld povoľte protokol v zóne obrátenej ku klientovi. V bežnom iptables prijmite protokol gre vo vstupnom reťazci.

Potom zachytávajte na oboch stranách. Pakety opúšťajúce klienta bez prichádzajúcich odpovedí znamenajú, že návratová cesta je filtrovaná, a to je iná porucha než odmietnuté prihlasovacie údaje.

Po pripojení limit veľkosti

GRE vkladá hlavičku a PPP v nej pridáva ďalšie, takže funkčné spojenie hlási MTU výrazne pod 1500. Malé odpovede sa načítajú a veľké sa zaseknú, čo vyzerá ako druhý, nesúvisiaci problém, ktorý sa objaví v okamihu, keď je prvý vyriešený.

Prečítajte MTU na klientskom PPP adaptéri a zosúlaďte ju s vlastným výpočtom routera namiesto znižovania čísel, kým niečo nezačne fungovať. Pakety plnej veľkosti, ktoré odchádzajú bez toho, aby sa niečo vrátilo, ukazujú na tento limit, nie na preklad.

Oprava cesty vráti používateľa do práce a nerobí z PPTP dobrú voľbu. MS-CHAPv2 a RC4 sú dávno zastarané, preto berte načítanie modulov ako dočasnú opravu a plánujte prechod na udržiavaný protokol.

Súvisiace články