Да ли саобраћај заиста иде кроз VPN? Како то проверити
Претрага руте, први скок, снимак на физичком адаптеру и провера адресе споља одговарају на различите делове питања.
Два квара изгледају исто са иконе у системској касети: саобраћај који улази у тунел и саобраћај који га тихо обилази. Клијент у оба случаја приказује Connected, јер Connected значи само да интерфејс тунела постоји и да је клијент инсталирао руте које је желео. Да ли је један пакет једне апликације користио те руте је посебно питање, на које се одговара на другом месту у стеку. Четири мерења решавају већину — претрага руте, први скок, снимак на физичком адаптеру и посматрање споља — а приказ сесије на серверу покрива остатак.
Почните од руте којом ће пакет ићи
Табела рутирања је одлука, зато је питајте о једном одредишту уместо да је читате целу и нагађате. На Linux-у, ip route get именује интерфејс и изворну адресу које је изабрало језгро:
ip route get 203.0.113.10
ip route get 10.20.5.7На Windows-у, Find-NetRoute -RemoteIPAddress 203.0.113.10 је кориснији од route print -4 из истог разлога: пријављује руту која је победила, а не све постојеће руте. Ипак прочитајте табелу једном због њеног реда 0.0.0.0. Пар /1 тамо значи да је клијент пуног тунела преписао подразумевану руту: опција redirect-gateway def1 OpenVPN-а инсталира 0.0.0.0/1 и 128.0.0.0/1 кроз тунел, што побеђује постојећу 0.0.0.0/0 при најдужем поклапању префикса без брисања физичке подразумеване руте. Зато две подразумеване руте могу да постоје заједно док све и даље улази у тунел.
Два детаља чине табелу лажљивом. Прво, гледајте префикс који се поклопио, а не број подразумеваних рута, јер победника одређује метрика интерфејса или пар /1. Друго, постојећа веза задржава пут којим је успостављена; пошто се тунел подигне, отворена сесија може наставити да користи стару руту док се не ресетује, и зато се чини да поновно повезивање поправља проблем рутирања. Радећи клијент — ps ax | grep openvpn — доказује само да је процес почео.
Пратите једно унутрашње и једно јавно име
Претрага руте показује намеру; пут показује испоруку. Док сте повезани, пратите име које мора бити унутрашње и име које не сме, и упоредите први скок:
traceroute intranet.corp.example
traceroute 1.1.1.1Исти први скок за оба значи да унутрашње име никада није ушло у тунел и да је квар изнад њега, обично име које се разрешава у јавну адресу или рута која никада није инсталирана. Ако унутрашњи саобраћај излази кроз 10.8.0.1, а јавни кроз 192.168.1.1, подељени тунел ради тачно оно за шта је конфигурисан. Трага која стигне до VPN гејтвеја и затим враћа само истеке времена обично је проблем повратног пута или серверског заштитног зида, а не недостајућа рута прослеђивања.
Филтрирани ICMP чини ову проверу лажљивом: звездице на обе траге изгледају као мртав тунел и обично су заштитни зид. Тестирајте TCP порт где можете — traceroute -T -p 443 на Linux-у — и запамтите да трага не говори који је резолвер одговорио: име се може разрешити локално и ипак бити достижно кроз тунел.
Снимајте на физичком адаптеру, а не на тунелу
Физичка веза је једино место које показује шта мрежа заиста види. Са подигнутим тунелом, сесија ка канцеларији треба да изгледа као шифровани терет адресиран на VPN сервер, а не као веза ка 10.20.5.7:
sudo tcpdump -ni eth0 udp port 53
sudo tcpdump -ni eth0 host 10.20.0.5Први филтер хвата разрешавање имена које излази локално, што је најчешће и најтише цурење — страница се ипак учитава, резолвер је само видео упит. Други хвата обичан саобраћај ка унутрашњој адреси која би требало да постоји само унутар тунела. На Windows-у, pktmon ради исти посао без драјвера: pktmon filter add -p 53, затим pktmon start --capture --pkt-size 128, затим pktmon stop и pktmon format pktmon.etl -o capture.txt. Ове заставице се мало разликују између верзија Windows-а, зато проверите pktmon filter add /? пре него што поверујете синтакси.
Снимите физички интерфејс да бисте нашли цурења; снимак на тунелу садржи пакете за које већ верујете да су тамо, а на серверу садржи нечитљиве спољашње пакете чији је извор гејтвеј. Бројачи бајтова на било ком интерфејсу описују пакете, а не програме; да бисте приписали саобраћај процесу потребан је монитор који повезује сокете са процесима.
Питајте спољну услугу, а затим питајте поново за сваку апликацију
Једина провера која доказује излаз је одговор споља: услуга која враћа виђену изворну адресу. Покрените је из љуске, где можете да изаберете интерфејс, и покрените је двапут:
sudo curl --interface tun0 https://example.net/ip
sudo curl --interface eth0 https://example.net/ipРазличити одговори вам дају доказ оба пута и начин да тестирате одређену апликацију: вежите је или је покрените у мрежном именском простору са једном рутом и погледајте коју адресу бележи далеки крај. Идентични одговори су занимљив квар: или везивање није деловало, или нешто између домаћина и далеког краја преписује изворну адресу пре него што стигне. На Windows-у, curl --interface тражи адресу адаптера, а не његово име.
Прегледач који пријављује VPN адресу доказује прегледач. Поштански клијент, менаџер пакета, агент за резервне копије или други профил прегледача могу сваки кренути другим путем, посебно када подешавање проксија или рута подељеног тунела покрива један од њих. Промена адресе сама по себи није доказ цурења: балансер може одговорити другачије зависно од излаза који је видео, зато упоредите забележену изворну адресу, а не страницу.
Користите приказ сервера да потврдите партнера
Сервер одговара на друго питање: да ли је партнер повезан, колико је пренео и да ли се сесија поново покренула. Партнер који је активан на серверу док се бројачи клијента једва померају значи да саобраћај апликације не улази у тунел, шта год рекла табела клијента. А партнер који преноси много података за корисника који пријављује да ништа не ради је друга истрага.
Овде вребају две замке. Маскирани тунел чини да сваки ток изгледа као да долази са гејтвеја, зато се дневници и обрачун по клијенту сливају у једну адресу. И клијент се третира као локални домаћин, зато питање да ли неко копира датотеке кроз VPN одговара саобраћај дељења датотека на серверу или ревизија домаћина на серверу — посматрање тунела даје крајње тачке и обим, не имена датотека.
Разликујте пројектну одлуку од цурења
Није све изван тунела цурење. Саобраћај локалне везе и емитовања остаје локалан по пројекту, штампач пронађен преко multicast-а наставља да се оглашава на LAN-у, а DHCP мора да изађе локално. Апликација везана за одређени интерфејс намерно заобилази табелу рутирања, и то мења само правило заштитног зида, именски простор или политичка рута.
IPv6 заслужује свој ред у листи провере. Тунел који носи само IPv4 оставља двостеком домаћину други употребљив пут, а двостека дестинација ће га преферирати — укључујући DNS, ако је резолвер доступан преко IPv6. Искључите IPv6 на адаптеру или потврдите да га тунел носи пре него што резултат IPv4 сматрате потпуним.
Када се провере не слажу, неслагање обично именује квар:
| What you see | What it means | Next step |
|---|---|---|
| The route picks tun0 but the capture shows cleartext to 10.20.5.7 | Something bypassed the table: a bound app, a policy route or a session older than the tunnel | Reset the flow, check the app bind, check the ip rule list |
| The route picks eth0 for an internal name | The name resolves to a public address, or the route was never installed | Compare the resolved address with the routes the server pushes |
| The capture shows DNS to the LAN resolver | Resolver leak: data is tunneled, lookups are not | Point the resolver inside, or push it from the server |
| All four checks agree and one app still fails | Path selection is fine; suspect MTU, a per-app proxy or the far end | Test the same destination from a known-good client |
Редослед који ради: сачувајте табелу рутирања пре и после повезивања, пратите једно унутрашње и једно јавно име, снимите DNS на физичком адаптеру, вратите излазну адресу из љуске за одређену апликацију, затим прочитајте сервер због обима. Ако се прва четири слажу, тунел носи оно што мислите и преостали проблем је изнад њега. Ако се два не слажу, пар који се не слаже је квар, а не икона.