Razdeljeno tuneliranje PPTP ne deluje: najprej popravite pot GRE
Razdeljeno tuneliranje PPTP spodleti iz dveh različnih razlogov: GRE je blokiran ali manjka notranja pot. Najprej preizkusite transport, nato politiko.
Opazujte, kako se povezava PPTP dvigne, in zlahka verjamete, da je težji del opravljen: odjemalec se preveri, pojavi se vmesnik ppp0 ali WAN Miniport in statusno okno postane zeleno. Nato prva zahteva do notranjega gostitelja poteče in profil je kriv. V praksi je treba očistiti dva neodvisna sloja: zunanji transport, ki prenaša TCP 1723 in GRE, ter notranjo politiko, ki odloča, katere cilje uporabljajo vmesnik PPP. Zelen status dokazuje le, da se je prvi sloj dogovoril; o drugem ne pove nič.
Sledite odjemalcu od profila do krmilne vtičnice
Odprite dnevnik odjemalca in poiščite točko, kjer vzpostavi stik s strežnikom. PPTP najprej odpre povezavo TCP na vrata 1723 in po tem kanalu izpogaja parametre tunela. Če ta korak spodleti, nič pozneje ni pomembno, in napaka običajno navaja naslov strežnika ali časovno prekoračitev.
Preden se dotaknete katere koli poti, potrdite krmilno povezavo v omrežju. Na odjemalcu ali zrcalnih vratih zajemite TCP 1723 za en poskus povezave:
sudo tcpdump -ni any 'tcp port 1723' -c 20
Zaključeno rokovanje in vzpostavljena seja pomenita, da zunanji krmilni kanal deluje. SYN, ki nikoli ne prejme SYN-ACK, kaže na požarni zid, napačen naslov strežnika ali ponudnika, ki filtrira vrata. Rokovanje, ki mu sledi takojšnja ponastavitev, pogosto pomeni, da je strežnik zavrnil poverilnice ali vrsto tunela.
GRE je drugi protokol, ne vrata
PPTP prenaša tovor PPP znotraj razširjenega GRE, protokola IP 47, ki nima številke vrat, ki bi ji usmerjevalnik lahko sledil. Zato lahko pravilo, ki dovoljuje TCP 1723, tunel vseeno pusti brez podatkovne poti. Omrežne naprave NAT s stanjem morajo razumeti ID klica v GRE, da preslikajo odgovore, in mnoge tega ne zmorejo. Specifikacija PPTP hrani krmilni kanal in tovor GRE kot ločena dela, in tudi vaš načrt testiranja mora biti tak.
V istem zajemu opazujte protokol 47, nato primerjajte, kaj odhaja, s tem, kaj se vrača:
sudo tcpdump -ni any 'proto gre' -c 20
Paketi, ki odhajajo brez odgovorov, medtem ko TCP 1723 ostaja zdrav, so klasičen podpis blokiranega GRE. Prepustitev PPTP na domačem usmerjevalniku je funkcija prav te strojne programske opreme, zato delujoče hotelsko omrežje ne dokazuje ničesar o naslednjem. Če usmerjevalnik ne ponuja prepustitve in ga ne morete spremeniti, je težava izbira protokola, ne usmerjevalna tabela.
Dokažite, da tunel premakne en paket
Ko GRE steče, pogajanje PPP dodeli naslov vmesniku odjemalca. Preberite dodelitev, namesto da jo domnevate:
ip -4 addr show ppp0
Pingajte naslov partnerja, prikazan kot cilj povezave od točke do točke. Odgovor na tej stopnji dokazuje, da enkapsulirana pot deluje od konca do konca in da strežnik odgovarja znotraj tunela. Če partner odgovarja, notranji gostitelji pa ne, je zunanji transport v redu in napaka se je preselila navznoter.
To storite, preden dodate katero koli razdeljeno pot. Sprememba poti, izvedena ob pokvarjenem transportu, ustvari drugo spremenljivko in skrije prvo.
Napišite razdeljeno politiko, vključno z DNS
Razdeljeno usmerjanje je seznam odločitev, ne potrditveno polje. Vsaka zasebna predpona, ki mora prečkati tunel, potrebuje pot skozi vmesnik PPP, in vsaka predpona, ki mora ostati lokalna, je v njej ne sme biti. Pot do podomrežja aplikacije brez ustrezne poti do njenega zasebnega razreševalnika je pogost način za ustvarjanje prekinitve, ki izgleda kot pokvarjena aplikacija.
Preverite odločitev, ki jo jedro sprejme za en naslov v vsaki kategoriji:
ip route get 10.20.5.10
ip route get 203.0.113.25
Prva mora navesti ppp0, druga običajna prehod. Če oba navajata isti vmesnik, politika sploh ni razdeljena. Dodajte naslov strežnika DNS samega na seznam tunela, sicer razreševanje imen za notranje gostitelje odide skozi lokalni razreševalnik in ne vrne nič uporabnega.
Ponovljiv pregled v petih korakih
Zaženite sloje po vrsti in se ustavite pri prvem, ki spodleti: krmilni kanal, vidnost GRE, odgovor partnerja PPP, razdeljena pot za en notranji naslov in zahteva aplikacije skozi tunel. Vsak korak ima svoj ukaz, zato je napaka pripisljiva in ne skrivnostna.
Kompaktna različica za odjemalca Linux je videti takole:
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
V sistemu Windows velja enak vrstni red z route print in stanjem vmesnika, prikazanim v odjemalcu. PPTP je zastarel protokol, in če strežnik ponuja SSTP ali IKEv2, je prehod običajno boljša poraba časa kot nastavljanje poti, ki je odvisna od prehoda protokola 47 na vsakem skoku. Preverite potrdilo in pogodbo o preverjanju zamenjave, namesto da kopirate star profil v novo izdajo.