Stebėkite, kaip pakyla PPTP ryšys, ir lengva patikėti, kad sunkiausia dalis jau baigta: klientas autentifikuojasi, atsiranda ppp0 adapteris arba WAN Miniport, o būsenos langas tampa žalias. Tada pirmoji užklausa vidiniam hostui pasibaigia skirtuoju laiku, ir kaltinamas profilis. Praktiškai reikia išvalyti du nepriklausomus sluoksnius: išorinį transportą, kuris neša TCP 1723 ir GRE, ir vidinę politiką, kuri nusprendžia, kurie tikslai naudoja PPP sąsają. Žalia būsena įrodo tik tai, kad pirmasis sluoksnis susiderėjo; apie antrąjį ji nieko nesako.

Sekite klientą nuo profilio iki valdymo lizdo

Atidarykite kliento žurnalą ir raskite vietą, kur jis susisiekia su serveriu. PPTP pirmiausia atidaro TCP ryšį į 1723 prievadą ir tuo kanalu derasi dėl tunelio parametrų. Jei šis žingsnis nepavyksta, niekas vėliau nebeturi reikšmės, o klaida paprastai nurodo serverio adresą arba skirtąjį laiką.

Patvirtinkite valdymo ryšį tinkle prieš liesdami bet kokį maršrutą. Kliente arba veidrodiniame prievade užfiksuokite TCP 1723 vienam prisijungimo bandymui:

sudo tcpdump -ni any 'tcp port 1723' -c 20

Baigtas rankos paspaudimas ir užmegzta sesija reiškia, kad išorinis valdymo kanalas veikia. SYN, kuris niekada nesulaukia SYN-ACK, rodo ugniasienę, neteisingą serverio adresą arba tiekėją, filtruojantį prievadą. Po rankos paspaudimo iškart gaunamas atstatymas dažnai reiškia, kad serveris atmetė prisijungimo duomenis arba tunelio tipą.

GRE yra antrasis protokolas, o ne prievadas

PPTP neša PPP naudingąją apkrovą išplėstame GRE, IP 47 protokole, kuris neturi prievado numerio, kurį maršrutizatorius galėtų sekti. Todėl taisyklė, leidžianti TCP 1723, vis tiek gali palikti tunelį be duomenų kelio. Būsenos NAT įrenginiai turi suprasti skambučio ID GRE viduje, kad galėtų susieti atsakymus, o daugelis to nedaro. PPTP specifikacija laiko valdymo kanalą ir GRE apkrovą atskiromis dalimis, ir jūsų testavimo planas turi būti toks pat.

Stebėkite 47 protokolą tame pačiame įraše, tada palyginkite, kas išeina, su tuo, kas grįžta:

sudo tcpdump -ni any 'proto gre' -c 20

Paketai, išeinantys be atsakymų, kol TCP 1723 išlieka sveikas, yra klasikinis užblokuoto GRE požymis. PPTP pralaidumas namų maršrutizatoriuje yra tos konkrečios programinės įrangos funkcija, todėl veikiantis viešbučio tinklas nieko neįrodo apie kitą. Jei maršrutizatorius nesiūlo pralaidumo ir jo pakeisti negalite, problema yra protokolo pasirinkimas, o ne maršrutų lentelė.

Įrodykite, kad tunelis perkelia vieną paketą

Kai GRE pradeda tekėti, PPP derybos priskiria adresą kliento sąsajai. Skaitykite priskyrimą, o ne darykite prielaidą:

ip -4 addr show ppp0

Pinginkite lygiaverčio adresą, rodomą kaip taško-taškas ryšio paskirties vietą. Atsakymas šiame etape įrodo, kad inkapsuliuotas kelias veikia nuo galo iki galo ir kad serveris atsako tunelio viduje. Jei lygiavertis atsako, o vidiniai hostai ne, išorinis transportas tvarkingas, o gedimas persikėlė į vidų.

Tai padarykite prieš pridėdami bet kokį padalintą maršrutą. Maršruto pakeitimas, atliktas sugedus transportui, sukuria antrą kintamąjį ir paslepia pirmąjį.

Parašykite padalintą politiką, įskaitant DNS

Padalintas maršrutizavimas yra sprendimų sąrašas, o ne žymės langelis. Kiekvienas privatus priešdėlis, kuris turi kirsti tunelį, turi turėti maršrutą per PPP sąsają, o kiekvienas priešdėlis, kuris turi likti vietinis, turi jo neturėti. Maršrutas į programos potinklį be atitinkamo maršruto į jo privatų sprendėją yra įprastas būdas sukurti sutrikimą, kuris atrodo kaip sugedusi programa.

Patikrinkite, kokį sprendimą branduolys priima vienam adresui kiekvienoje kategorijoje:

ip route get 10.20.5.10
ip route get 203.0.113.25

Pirmasis turi nurodyti ppp0, antrasis įprastą šliuzą. Jei abu nurodo tą pačią sąsają, politika visai nepadalinta. Pridėkite paties DNS serverio adresą į tunelio sąrašą, kitaip vidinių hostų vardų sprendimas išeina per vietinį sprendėją ir negrąžina nieko naudingo.

Pakartotinas patikrinimas penkiais žingsniais

Vykdykite sluoksnius iš eilės ir sustokite ties pirmuoju, kuris nepavyksta: valdymo kanalas, GRE matomumas, PPP lygiaverčio atsakymas, padalintas maršrutas vienam vidiniam adresui ir programos užklausa per tunelį. Kiekvienas žingsnis turi savo komandą, todėl gedimą galima priskirti, o ne laikyti paslaptimi.

Kompaktiška Linux kliento versija atrodo taip:

sudo tcpdump -ni any 'tcp port 1723 or proto gre' -c 40
ip -4 addr show ppp0
ping -c 3 192.0.2.1
ip route get 10.20.5.10

Windows sistemoje galioja ta pati tvarka su route print ir kliente rodoma adapterio būsena. PPTP yra pasenęs protokolas, ir jei serveris siūlo SSTP arba IKEv2, persikelti paprastai yra geresnis laiko panaudojimas nei derinti kelią, kuris priklauso nuo 47 protokolo praėjimo kiekviename šuolyje. Patikrinkite pakaitalo sertifikatą ir autentifikavimo sutartį, o ne kopijuokite seną profilį į naują leidimą.

Susiję straipsniai