WireGuard забива: ограничение на MTU или липсващо правило за препращане?
Всичко след сървъра е проблем с препращането или с обратния маршрут. Малките заявки, които минават, докато големите забиват, са отпечатъкът на размера на пакета.
Навикът е да се намали 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 не е променливата, която трябва да смените.
| Observation | Points toward | Where to look |
|---|---|---|
| Nothing beyond the gateway works | Forwarding or return route | Forwarding flag, filter rules, routing table |
| Small works, large stalls | Packet size on the path | Tunnel MTU and the link underneath |
| Only names fail | DNS resolution | The resolver configured for the tunnel |
| Works sometimes | Multiple paths or state expiry | Flow selection and NAT state |
Поправете слоя, който доказахте
Когато препращането е повредата, поправката е правило за препращане или маршрут, изразени възможно най-тясно, доколкото дизайнът позволява. Когато размерът е повредата, поправката е MTU, който отчита инкапсулацията по точно този път, приложен към интерфейса, който се нуждае от него, а не към всеки адаптер в парка.
Както и да е, след това повторете същата задача към същата дестинация. Ако първоначалният голям трансфер вече завършва, промяната е адресирала слоя, който се проваляше. Ако само малката проверка се подобри, лекували сте симптом и истинската граница още е на място.
Запишете каква форма наблюдавахте преди промяната. Този един ред, записан до поправката, е това, което спира следващия човек да намали MTU, който никога не е бил проблемът.