Joku välittää portin 1723, asiakas saavuttaa palvelimen, todennus alkaa, ja sitten kaikki pysähtyy ilman virhettä. Luonnollinen johtopäätös on väärä salasana, joten salasana kirjoitetaan kolme kertaa uudelleen. Välitys oli kunnossa ja tunnukset olivat kunnossa. Rikki meni toinen protokolla, jota välitys ei koskaan kattanut, ja ytimen oletusarvo, joka lakkasi hiljaa auttamasta siinä.

Välitys ei koskaan ollut ongelma

Portinvälityssääntö kuvaa TCP- tai UDP-liikennettä. Se ei voi kuvata hyötykuormaa, joka kesken istunnon vaihtuu toiseen IP-protokollaan, ja PPTP tekee juuri niin.

Siksi yhteys näyttää terveeltä jumiutumishetkeen asti. Se osa, jota porttisääntö voi hallita, onnistui, ja se osa, jota se ei voi hallita, on se osa, joka epäonnistui.

TCP ohjaukseen, GRE dataan

Puhelu neuvotellaan TCP 1723:n yli. Kun se on pystyssä, hyötykuorma siirtyy GRE:hen, IP-protokolla 47, joka ei kanna lainkaan porttinumeroita. Säännöllä, joka perustuu portteihin, ei ole mitään sovitettavaa.

GRE kantaa otsikossaan puhelun tunnistetta, ja NAT-kääntäjän on kirjoitettava se kenttä johdonmukaisesti molempiin suuntiin, muuten istunnon kaksi puoliskoa lakkaavat sopimasta keskenään. Toinen suunta uudelleen kirjoitettuna ja toinen ei tuottaa istunnon, joka todennetaan ja joka sitten hylkää jokaisen datapaketin. Juuri sellainen oireen muoto on: onnistuminen, sitten hiljaisuus.

Paljas GRE ilman PPTP:tä ei tarvitse sellaista uudelleenkirjoitusta, siksi tavallinen GRE-tunneli voi toimia reitittimen läpi, joka epäonnistuu samalla polulla PPTP-asiakkaan kohdalla.

Neljä moduulia ja sysctl, joka kytki ne pois

Kaksi moduulia hoitaa kehystyksen, nf_conntrack_proto_gre ja nf_nat_proto_gre. Kaksi muuta hoitaa puhelun tunnisteen, nf_conntrack_pptp ja nf_nat_pptp. Viimeisen lataaminen vetää muut riippuvuuksien kautta, joten moduulilistauksen pitäisi näyttää kaikki neljä.

Vanhemmat ohjeet käyttävät 2.6-aikakauden ip_-etuliitettä. Ne komennot voivat näyttää toimivan, vaikka mitään ei ladata, joten tarkista ladattu lista poistumistilan sijaan.

Ladattuna oleminen ei enää riitä. Linux 4.7:stä lähtien sysctl net.netfilter.nf_conntrack_helper on oletuksena 0, mikä poistaa automaattisen avustajan määrityksen uusilta virroilta. Reitittimessä voi olla kaikki moduulit ja silti se ei käännä mitään. Tarkista tehokas arvo ennen kuin katsot moduulilistaa uudelleen.

Joko kytke automaattinen määritys uudelleen päälle globaalisti tai liitä avustaja virtoihin, jotka sitä tarvitsevat, ja jätä kaikki muu rauhaan:

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

Toinen vaihtoehto on suositeltava. Se rajaa käyttäytymisen PPTP-liikenteeseen sen sijaan, että automaattinen määritys otettaisiin uudelleen käyttöön koko reitittimessä.

Protokollan avaaminen, jossa ei ole portteja

Palomuurisääntö, joka sallii 1723:n, ei kerro mitään protokollasta 47. Salli firewalldissa protokolla vyöhykkeellä, joka osoittaa asiakkaaseen. Tavallisessa iptablesissa hyväksy protokolla gre syöteketjussa.

Kaappaa sitten molemmilla puolilla. Paketit, jotka lähtevät asiakkaalta ilman saapuvia vastauksia, tarkoittavat, että paluupolku on suodatettu, ja se on eri vika kuin hylätty tunnus.

Yhdistämisen jälkeen kokoraja

GRE lisää otsikon ja sen sisällä PPP lisää lisää, joten toimiva linkki raportoi MTU:n selvästi alle 1500. Pienet vastaukset latautuvat ja suuret juuttuvat, mikä näyttää toiselta, asiaankuulumattomalta ongelmalta, joka ilmestyy heti kun ensimmäinen on ratkaistu.

Lue MTU asiakkaan PPP-sovittimelta ja sovita se reitittimen omaan laskelmaan sen sijaan, että laskisit lukuja, kunnes jokin toimii. Täysikokoiset paketit, jotka lähtevät ilman että mitään tulee takaisin, viittaavat tuohon rajaan eivätkä käännökseen.

Polun korjaaminen saa käyttäjän toimimaan, eikä se tee PPTP:stä hyvää valintaa. MS-CHAPv2 ja RC4 ovat kauan vanhentuneita, joten käsittele moduulien lataamista väliaikaisena korjauksena ja suunnittele siirtymistä ylläpidettyyn protokollaan.

Aiheeseen liittyvät artikkelit