Mae pingiau bach yn croesi'r twnnel trwy'r dydd, mae'r baner SSH yn cyrraedd, ac yna mae'r sesiwn yn rhewi'r eiliad y mae trosglwyddiad ffeil yn dechrau. Mae'r patrwm hwnnw'n awgrymu cyllideb beit a gyfrifwyd ar yr haen anghywir, lle cafodd y twnnel allanol ei faintio ar gyfer ei draul ei hun ac na wnaeth neb dynnu'r un mewnol. Dim ond paket IP arall yw paket IPIP nythu yng ngolwg WireGuard, a dyna'n union pam mae'n defnyddio beit na chawsoch eu cadw. Mae'r cywiriad yn rhifedd, ac mae'n ffitio mewn tri gorchymyn ac un tabl.

Y symptom sy'n ei ddatgelu

Mae problemau tameidu yn cyhoeddi eu hunain drwy faint, byth drwy gyfeiriadau. Mae eich cymar yn ateb ping 56 beit am awr ac yna'n distewi ar 1400 beit tra bo'r twnnel yn aros i fyny ac na newidiodd unrhyw lwybr. Mae'r cydlawenhau yn ffitio, nid y ffenestr TCP lawn gyntaf, ac mae'r trosglwyddiad yn stopio eiliadau ar ôl iddo edrych yn iach.

Mesurwch y nenfwd cyn i chi olygu unrhyw beth, oherwydd nenfwd nas mesurwyd yw'r un y byddwch yn ei hela ddwywaith. Anfonwch un prawf o dan y maint amheus gyda'r did do-not-fragment wedi'i osod, ping -M do -s 1000 10.9.0.2, ac yna ei ailadrodd ar faint rydych eisoes yn gwybod sy'n rhy fawr. Pan fydd y tro yn dilyn maint y llwyth tra bo'r cyrchfan yn aros yr un fath, mae'r llwybreiddio'n gwneud ei waith ac mae pennawd ar goll o'r gyllideb.

Cyfrifwch bob pennawd unwaith, ar yr haen iawn

Dechreuwch o'r MTU lleiaf ar y llwybr yn hytrach nag o ryngwyneb y twnnel, oherwydd mae'r wal yn uwch na'r ddau ben. Mae WireGuard yn gwario 60 beit ar glud allanol IPv4: 20 ar gyfer IP, 8 ar gyfer UDP a 32 ar gyfer ei bennawd ei hun, a 80 beit pan fo'r clud hwnnw'n IPv6. Mae wg0 1420 beit yn cadw 20 beit o slac o dan y 1440 y gall llwybr 1500 beit eu cyflwyno'n wirioneddol, a dyna pam y ffigur a gopïwyd o wici yn dal i ffitio yma. Tynnwch y pentwr cyfan ar y diagram, oherwydd fel arall bydd pwy bynnag sy'n newid yr MTU nesaf yn dewis rhif crwn newydd ac yn etifeddu eich nam.

LayerBytesRemaining
Path MTU on the wired linknone yet1500
WireGuard outer: IP, UDP, WG header601440
Slack kept for safety201420 (wg0)
IPIP header inside the tunnel201400 (ipip0)
Original IPv4 and TCP headers401360 payload

Y bumed rhes yw'r lle mae cyllidebau'n mynd o chwith, oherwydd mae'r 1400 beit y mae rhyngwyneb nythu yn eu cario eisoes yn cynnwys 40 beit o benawdau'r paket gwreiddiol. Dim ond 1360 o'r beit hynny sy'n cyrraedd y broses sy'n darllen y ffeil. Triniwch 1400 fel llwyth cymhwysiad, fel y mae unrhyw ddiagram heb y golofn honno'n eich gwahodd i'w wneud, ac mae'r ddyfais fewnol yn gorffen 40 beit yn rhy hael yn erbyn wal nad yw wedi symud.

Gosodwch y ddau MTU ar wahân

Mae'r cludydd a'r ddyfais nythu yn wrthrychau ar wahân, felly mae angen ei werth ei hun ar bob un. Cymhwyswch nhw yn y drefn hon, oherwydd nid yw'r ddyfais nythu yn etifeddu dim oddi wrth y cludydd:

ip link set wg0 mtu 1420
ip tunnel add ipip0 mode ipip remote 203.0.113.9 local 198.51.100.4
ip link set ipip0 mtu 1400

Y rheol sy'n werth ei chofio: MTU mewnol = MTU allanol - 20 pan fo'r paket y mae'r twnnel IPIP yn ei gario yn IPv4, a - 40 unwaith y bydd unrhyw ochr i'r paket mewnol yn IPv6, oherwydd mae'r pennawd nythu yn tyfu o 20 beit i 40. Nid oes dim arall yn perthyn i'r tynnu hwnnw. Mae traul WireGuard eisoes wedi'i wario pan ddewisoch 1420, ac mae ei godi ddwywaith yn cynhyrchu twnnel sy'n gweithio'n berffaith ac yn aros yn araf cyhyd ag na fydd neb yn ei fesur. Mae defnydd lle mae'r ddwy ddyfais yn cario 1400 crwn yn ôl bys y camgymeriad hwnnw'n union.

Mae IPv6 ar unrhyw ochr i'r paket nythu yn gwrthbrofi pob ffigur uchod, felly ailgyfrifwch yn lle copïo rhif o safle tebyg. Mae'r penawdau a dynnir yn 40 beit yr un unwaith y bydd IPv6 yn ymddangos yn y llwybr allanol neu yn y datagram gwreiddiol, ac mae'r ffigur llwyth yn disgyn yn union gymaint.

Y rheol wal dân nad oes ei hangen arnoch, mae'n debyg

Rhwng dau gymar WireGuard, yr unig beth ar y wifren yw UDP, felly nid yw rheol fewnol ar gyfer protocol 4, y rhif y mae RFC 2003 yn ei neilltuo i amgáu IPv4-mewn-IPv4, yn creu'r llwybr nythu nac yn ei gadw'n fyw. Mae pennawd IPIP yn byw y tu mewn i'r llwyth wedi'i amgryptio, lle nad oes wal dân ymyl yn ei weld. Nid yw agor protocol 4 beth bynnag yn prynu dim mwy nag un ffordd ganiataol arall i mewn i'r gwesteiwr.

Mae polisi sy'n crybwyll ffynonellau a chyrchfannau'r paket gwreiddiol yn perthyn ar ôl datgapsiwleiddio, ar ryngwynebau'r twnnel ac yn y tabl llwybreiddio. Rhowch ef yno ac mae'r rheol ymyl yn gallu aros ar gau.

Beth mae WireGuard yn ei wirio mewn gwirionedd

AllowedIPs yn barnu ffynhonnell y paket y mae WireGuard yn ei gario, a'r hyn y mae'n ei gario yw'r paket wedi'i amgáu gan IPIP. Derbynnir ffynhonnell IPIP a ganiateir hyd yn oed pan fo'r pennawd tu mewn yn enwi gwesteiwr yr hoffech beidio â'i lwybreiddio. Felly nid y ffynhonnell wreiddiol yw'r hyn y gwnaeth y cymar ei wirio ar eich rhan, ac mae angen gorfodi ei hun ar y pâr mewnol hwnnw o gyfeiriadau ar ôl datgapsiwleiddio.

Mae'r lapio yn darparu strwythur llwybreiddio, nid ail haen o grifftograffi. Mae galw IPIP yn amddiffyniad ychwanegol y tu mewn i WireGuard yn disgrifio dyluniad gwahanol.

Gwiriwch ag ysgol, nid un ping

Profwch feintiau sy'n rhychwantu'r ffin a gyfrifwyd gennych, ac yna cadarnhewch beth mae'r cnewyllyn yn ei gredu am y ddwy ddyfais. Gyda 1360 beit o lwyth a 40 beit o benawdau yn gwneud 1400, mae'r adlais cyntaf isod yn ffitio ac mae'r ail yn eistedd un beit y tu hwnt i'r nenfwd:

ping -M do -s 1372 10.9.0.2
ping -M do -s 1373 10.9.0.2
wg show wg0
ip -d link show ipip0

Mae pas glân o dan y nenfwd a methiant ar y maint cyntaf uwch ei ben yn golygu bod y rhifedd yn dal o'r dechrau i'r diwedd. Yna ailredegwch y trosglwyddiad a stopiodd yn wreiddiol, oherwydd mae prawf synthetig yn profi'r gyllideb ac yn dweud dim am feintiau ysgrifennu'r anfonwr ei hun. Os yw'r llwybr nythu yn torri o hyd ar faint y gwnaethoch brofi ei fod yn ffitio, archwiliwch ddatgapsiwleiddio a llwybrau'r pen pell cyn torri deg beit arall oddi ar yr MTU.

Erthyglau cysylltiedig