Навикът е да се намали MTU веднага щом WireGuard започне да се държи зле, и този навик прикрива друга повреда. Шлюз, който не препраща, и път, който не носи големи пакети, дават различими картини: едната се проваля в двете посоки и при всеки размер, другата оцелява при малки заявки и умира при големи. Определете коя форма имате, преди да промените каквото и да е число. Тестът е евтин и премахва половината възможни причини.

Две повреди, две различни форми

Проблем с препращането се появява веднага след сървъра. Ръкостискането успява, адресът на тунела отговаря, и нищо зад шлюза не е достъпно дори с малка заявка. Пакетът е стигнал до сървъра и не е предаден, или отговорът не е имал обратен маршрут.

Проблем със размера се появява само над праг. DNS, TCP ръкостискане и малко извикване на API работят, докато изтегляне на файл или голям отговор забива. Пакетите, които се побраха, преминаха от край до край, а тези, които не се побраха, бяха изхвърлени някъде без полезен отчет.

Тези описания сочат различни хора и различни конфигурационни файлове, затова измерването на формата струва повече от догадка. Един ping до шлюза не може да ги раздели.

Изключете препращането, преди да свивате каквото и да е

Тествайте дестинация отвъд шлюза, а не самия шлюз. Ping до адреса на тунела на сървъра доказва само, че интерфейсът е вдигнат и че стигате до машината, която прекратява тунела. Трафикът за по-широката мрежа зависи от включеното IP препращане на тази машина и от защитна стена, която разрешава препращания поток. И двете трябва да са верни, а ако едното е невярно, се получава същото мълчание.

Обратното маршрутизиране е също толкова важно. Ако мрежата на дестинацията не знае как да стигне до адреса на тунела на клиента, заявката пристига, а отговорът изчезва, и клиентът съобщава за таймаут, който изглежда идентичен на изхвърлено препращане.

Когато дизайнът използва транслация на адреси, правилото за транслация е част от този обратен път. Премахването му по време на гонене на проблем с MTU превръща един работещ дизайн в счупен, затова прочетете съществуващите правила, преди да ги редактирате.

Измерете къде започва прекъсването

Първо прочетете състоянието на препращането и правилата за филтриране. Това са проверки само за четене и те отговарят на евтиния въпрос:

sysctl net.ipv4.ip_forward
sudo iptables -S FORWARD
ip route get 10.30.0.9

След това проверете размерите с бита за забрана на фрагментиране, от клиента, към хост отвъд шлюза:

ping -M do -s 1200 10.30.0.9
ping -M do -s 1400 10.30.0.9

Ако първата проверка работи, а втората се провали с грешка за фрагментиране, пътят ви казва своя използваем размер. Ако нито една не работи, гледате препращане или маршрутизиране и MTU не е променливата, която трябва да смените.

ObservationPoints towardWhere to look
Nothing beyond the gateway worksForwarding or return routeForwarding flag, filter rules, routing table
Small works, large stallsPacket size on the pathTunnel MTU and the link underneath
Only names failDNS resolutionThe resolver configured for the tunnel
Works sometimesMultiple paths or state expiryFlow selection and NAT state

Поправете слоя, който доказахте

Когато препращането е повредата, поправката е правило за препращане или маршрут, изразени възможно най-тясно, доколкото дизайнът позволява. Когато размерът е повредата, поправката е MTU, който отчита инкапсулацията по точно този път, приложен към интерфейса, който се нуждае от него, а не към всеки адаптер в парка.

Както и да е, след това повторете същата задача към същата дестинация. Ако първоначалният голям трансфер вече завършва, промяната е адресирала слоя, който се проваляше. Ако само малката проверка се подобри, лекували сте симптом и истинската граница още е на място.

Запишете каква форма наблюдавахте преди промяната. Този един ред, записан до поправката, е това, което спира следващия човек да намали MTU, който никога не е бил проблемът.

Подобни статии