Hoekom 'n VPN by groot oordragte vasval, maar nie by klein s'n nie
Klein versoeke antwoord terwyl groot oordragte vries. Vergelyk die koppelvlaklimiet, die padlimiet en die aangekondigde TCP-loonvrag voordat jy 'n vaste MTU kopieer.
'n Bladsy laai, 'n ping slaag, en 'n lêerkopie hang elke keer op dieselfde punt. Daardie patroon dui op pakketgrootte eerder as op bandwydte of geloofsbriewe. Enkapsulering voeg grepe by elke pakket, so 'n loonvrag wat op die oorspronklike pad gepas het, kan die limiet oorskry sodra dit deur 'n tonnel gestuur word. Drie verskillende getalle word tydens hierdie gesprekke MTU genoem, en verwarring daarvan lei tot 'n instelling wat een toepassing regmaak en 'n ander breek.
Drie getalle wat mense MTU noem
Die koppelvlak-MTU is die gekonfigureerde limiet vir 'n pakket op daardie skakel. Die pad-MTU is die kleinste limiet langs die roete, en word ontdek eerder as gekonfigureer. Die TCP-MSS is die loonvraggrootte wat 'n eweknie aandui dat dit kan ontvang, en dit word van die ander twee afgelei eerder as dat dit 'n afsonderlike fisiese limiet is.
'n Tonnel het 'n binne- en 'n buite-aansig. Die buitenste pakket dra die geënkapsuleerde een plus watter opkoppe die protokol ook nodig het, so die bruikbare binnegrootte is kleiner as wat die buitenste pad toelaat. Die pad na die VPN-bediener verskil ook van die bediener se pad na die bestemming.
Pad-MTU-ontdekking laat 'n sender die werkende grootte leer, maar dit hang daarvan af dat terugvoer aankom. Wanneer 'n tussenliggende toestel die betrokke ICMP-boodskappe filter, hou die sender aan om pakkette te stuur wat nooit voltooi nie, en dit is die klassieke swartgat. Die simptoom is eiesoortig sodra jy dit ken: die handdruk slaag, die eerste volgrootte-loonvrag verdwyn, en die verbinding herstel of hang uiteindelik. Niks in die toepassing se logboek lyk soos 'n netwerkprobleem nie.
Verken die pad met 'n loonvrag wat jy beheer
'n Proef is bewyse oor een roete en een grootte, nie 'n aanbevole instelling nie. Gebruik 'n gasheer wat antwoord, en verander net die loonvraggrootte.
ping -M do -s 1372 -c 2 203.0.113.20 ping -4 -f -l 1372 vpn.example
Die eerste opdrag stuur 'n Linux-proef met fragmentering uitgeskakel en 'n loonvrag van 1372 grepe, en die tweede doen dieselfde op Windows waar die loonvrag met -l gestel word. 'n Antwoord beteken dat daardie grootte die pad oorleef het. 'n Boodskap dat fragmentering nodig is, is insiggewend, terwyl 'n tydverloop dubbelsinnig is omdat die gasheer of 'n tussenliggende toestel bloot ICMP kan laat val.
Stap die grootte in 'n paar stappe af eerder as om binêr tot op die greep te soek. Jy probeer vasstel of daar 'n grootteplafon bestaan, nie om 'n getal vir elke netwerk te publiseer nie. Die getal wat jy vind, geld vir hierdie pad, hierdie protokol en hierdie adresfamilie.
IPv4 en IPv6 fragmenteer verskillend, so 'n proefresultaat van een familie sê niks oor die ander nie. Toets die familie wat die toepassing werklik gebruik.
MSS-afklemming help net TCP
Vir TCP word die effektiewe loonvrag tydens die handdruk onderhandel, en 'n router op die pad kan daardie waarde afwaarts herskryf sodat beide eindpunte kleiner segmente stuur. Dit is wat MSS-afklemming doen, en dit werk sonder om die kliënt hoegenaamd aan te raak.
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu ip link show tun0
Die eerste reël klem die aangekondigde MSS tot die pad-MTU vir deurstuurde TCP-handdrukke, en die tweede wys die tonnelkoppelvlak se eie MTU sodat jy dit met die pad se toelating kan vergelyk. Afklemming is die minste ingrypende oplossing vir 'n TCP-toepassing wat ná die handdruk vasval.
Dit doen niks vir UDP nie. 'n Stem- of speletjiekliënt wat groot datagramme stuur, sal 'n MSS-instelling heeltemal ignoreer, want daar is geen handdruk om te herskryf nie. As die falende toepassing UDP is, kyk eerder na die kliënt se eie pakketgrootte-opsies. Die twee protokolle faal verskillend en word met verskillende gereedskap herstel, daarom hoort die protokol in die eerste sin van die kaartjie.
OpenVPN bied opsies soos tun-mtu, mssfix en fragmentverwante instellings, en hul gedrag hang af van die weergawe en daarvan of die datakanaal AEAD is. Lees die handleiding vir die weergawe wat in gebruik is, en verander een opsie op 'n slag.
Verander een ondersteunde instelling en herhaal albei lopies
Hou die oorspronklike profiel, verander 'n enkele ondersteunde waarde, en herhaal beide die klein versoek wat gewerk het en die groot oordrag wat gefaal het. As net die groot een verander, was jy grootte agterna. As albei verander, het iets anders saam met dit beweeg.
'n Laer waarde kan die simptoom verminder terwyl dit oorhoofse koste byvoeg, so die kleinste moontlike getal is nie die doel nie. Die doel is 'n grootte wat die pad betroubaar met die minste vermorsing dra. Noteer die waarde, die pad en die kliëntweergawe in die kaartjie, want dieselfde getal elders toegepas is 'n raaiskoot.
As dieselfde profiel van 'n ander vertroude netwerk werk, hou daardie verskil in die diagnose eerder as om die kliënt as reg te verklaar. Die veranderlike wat verander het, is die pad, en die pad is wat die proef gemeet het.