Trei setări pe un client Linux sună toate ca «fă pachetele mai mici», iar ele acționează pe straturi diferite. MTU-ul interfeței limitează fiecare pachet pe care dispozitivul îl trimite. MTU-ul unei rute limitează pachetele care folosesc acea rută, ceea ce este adesea exact ce vrei pentru o destinație VPN. Limita TCP MSS schimbă ce negociază cele două capete și nu face nimic pentru UDP.

Trei controale care arată ca același buton

Puneți-le una lângă alta înainte de a alege, pentru că alegerea rândului greșit explică majoritatea sfaturilor care nu funcționează:

ControlScopeWhat it cannot fix
Interface MTUEvery packet the device sendsNothing, but it over-constrains unrelated traffic
Route MTUPackets using that routeA send that the lookup never routes there
MSS clampTCP handshake on that pathUDP payload sizes and ICMP

Scăderea MTU-ului Ethernet pentru toată mașina este versiunea grosolană a acestei corecturi. Funcționează, și pedepsește și orice altă aplicație de pe gazdă, inclusiv pe cele ale căror căi erau în regulă. O valoare pe rută exprimă aceeași intenție fără costul colateral.

Comparația este valabilă doar pentru traficul pe care gazda îl generează singură. Trimiterea mai departe a unui pachet pentru alt client implică propria cale a acelui client și bugetul exterior al tunelului, iar o metrică de rută pe această gazdă nu trece de acea graniță.

Atașați bugetul rutei care câștigă căutarea

O înregistrare ilustrativă de rută IPv4 arată astfel:

ip -4 route get 10.60.0.20
ip -4 route add 10.60.0.0/16 dev tun-office src 10.90.0.2 mtu 1380

Citiți înregistrarea ca descriere a intenției, nu ca valoare de lipit. Prefixul, dispozitivul și sursa preferată trebuie să corespundă configurației reale, iar numărul trebuie să vină din dovezi despre calea încapsulată, nu dintr-o postare de blog. MTU-ul rutei limitează pachetul IP interior, care nu este același lucru cu o încărcătură TCP de 1380 de octeți sau cu un pachet exterior criptat de 1380 de octeți.

Uitați-vă unde se rezolvă de fapt căutarea înainte de a adăuga ceva. O gazdă cu reguli de politică poate ruta o destinație dată printr-un tabel diferit de main, iar o metrică ce există doar în main este invizibilă pentru acea cerere. Comparați ip -4 route show table all cu răspunsul de la ip route get, inclusiv contextul de marcă sau de spațiu de nume atunci când regulile le folosesc. Dacă cele două nu sunt de acord, tabelul care a răspuns este cel care are nevoie de metrică, nu cel care arată mai îngrijit.

mtu nu este mtu lock

Implicit, nucleul poate încă actualiza MTU-ul căii din feedback-ul ICMP, pentru asta există descoperirea MTU-ului căii. Adăugarea lock oprește asta. Este o altă decizie, nu o modalitate mai puternică de a păstra același număr, iar pentru IPv4 schimbă tratamentul documentat al bitului „nu fragmenta”.

Blocarea este rezonabilă când ați măsurat calea și vreți ca valoarea să rămână fixă indiferent ce sosește. Este un implicit prost când rețeaua trimite feedback legitim despre dimensiune, pentru că nucleul nu mai poate ajusta și defecțiunea se mută într-un alt simptom.

Dacă ICMP este filtrat undeva pe cale, nicio setare de rută nu repară asta. Corectarea aparține filtrului, iar un MTU mai mic este o soluție de ocol care ascunde defectul real până la următoarea schimbare a căii.

Software-ul de tunel adaugă propriile butoane de dimensiune

OpenVPN- mssfix ajustează dimensiunea segmentului TCP pentru cazul său documentat de tunel UDP. Acționează asupra conversației TCP, deci nu este o altă scriere a MTU-ului de rută al sistemului de operare și nu poate ajuta un serviciu UDP care ignoră negocierea.

Nu stivuiți un MTU de rută, o schimbare de MTU de interfață și o limită MSS în aceeași fereastră de schimbări. Dacă problema dispare, nu veți ști care a contat, iar cele pe care le păstrați vor limita traficul ani de zile fără un motiv pe care cineva îl ține minte.

Faceți-o reversibilă, apoi dovediți-o

Proprietarul real al rutei decide dacă schimbarea supraviețuiește unei reconectări. Un client VPN care instalează ruta dinamic o va reconstrui de obicei fără metrica dumneavoastră, iar o comandă ip route add manuală pare atunci o corectură care a eșuat o zi mai târziu. Puneți valoarea în configurația managerului și, dacă aveți nevoie de un experiment temporar, notați mai întâi ruta originală.

Testați cu o conexiune nouă care face operațiunea care s-a blocat, apoi confirmați că ruta privată vizată câștigă în continuare și că destinațiile nelegate nu s-au schimbat. Reconectați tunelul și citiți ruta din nou, pentru că o valoare care dispare la reconectare nu este o corectură.

Dacă dovezile nu susțin schimbarea, eliminați suprascrierea prin managerul ei și restabiliți atributele originale ale rutei în loc să ștergeți ruta. Apoi notați ce ați măsurat și pe ce cale, ca următoarea persoană să poată distinge o îmbunătățire reală de un experiment lăsat să ruleze.

Articole similare