Temat: MTU, PMTUD i DPLPMTUD w OpenWRT - problemy
Trafiłem na taki wydawałoby nieskomplikowany problem.
Chcę korzystać sobie normalnie z Wireguarda. Nic specjalnego, póki w równaniu nie pojawił się OpenWRT.
Konfig 1:
Maszyna docelowa: Mikrotik konfiguracja domyślna wireguarda, schowany za FunBoxem 3 połączonym światłowodem. Standardowy port forwaring z FB3 do Mikrotika.
Klient: Windows z domyślnym klientem Wireguard. Dla ustalenia uwagi plik konfiguracyjny:
[Interface]
PrivateKey = *********
ListenPort = 51821
Address = 10.10.11.103/32
DNS = 8.8.8.8
[Peer]
PublicKey = *********
AllowedIPs = 0.0.0.0/0
Endpoint = *******.ddns.net:51821Po stronie mikrotika konfiguracja jest "podobnie" złożona. Absolutny default.
Internet klientowi zapewnia telefon komórkowy z udostępnianiem z aktywnym routerem wifi. Operartor Orange.
Efekt - wszystko działa bez pudła.
Konfig 2:
Maszyna docelowa - jak wyżej.
Klient też.
ALE:
Internet zapewnia Xunison D50 z openwrt z "sąsiedniego wątku". Karta SIM ta sama.
efekt:
O ile nie wymuszę dyrektywą MTU odpowiednio niskiej wartości (na szybko: coś koło 1000-1100) - pojawiają się utraty pakietów i połączenie nie nadaje się do użytku. z MTU wszystko działa.
WNIOSEK:
OpenWRT ma jakiś problem z właściwą obsługą PMTUD a raczej DPLPMTUD.
Co próbowałem:
1. Włączać i wyłączać MSS clamping - wyłączenie pogarsza sprawę (domyślnie jest włączone)
2. Dodać do firewalla zgodę na ICMP forward z WAN do LAN - nic nie zmienia (bo nie powinno chyba, bo PMTUD jest chyba bardziej dla TCP?)
3. Włączyć net.ipv4.tcp_mtu_probing - nie pomogło (bo to dla TCP znowu?) - domyślnie było 0
4. Włączać net.ipv4.ip_forward_use_pmtu (domyślnie 0 z powodu security jak sądzę)
Na razie żadna zmiana poza wpisaniem na szytwno MTU nie pomogło.
Spostrzeżenia dla utworzenia tła problemu:
1. Domyślne MTU w wielu miejscach OpenWRT widzę, że jest 1280 (minimum dozwolone dla IPv6).
2. To także domyślne MTU w wireguard jak nie zostało wykryte inne.
3. Xunison D50 w komunikacji z modemem używa interfejsu rmnet_mhi0.1 z MTU 1252.
4. Zrobiłem podobne próby jeszcze z połączeniem przez PlusGSM po modemie komórkowym i routerze Dell z obsługą modemów GSM (modele sprawdzę w razie czego) - też działa bez problemu.
Ktoś ma pomysł co jeszcze sprawdzić, ustawić i zmienić, żeby OpenWRT zachowywał się (może nawet nieco mniej bezpiecznie) "przyzwoicie" w kwestii MTU?
EDIT:
Wyjaśnienie dotyczące tematu:
MTU - wszyscy wiedzą, Maximum Transfer Unit = maksymalny rozmiar pakietu, jaki przepuszczamy przez router/interfejs
MSS-Clamp - aktywne wywalanie pakietów, które przekraczają MTU
PMTUD - Path MTU Discovery - rozwiązanie oparte na odpowiedziach ICMP typu "fragmentation needed" wysyłanych zwrotnie do klienta, gdy jego pakiety są za duże dla następnego routera, a jednocześnie "jakiś debil" ustawił flagę DF (Do not Fragment) w tym pakiecie zabraniającą podzielenia pakietu na mniejsze kawałki.
DPLPMTUD - coś jak wyżej, tylko dla UDP (Datagram Packetization Layer Path MTU Discovery) zdefiniowane w RFC 9869. Taki automat, który robi sobie wykrywanie, jaki jest największy MTU na trasie.