Трафикът по eth0 не означава, че VPN тунелът изтича
Публичните адреси на физическия адаптер обикновено са собствената обвивка на тунела. Сравнете интерфейсите, после попитайте ядрото кой интерфейс избира.
Да виждате публични адреси по eth0, докато тунелът е вдигнат, изглежда като доказателство, че нещо е избягало. Обикновено е обратното: собствените пакети на тунела трябва да пресекат този адаптер, за да стигнат до сървъра, и изглеждат като обикновени потоци UDP или TCP. Вътрешният пакет се появява само на устройството на тунела. Да различите двете е въпрос на четене на обвивката, не на вяра в броя байтове.
Всеки пакет на тунела все пак пресича кабела
Тунелът е интерфейс, а не кабел. Клиентът взема вътрешен пакет, обвива го и изпраща резултата към адреса и порта на сървъра от профила. На физическия адаптер виждате обвивката; на устройството на тунела виждате това, което е било обвито.
В режим UDP външният поток е една двойка адрес и порт във всяка посока, затова здравословният тунел изглежда почти скучен по eth0. Точно тази единствена двойка е първото, което да търсите.
Улавяйте един интерфейс наведнъж
Улавяйте един интерфейс наведнъж, когато смятате да сравнявате бройки. Псевдоинтерфейсът any събира всички устройства наведнъж, затова препратен пакет се появява на входа и изхода, а локално генериран се появява два пъти в два различни вида. Равни бройки пакети при неравни бройки байтове са нормални, защото обвивката е по-голяма от това, което носи. ARP, DHCP и обявите на маршрутизатор IPv6 принадлежат към локалната връзка и не казват нищо за приложението ви.
sudo tcpdump -i eth0 -n host 203.0.113.10 and udp port 1194Заменете адреса и порта със собствените стойности от профила. Ако този поток е постоянен, тунелът носи нещо.
Попитайте ядрото кое устройство избира
Попитайте ядрото кое устройство би избрало, после потвърдете по кабела. Търсенето в маршрутната таблица е решението, а улавянето е доказателството, че решението е изпълнено. Те отговарят на различни въпроси и ви трябват и двете.
ip route get 1.1.1.1
ip -6 route get 2606:4700:4700::1111Раздвоеният резултат е обичайната находка: IPv4 отива към тунела, а IPv6 отива към физическия адаптер, защото профилът е изпратил само маршрути IPv4. Това е истинско изтичане и то е невидимо при улавяне само на IPv4. Филтрирайте IPv6 и следете за адреси, които не са сървърът и не са link-local.
Изпълнете и двете търсения преди и след свързване, за да видите какво клиентът наистина е променил. Разликата между двата пъти е реалният ефект на клиента.
Когато улавянето наистина е изтичане
Понякога улавянето казва истината. По-тесен маршрут, който изпраща един префикс около тунела, подмрежа, която на клиента е казано да изключи, или разрешаващо правило в защитната стена, което се изпълнява преди политиката на тунела — всичко това може да изведе трафик по кабела в открит вид. Правило, което съвпада с група процеси, също може да е умишлено изключение. Прочетете интерфейса и обхвата на дестинацията му, преди да го наречете дефект.
Поправете маршрута или изключението, не защитната стена. След това уловете отново от нова връзка и проверете IPv4 и IPv6 поотделно, защото поправянето на едното не казва нищо за другото. Ръководството за tcpdump описва селекторите за интерфейс и посока, използвани по-горе.