Nekdo preusmeri 1723, odjemalec doseže strežnik, začne se preverjanje pristnosti in nato se vse ustavi brez napake. Naravna ugotovitev je napačno geslo, zato se geslo trikrat znova vtipka. Preusmeritev je bila v redu in poverilnice so bile v redu. Zlomil se je drugi protokol, ki ga preusmeritev ni nikoli pokrila, in privzeta nastavitev jedra, ki je tiho prenehala pomagati z njim.

Preusmeritev ni bila nikoli težava

Pravilo preusmeritve vrat opisuje promet TCP ali UDP. Ne more opisati tovora, ki se na sredini seje preklopi na drug protokol IP, in PPTP počne natanko to.

Zato je povezava videti zdrava vse do trenutka, ko obvisi. Del, ki ga pravilo vrat lahko upravlja, je uspel, del, ki ga ne more upravljati, pa je del, ki je spodletel.

TCP za nadzor, GRE za podatke

Klic se pogaja prek TCP 1723. Ko se dvigne, tovor preide v GRE, protokol IP 47, ki sploh ne nosi številk vrat. Pravilo, ki temelji na vratih, nima česa primerjati.

Kar GRE nosi, je identifikator klica v svoji glavi, in prevajalnik NAT mora to polje dosledno prepisovati v obe smeri, sicer se dve polovici seje prenehata strinjati. Prepisana ena smer in ne druga ustvari sejo, ki se preveri in nato zavrže vsak podatkovni paket. Točno takšna je oblika simptoma: uspeh, nato tišina.

Goli GRE brez PPTP ne potrebuje takega prepisovanja, zato lahko običajen tunel GRE deluje skozi usmerjevalnik, ki spodleti za odjemalca PPTP na isti poti.

Štirje moduli in sysctl, ki jih je izklopil

Dva modula skrbita za okvirjanje, nf_conntrack_proto_gre in nf_nat_proto_gre. Še dva skrbita za identifikator klica, nf_conntrack_pptp in nf_nat_pptp. Nalaganje zadnjega potegne ostale prek odvisnosti, zato bi moral seznam modulov pokazati vse štiri.

Starejša navodila uporabljajo predpono ip_ iz obdobja 2.6. Ti ukazi so lahko videti, kot da delujejo, medtem ko ne nalagajo ničesar, zato preverite naloženi seznam in ne izhodnega stanja.

Imeti jih naložene ni več dovolj. Od Linuxa 4.7 je sysctl net.netfilter.nf_conntrack_helper privzeto 0, kar izklopi samodejno dodeljevanje pomočnika novim tokovom. Usmerjevalnik ima lahko vse module in še vedno nič ne prevede. Preverite dejansko vrednost, preden znova pogledate seznam modulov.

Ali znova vklopite samodejno dodeljevanje globalno, ali pripnite pomočnika tokovom, ki ga potrebujejo, in pustite vse ostalo pri miru:

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

Druga možnost je boljša. Omejuje vedenje na promet PPTP, namesto da bi znova omogočila samodejno dodeljevanje na celem usmerjevalniku.

Odpiranje protokola, ki nima vrat

Pravilo požarnega zidu, ki dovoljuje 1723, ne pove ničesar o protokolu 47. V firewalld dovolite protokol v coni, obrnjeni proti odjemalcu. V običajnem iptables sprejmite protokol gre v vhodni verigi.

Nato zajemajte na obeh straneh. Paketi, ki zapustijo odjemalca brez prihajajočih odgovorov, pomenijo, da je povratna pot filtrirana, in to je druga napaka kot zavrnjene poverilnice.

Po povezavi omejitev velikosti

GRE vstavi glavo, PPP v njej pa doda več, zato delujoča povezava poroča o MTU precej pod 1500. Majhni odgovori se naložijo, veliki pa obvisijo, kar izgleda kot druga, nepovezana težava, ki se pojavi v trenutku, ko je prva rešena.

Preberite MTU na odjemalčevem vmesniku PPP in uskladite jo z lastnim izračunom usmerjevalnika namesto da znižujete številke, dokler nekaj ne deluje. Paketi polne velikosti, ki odidejo brez česar koli, kar bi se vrnilo, kažejo na to mejo in ne na prevajanje.

Popravilo poti vrne uporabnika k delu in ne naredi PPTP dobre izbire. MS-CHAPv2 in RC4 sta že dolgo zastarela, zato nalaganje modulov obravnavajte kot začasni popravek in načrtujte prehod na vzdrževan protokol.

Sorodni članki