Per què una VPN s'encalla en transferències grans i no en les petites
Les peticions petites responen mentre les transferències grans es congelen. Compareu el límit de la interfície, el del camí i la càrrega TCP anunciada abans de copiar una MTU fixa.
Una pàgina es carrega, un ping respon i una còpia de fitxer s'encalla sempre al mateix punt. Aquest patró apunta a la mida dels paquets, no a l'amplada de banda ni a les credencials. L'encapsulació afegeix bytes a cada paquet, així que una càrrega útil que cabia al camí original pot superar el límit un cop passa per un túnel. En aquestes converses es diuen MTU tres números diferents, i confondre'ls porta a un paràmetre que arregla una aplicació i en trenca una altra.
Tres números que la gent anomena MTU
La MTU de la interfície és el límit configurat per a un paquet en aquest enllaç. La MTU del camí és el límit més petit al llarg de la ruta, i es descobreix en lloc de configurar-se. La MSS de TCP és la mida de càrrega útil que un igual anuncia que pot rebre, i es deriva de les altres dues en lloc de ser un límit físic a part.
Un túnel té una visió interior i una d'exterior. El paquet exterior porta l'encapsulat més les capçaleres que el protocol necessita, així que la mida interior útil és menor que el que permet el camí exterior. El camí fins al servidor VPN també és diferent del camí del servidor fins a la destinació.
El descobriment de la MTU del camí permet que un emissor conegui la mida que funciona, però depèn que arribi la retroalimentació. Quan un dispositiu intermedi filtra els missatges ICMP corresponents, l'emissor continua transmetent paquets que mai no es completen, i aquest és el forat negre clàssic. El símptoma és inconfusible quan el coneixes: l'apretada de mans té èxit, la primera càrrega de mida completa desapareix i la connexió acaba reiniciant-se o penjant-se. Res del registre de l'aplicació no sembla un problema de xarxa.
Sondeja el camí amb una càrrega que controles
Una sonda és una prova sobre una ruta i una mida, no un paràmetre recomanat. Utilitza un amfitrió que respongui i varia només la mida de la càrrega.
ping -M do -s 1372 -c 2 203.0.113.20 ping -4 -f -l 1372 vpn.example
La primera ordre envia una sonda de Linux amb la fragmentació desactivada i una càrrega de 1372 bytes, i la segona fa el mateix a Windows, on la càrrega es fixa amb -l. Una resposta vol dir que aquesta mida ha sobreviscut al camí. Un missatge de fragmentació necessària és informatiu, mentre que un temps d'espera és ambigu perquè l'amfitrió o un dispositiu intermedi poden simplement descartar l'ICMP.
Baixa la mida en uns quants passos en lloc de fer una cerca binària fins al byte. Intentes establir si existeix un sostre de mida, no publicar un número per a cada xarxa. El número que trobis s'aplica a aquest camí, aquest protocol i aquesta família d'adreces.
IPv4 i IPv6 fragmenten de manera diferent, així que el resultat d'una família no diu res de l'altra. Prova la família que l'aplicació fa servir de debò.
L'ajust de MSS només ajuda TCP
A TCP, la càrrega útil efectiva es negocia durant l'apretada de mans, i un encaminador del camí pot reescriure aquest valor a la baixa perquè tots dos extrems enviïn segments més petits. Això és el que fa l'ajust de MSS, i funciona sense tocar el client de cap manera.
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu ip link show tun0
La primera regla ajusta la MSS anunciada a la MTU del camí per a les apretades de mans TCP reenviades, i la segona mostra la MTU pròpia de la interfície del túnel perquè la comparis amb el que permet el camí. L'ajust és la reparació menys invasiva per a una aplicació TCP que s'encalla després de l'apretada de mans.
Per a UDP no fa res. Un client de veu o de jocs que enviï datagrames grans ignorarà del tot un paràmetre de MSS, perquè no hi ha cap apretada de mans per reescriure. Si l'aplicació que falla és UDP, mira en canvi les opcions de mida de paquet del mateix client. Els dos protocols fallen de manera diferent i es reparen amb eines diferents, i per això el protocol pertany a la primera frase de l'incident.
OpenVPN exposa opcions com tun-mtu, mssfix i paràmetres relacionats amb la fragmentació, i el seu comportament depèn de la versió i de si el canal de dades és AEAD. Llegeix el manual de la versió que fas servir i canvia una opció alhora.
Canvia un sol paràmetre suportat i repeteix les dues proves
Conserva el perfil original, canvia un sol valor suportat i repeteix tant la petició petita que funcionava com la transferència gran que fallava. Si només canvia la gran, anaves darrere de la mida. Si canvien totes dues, alguna altra cosa s'ha mogut amb ella.
Un valor més baix pot reduir el símptoma tot afegint sobrecost, així que el número més petit possible no és l'objectiu. L'objectiu és una mida que el camí porti de manera fiable amb el mínim malbaratament. Anota el valor, el camí i la versió del client a l'incident, perquè el mateix número aplicat en un altre lloc és una conjectura.
Si el mateix perfil funciona des d'una altra xarxa de confiança, mantén aquesta diferència al diagnòstic en lloc de declarar el client arreglat. La variable que ha canviat és el camí, i el camí és el que ha mesurat la sonda.