Подељено тунеловање PPTP не ради: прво поправите GRE путању
Подељено тунеловање PPTP не успева из два различита разлога: GRE је блокиран или недостаје унутрашња рута. Прво тестирајте транспорт, затим политику.
Посматрајте како се PPTP веза подиже и лако је поверовати да је тешки део готов: клијент се аутентификује, појављује се ppp0 адаптер или WAN Miniport, и статусни прозор постаје зелен. Затим први захтев ка унутрашњем домаћину истекне, и профил је крив. У пракси треба очистити два независна слоја: спољни транспорт који носи TCP 1723 и GRE, и унутрашњу политику која одлучује које дестинације користе PPP интерфејс. Зелени статус доказује само да се први слој договорио; о другом не говори ништа.
Пратите клијента од профила до контролног сокета
Отворите дневник клијента и пронађите место где контактира сервер. PPTP прво отвара TCP везу ка порту 1723 и преговара параметре тунела преко тог канала. Ако овај корак не успе, ништа касније није важно, и грешка обично наводи адресу сервера или истек времена.
Потврдите контролну везу на мрежи пре него што дотакнете било коју руту. На клијенту или огледалском порту ухватите TCP 1723 за један покушај повезивања:
sudo tcpdump -ni any 'tcp port 1723' -c 20
Завршено руковање и успостављена сесија значе да спољни контролни канал ради. SYN који никада не добије SYN-ACK указује на заштитни зид, погрешну адресу сервера или провајдера који филтрира порт. Руковање за којим следи тренутно ресетовање често значи да је сервер одбио акредитиве или тип тунела.
GRE је други протокол, а не порт
PPTP носи PPP терет унутар проширеног GRE, IP протокола 47, који нема број порта који би рутер могао да прати. Зато правило које дозвољава TCP 1723 и даље може оставити тунел без путање података. NAT уређаји са стањем морају да разумеју ID позива унутар GRE да би мапирали одговоре, а многи то не чине. Спецификација PPTP држи контролни канал и GRE терет као одвојене делове, и ваш план тестирања мора бити такав.
Пратите протокол 47 у истом снимку, затим упоредите шта излази са оним што се враћа:
sudo tcpdump -ni any 'proto gre' -c 20
Пакети који излазе без одговора, док TCP 1723 остаје здрав, класичан су потпис блокираног GRE. Пропуштање PPTP на кућном рутеру је функција тог конкретног фирмвера, па радна хотелска мрежа ништа не доказује о следећој. Ако рутер не нуди пропуштање и не можете да га промените, проблем је избор протокола, а не табела рута.
Докажите да тунел преноси један пакет
Када GRE потече, PPP преговарање додељује адресу интерфејсу клијента. Прочитајте доделу уместо да је претпоставите:
ip -4 addr show ppp0
Пинг-ујте адресу партнера приказану као одредиште везе тачка-тачка. Одговор у овој фази доказује да инкапсулирана путања ради од краја до краја и да сервер одговара унутар тунела. Ако партнер одговара, а унутрашњи домаћини не, спољни транспорт је у реду и квар се преселио унутра.
Урадите то пре додавања било које подељене руте. Промена руте извршена док је транспорт покварен ствара другу променљиву и скрива прву.
Напишите подељену политику, укључујући DNS
Подељено рутирање је листа одлука, а не поље за штиклирање. Сваки приватни префикс који мора да прође кроз тунел захтева руту кроз PPP интерфејс, а сваки префикс који треба да остане локалан мора да изостане из ње. Рута ка подмрежи апликације без одговарајуће руте ка њеном приватном резолверу чест је начин да се створи прекид који изгледа као покварена апликација.
Проверите одлуку коју језгро доноси за једну адресу у свакој категорији:
ip route get 10.20.5.10
ip route get 203.0.113.25
Прва треба да наведе ppp0, друга обични гејтвеј. Ако обе наводе исти интерфејс, политика уопште није подељена. Додајте адресу самог DNS сервера на листу тунела, иначе разрешавање имена за унутрашње домаћине излази кроз локални резолвер и не враћа ништа корисно.
Провера која се понавља у пет корака
Покрените слојеве по реду и зауставите се на првом који не успе: контролни канал, видљивост GRE, одговор PPP партнера, подељена рута за једну унутрашњу адресу и захтев апликације кроз тунел. Сваки корак има своју команду, па је квар могуће приписати, а не мистификовати.
Компактна верзија за Linux клијента изгледа овако:
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-у важи исти редослед са route print и статусом адаптера приказаним у клијенту. PPTP је застарео протокол, и ако сервер нуди SSTP или IKEv2, прелазак је обично боље коришћење времена од подешавања путање која зависи од проласка протокола 47 на сваком скоку. Проверите сертификат и уговор о аутентификацији замене уместо да копирате стари профил у ново издање.