Se en PPTP-forbindelse komme op, og det er let at tro, at den svære del er klaret: klienten godkender sig, en ppp0-adapter eller WAN Miniport dukker op, og statusvinduet bliver grønt. Så udløber den første anmodning til en intern vært, og profilen får skylden. I praksis er der to uafhængige lag at rydde: den ydre transport, der bærer TCP 1723 og GRE, og den indre politik, der bestemmer, hvilke destinationer der bruger PPP-interfacet. En grøn status beviser kun, at det første lag har forhandlet; den siger intet om det andet.

Følg klienten fra profil til kontrolsocket

Åbn klientloggen, og find det punkt, hvor den kontakter serveren. PPTP åbner først en TCP-forbindelse til port 1723 og forhandler tunnelparametre over den kanal. Hvis dette trin fejler, betyder intet senere noget, og fejlen nævner normalt serveradressen eller en timeout.

Bekræft kontrolforbindelsen på nettet, før du rører ved nogen rute. På klienten eller en spejlport skal du fange TCP 1723 for et enkelt forbindelsesforsøg:

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

Et fuldført håndtryk og en etableret session betyder, at den ydre kontrolkanal virker. Et SYN, der aldrig får et SYN-ACK, peger på en firewall, en forkert serveradresse eller en udbyder, der filtrerer porten. Et håndtryk efterfulgt af et øjeblikkeligt reset betyder ofte, at serveren afviste legitimationsoplysningerne eller tunneltypen.

GRE er en anden protokol, ikke en port

PPTP bærer PPP-nyttelasten inde i forbedret GRE, IP-protokol 47, som ikke har et portnummer, en router kan spore. Derfor kan en regel, der tillader TCP 1723, stadig efterlade tunnelen uden en datasti. Stateful NAT-enheder skal forstå opkalds-ID'et inde i GRE for at mappe svar tilbage, og mange gør det ikke. PPTP-specifikationen holder kontrolkanalen og GRE-nyttelasten som separate dele, og det skal din testplan også.

Hold øje med protokol 47 i samme optagelse, og sammenlign derefter, hvad der går ud, med hvad der kommer tilbage:

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

Pakker, der går ud uden svar, mens TCP 1723 forbliver sundt, er den klassiske signatur på blokeret GRE. PPTP-passthrough på en forbrugerrouter er en funktion i netop den firmware, så et fungerende hotelnetværk beviser intet om det næste. Hvis routeren ikke tilbyder passthrough, og du ikke kan ændre det, er problemet protokolvalget, ikke rutetabellen.

Bevis, at tunnelen flytter én pakke

Når GRE strømmer, tildeler PPP-forhandlingen en adresse til klientinterfacet. Læs tildelingen i stedet for at antage den:

ip -4 addr show ppp0

Ping peer-adressen, der vises som destinationen for punkt-til-punkt-forbindelsen. Et svar på dette trin beviser, at den indkapslede sti virker ende til ende, og at serveren svarer inde i tunnelen. Hvis peeren svarer, men interne værter ikke gør, er den ydre transport i orden, og fejlen er flyttet indad.

Gør dette, før du tilføjer nogen opdelt rute. En ruteændring foretaget, mens transporten er brudt, skaber en anden variabel og skjuler den første.

Skriv den opdelte politik, inklusive DNS

Opdelt routing er en liste af beslutninger, ikke et afkrydsningsfelt. Hvert privat præfiks, der skal krydse tunnelen, har brug for en rute gennem PPP-interfacet, og hvert præfiks, der skal forblive lokalt, skal mangle i det. En rute til et applikationssubnet uden en matchende rute til dets private resolver er en almindelig måde at skabe et udfald, der ligner en ødelagt app.

Kontroller den beslutning, kernen træffer for én adresse i hver kategori:

ip route get 10.20.5.10
ip route get 203.0.113.25

Den første skal nævne ppp0, den anden den almindelige gateway. Hvis begge nævner samme interface, er politikken slet ikke opdelt. Tilføj DNS-serverens egen adresse til tunnelisten, ellers forlader navneopløsningen for interne værter gennem den lokale resolver og returnerer intet brugbart.

En gentagelig kontrol i fem trin

Kør lagene i rækkefølge, og stop ved det første, der fejler: kontrolkanal, GRE-synlighed, PPP-peer-svar, opdelt rute til én intern adresse og en applikationsanmodning over tunnelen. Hvert trin har sin egen kommando, så en fejl kan tilskrives i stedet for at være mystisk.

En kompakt version til en Linux-klient ser sådan ud:

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

På Windows gælder samme rækkefølge med route print og adapterstatus vist i klienten. PPTP er en ældre protokol, og hvis serveren tilbyder SSTP eller IKEv2, er det at flytte sig normalt en bedre brug af tiden end at justere en sti, der afhænger af, at protokol 47 passerer hvert hop. Kontroller erstatningens certifikat og godkendelseskontrakt i stedet for at kopiere en gammel profil ind i en ny version.

Relaterede artikler