WireGuard изпраща данни, но не получава нищо обратно: коя страна?
Нарастващият брояч на изпращане е посока, а не диагноза. Решете дали заявката никога не е напуснала тунела, или отговорът никога не се е върнал, преди да промените нещо.
Броячите на изпращане, които растат, докато броячът на получаване остава нула, описват посока, а не диагноза. Същото отчитане се появява, когато партньорът никога не е завършил ръкостискането, когато дестинацията е избрала грешния партньор, когато далечната страна няма маршрут обратно и когато филтър изпусне отговора по пътя му към дома. Всяко от тези се поправя на различно място.
Сравнението, което съкращава работата, е между заявка, която никога не е напуснала тунела, и отговор, който никога не се е върнал. Едно прихващане на правилния интерфейс решава между тях.
Броячите описват обем, а не посоката на повредата
Броячите на WireGuard записват какво интерфейсът е предал на партньора и какво е получил от него. Те не казват коя дестинация, кой партньор или коя половина от обмена се е провалила. Фоновият трафик прави сумите още по-малко информативни, тъй като част от байтовете може да са сигнали за поддържане на връзката или несвързани потоци. Четете ги като индикатор, че интерфейсът е активен, и след това спрете да ги третирате като доказателство.
Полезният първи факт е дали ръкостискането е актуално. Без него нищо не е било криптирано за този партньор и броячът на получаване няма причина да се движи.
Избор на партньор или път за отговора: две обяснения
Първото обяснение е, че пакетът никога не е достигнал до предвидения партньор, защото маршрутът сочеше другаде или разрешените префикси на партньора не покриваха дестинацията. Второто е, че пакетът е пристигнал и отговорът не е могъл да се върне, което е проблем с маршрутизацията в далечния край. Таблицата ги разделя по това какво ще наблюдавате във всяка точка.
| Observation | Points to |
|---|---|
| No handshake while transmit climbs | Peer selection or endpoint |
| Handshake current, request visible on the server | Reply path or far-side route |
| Request never visible on the server | Allowed prefixes or local route |
| Both packets visible, nothing reaches the client | Return filter or translation |
Четете таблицата отгоре. Липсващото ръкостискане ви насочва към ключове, крайни точки и външния път, защото засега няма нищо друго за разглеждане. Актуално ръкостискане със заявка, видима на сървъра, премества проблема в посоката на връщане, където решава собствената таблица за маршрутизация на дестинацията. Заявка, която никога не се появява на сървъра, е проблем с избора, а разрешените префикси на двамата партньори са първото нещо за сравняване.
Два от тези четири реда се поправят на клиента и два на сървъра. Да знаете в коя двойка сте е по-голямата част от работата.
Къде изчезват отговорите
Отговорът напуска дестинацията, достига до тунелния интерфейс на сървъра и се криптира за партньора, чиито разрешени адреси съвпадат с вътрешния адрес на клиента. Ако това съвпадение се провали, отговорът се отхвърля безшумно, което от страна на клиента изглежда точно като мрежова повреда. Ако отговорът е криптиран и собственият филтър на клиента го отхвърли, симптомът отново е идентичен. И двата случая се нуждаят от прихващането, а не от брояча.
Най-силната форма на тази грешка е сървър, който препраща пакети за клиента, но няма маршрут обратно към вътрешния диапазон на клиента. Той приема заявката, изпраща отговора към своя шлюз по подразбиране и тунелът никога не го вижда. Широко правило за транслация, добавено на сървъра, скрива тази повреда вместо да поправи маршрута.
Тествайте една дестинация от край до край
Изберете една дестинация в диапазона на партньора и я тествайте, докато ръкостискането е очевидно актуално. Командите по-долу четат състоянието на партньора, избрания маршрут и двете страни на обмена. Стартирайте прихващането на интерфейса, който криптираните пакети действително използват.
wg show wg0 latest-handshakes
wg show wg0 transfer
ip route get 10.60.9.5
sudo tcpdump -ni wg0 host 10.60.9.5
Прихващане, което показва заявката на тунелния интерфейс без нищо в отговор, е отговор от страна на сървъра и таблицата за маршрутизация на дестинацията е следващото място за гледане. Ако не се появи абсолютно нищо, пакетът е поел друг път, така че локалният маршрут е заподозреният. Обмен, видим в двете прихващания без напредък в приложението, премества въпроса към размера на пакета или към филтър, който статистиката на интерфейса никога не показва. Дръжте една дестинация и един клиент в теста, защото втора променлива превръща доказателството отново в впечатление.
Ако имената се провалят, докато разрешен адрес работи, отговорът е в DNS, а не в тунела. Ако само големите преноси зациклят, разгледайте размера на пакета отделно.