Rozwiązywanie problemów · 1 min czytania

MTU, fragmentacja i dlaczego twój WireGuard jest wolny

Jeśli Twój tunel WireGuard łączy się, ale działa wolno, zatrzymuje się przy dużych transferach lub zawiesza się na niektórych stronach, zwykle przyczyną jest MTU. Ten przewodnik wyjaśnia, czym jest MTU i fragmentacja, dlaczego tunele łamią rozmiary pakietów oraz dokładne ustawienie do zmiany.

Czym jest MTU i dlaczego tunele go łamią

MTU (Maksymalna Jednostka Transmisji) to największy pakiet, w bajtach, który łącze sieciowe może przesłać w całości. Standardowe MTU dla Ethernetu wynosi 1500. Gdy pakiet jest zbyt duży dla łącza, musi być podzielony na mniejsze części lub odrzucony.

Tunel WireGuard owija każdy z twoich pakietów w zaszyfrowany pakiet UDP, a ten wrapper dodaje narzut — około 60 bajtów dla IPv4 i 80 dla IPv6. Tak więc pełnowymiarowy pakiet o wielkości 1500 bajtów z twojej aplikacji staje się większy niż 1500, gdy WireGuard go enkapsuluje, a podstawowe łącze nie może go przesłać w całości. Dlatego WireGuard domyślnie ustawia MTU interfejsu na 1420: pozostawia miejsce na narzut związany z szyfrowaniem, aby enkapsulowany pakiet nadal mieścił się w ścieżce o wielkości 1500 bajtów.

Dlaczego niewłaściwe MTU spowalnia Cię

Normalnie, gdy pakiet jest zbyt duży, aby go przesłać bez fragmentacji, router wysyła z powrotem wiadomość ICMP "Fragmentacja potrzebna", a nadawca zmniejsza rozmiar pakietu — to jest Odkrywanie MTU ścieżki (PMTUD). Problem polega na tym, że wiele sieci i zapór sieciowych cicho odrzuca te wiadomości ICMP. Kiedy to się zdarza, otrzymujesz czarną dziurę PMTU: małe pakiety (jak początek strony) przechodzą, ale duże pakiety są cicho odrzucane bez błędu. Objaw jest nie do pomylenia — połączenia się zaczynają, a potem zawieszają; SSH loguje się, ale zamraża na wyjściu; niektóre strony ładują się, a inne zatrzymują; duże pobierania utknęły na 0%.

Jeśli twoja ścieżka ma niższe MTU niż oczekiwano — co jest powszechne w przypadku DSL/PPPoE (które dodaje 8 bajtów), niektórych sieci mobilnych i podwójnie enkapsulowanych łączy — nawet 1420 WireGuard może być zbyt wysokie i trafiasz w czarną dziurę. Rozwiązaniem jest obniżenie MTU tunelu, aby enkapsulowane pakiety pasowały do rzeczywistej ścieżki.

Znajdź i ustaw odpowiednie MTU

Zbadaj największy pakiet, który przechodzi przez twoją trasę bez fragmentacji, a następnie ustaw MTU interfejsu WireGuard poniżej niego. Wartości są przykładami; przetestuj swoje.

bash
# 1) Probe path MTU with don't-fragment pings (Linux/macOS).
#    Lower the size until it succeeds; that size + 28 = path MTU.
ping -M do -s 1472 8.8.8.8    # 1472 + 28 (ICMP/IP headers) = 1500
ping -M do -s 1392 8.8.8.8    # if 1472 fails, try smaller (=> 1420)
ping -M do -s 1252 8.8.8.8    # a safe fallback (=> 1280)

# 2) Set the tunnel MTU in your WireGuard config, under [Interface]:
#    [Interface]
#    MTU = 1280        # widely-compatible fallback; try 1412/1420 first

# 3) Apply and test a large transfer:
wg-quick down wg0 && wg-quick up wg0
curl -o /dev/null https://speed.example/largefile

# Rule of thumb: if small requests work but big ones hang, LOWER the MTU.
# 1420 -> 1412 -> 1280 are common steps. 1280 is the IPv6 minimum and
# almost always passes, at a small efficiency cost.
Share this page
FAQ

Pytania, odpowiedzi

Jakie MTU powinienem używać dla WireGuard?

Zacznij od domyślnej wartości WireGuard 1420. Jeśli duże transfery się zawieszają, a małe żądania działają, obniż ją — typowe kroki to 1412, a następnie 1280. 1280 to minimalne MTU dla IPv6 i prawie zawsze działa, przy niewielkim koszcie efektywności. Sprawdź swoją trasę za pomocą pingów bez fragmentacji, aby znaleźć najwyższą wartość, która przechodzi.

Dlaczego WireGuard łączy się, ale następnie zatrzymuje na dużych plikach?

Prawie zawsze czarna dziura PMTU. Twoje pakiety są zbyt duże dla ścieżki, a komunikaty ICMP, które by to sygnalizowały, są odrzucane, więc duże pakiety znikają w ciszy, podczas gdy małe się udają. Obniżenie MTU tunelu sprawia, że pakiety pasują i naprawia zastoje.

Dlaczego domyślne MTU WireGuard wynosi 1420, a nie 1500?

Ponieważ WireGuard enkapsuluje każdy pakiet w zaszyfrowanym UDP, dodając około 60 bajtów (IPv4) narzutu. Ustawienie MTU interfejsu na 1420 pozostawia miejsce na ten narzut, dzięki czemu enkapsulowany pakiet nadal mieści się w standardowej ścieżce 1500-bajtowej bez fragmentacji.

Tunel dostosowany do działania

s4m uruchamia WireGuard i OpenVPN z rozsądnymi domyślnymi ustawieniami oraz projektem bez logów, opartym na pamięci RAM. Jeśli sieć potrzebuje niższego MTU, wystarczy dostosować jedną linię i jesteś gotowy. Konta anonimowe, akceptowane kryptowaluty.

Ludzie znaleźli tę stronę, szukając

Rzeczywiste frazy wyszukiwania, na które ta strona odpowiada — powiązane otwierają stronę, która je szczegółowo omawia.