IPIP ndani ya WireGuard: baiti 20 za ziada ambazo hakuna aliyeweka kwenye bajeti
IPIP hugharimu baiti 20 za ziada ndani ya WireGuard. Fanya bajeti kwenye tabaka sahihi kabla ya kulaumu mgawanyiko kwa uhamishaji uliokwama kwenye handaki hai.
Ping ndogo hupita kwenye handaki siku nzima, bango la SSH linafika, kisha kikao kinaganda wakati uhamishaji wa faili unapoanza. Mtindo huu unaonyesha bajeti ya baiti iliyohesabiwa kwenye tabaka lisilo sahihi, ambapo handaki la nje lilipimwa kwa gharama yake yenyewe na hakuna aliyetoa ile ya ndani. Pakiti ya IPIP iliyowekwa ndani ni pakiti nyingine ya IP kwa WireGuard, na ndiyo sababu inatumia baiti ambazo hukuwahi kuzihifadhi. Marekebisho ni hesabu, na yanatoshea katika amri tatu na jedwali moja.
Dalili inayofichua hilo
Matatizo ya mgawanyiko hujitangaza kwa ukubwa, kamwe si kwa anwani. Mwenzako hujibu ping ya baiti 56 kwa saa moja kisha hunyamaza kwenye baiti 1400 wakati handaki linabaki juu na hakuna njia iliyobadilika. Ushirikiano wa mkono unatoshea, dirisha kamili la kwanza la TCP halitoshei, na uhamishaji unasimama sekunde chache baada ya kuonekana mzima.
Pima dari kabla ya kuhariri chochote, kwa sababu dari isiyopimwa ni ile utakayoifukuza mara mbili. Tuma probe moja chini ya ukubwa unaoshukiwa na biti ya do-not-fragment imewekwa, ping -M do -s 1000 10.9.0.2, kisha uirudie kwenye ukubwa unaojua tayari ni mkubwa mno. Wakati mgeuko unafuata ukubwa wa mzigo wakati lengwa linabaki bila kubadilika, uelekezaji unafanya kazi yake na kichwa kimoja kinakosekana kwenye bajeti.
Hesabu kila kichwa mara moja, kwenye tabaka sahihi
Anza kutoka MTU ndogo zaidi kwenye njia badala ya kiolesura cha handaki, kwa sababu ukuta uko juu ya ncha zote mbili. WireGuard hutumia baiti 60 kwa usafirishaji wa nje wa IPv4: 20 kwa IP, 8 kwa UDP na 32 kwa kichwa chake yenyewe, na baiti 80 wakati usafirishaji huo ni IPv6. wg0 ya baiti 1420 huhifadhi baiti 20 za nafasi chini ya 1440 ambazo njia ya baiti 1500 inaweza kweli kuwasilisha, na ndiyo sababu namba iliyonakiliwa kutoka wiki bado inafaa hapa. Chora stack yote kwenye mchoro, kwa sababu atakayebadilisha MTU baadaye atachagua namba mpya ya mviringo na kurithi hitilafu yako.
| Layer | Bytes | Remaining |
|---|---|---|
| Path MTU on the wired link | none yet | 1500 |
| WireGuard outer: IP, UDP, WG header | 60 | 1440 |
| Slack kept for safety | 20 | 1420 (wg0) |
| IPIP header inside the tunnel | 20 | 1400 (ipip0) |
| Original IPv4 and TCP headers | 40 | 1360 payload |
Mstari wa tano ndio mahali bajeti zinaharibikia, kwa sababu baiti 1400 ambazo kiolesura kilichowekwa ndani hubeba tayari zinajumuisha baiti 40 za vichwa vya pakiti asilia. Ni baiti 1360 tu kati ya hizo zinazofika kwenye mchakato unaosoma faili. Chukulia 1400 kama mzigo wa programu, kama mchoro wowote usio na safu hiyo unavyokualika, na kifaa cha ndani kinaishia kuwa baiti 40 mkarimu mno mbele ya ukuta ambao haujasogea.
Weka MTU mbili kwa mbali
Mtoa na kifaa kilichowekwa ndani ni vitu tofauti, kwa hiyo kila kimoja kinahitaji thamani yake. Vitumie kwa mpangilio huu, kwa sababu kifaa kilichowekwa ndani hakirithi chochote kutoka kwa mtoa:
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
Kanuni inayofaa kukumbukwa: MTU ya ndani = MTU ya nje - 20 wakati pakiti ambayo handaki ya IPIP hubeba ni IPv4, na - 40 mara tu upande wowote wa pakiti ya ndani unakuwa IPv6, kwa sababu kichwa kilichowekwa ndani hukua kutoka baiti 20 hadi 40. Hakuna kingine kinachoingia kwenye hiyo kutoa. Gharama ya WireGuard ilikuwa imetumika tayari ulipochagua 1420, na kuitozwa mara mbili huzalisha handaki linalofanya kazi kikamilifu na kubaki polepole maadamu hakuna anayeipima. Uwekaji ambao vifaa vyote viwili hubeba 1400 mviringo ni alama ya kidole ya hitilafu hiyo hasa.
IPv6 kwenye upande wowote wa pakiti iliyowekwa ndani hubatilisha kila namba iliyo juu, kwa hiyo hesabu upya badala ya kunakili namba kutoka tovuti inayofanana. Vichwa vinavyotolewa ni baiti 40 kila kimoja mara tu IPv6 inapotokea kwenye njia ya nje au kwenye datagramu asilia, na namba ya mzigo hupungua kwa kiasi hicho hasa.
Kanuni ya firewall ambayo pengine hauhitaji
Kati ya wenza wawili wa WireGuard kitu pekee kilicho kwenye waya ni UDP, kwa hiyo kanuni ya kuingia kwa itifaki 4, namba ambayo RFC 2003 inaipa usimbaji wa IPv4-ndani-ya-IPv4, haitengenezi njia iliyowekwa ndani wala haiiweki hai. Kichwa cha IPIP kinaishi ndani ya mzigo uliosimbwa, ambapo hakuna firewall ya ukingo inakiona. Kufungua itifaki 4 hata hivyo hakununui chochote zaidi ya njia moja zaidi inayoruhusiwa kuingia kwenye mwenyeji.
Sera inayotaja vyanzo na maeneo ya mwisho ya pakiti asilia inafaa baada ya usimbuaji-kinyume, kwenye violesura vya handaki na kwenye jedwali la uelekezaji. Iweke hapo na kanuni ya ukingo inaweza kubaki imefungwa.
Kile WireGuard inathibitisha kwa kweli
AllowedIPs huhukumu chanzo cha pakiti ambayo WireGuard hubeba, na inachobeba ni pakiti iliyosimbwa kwa IPIP. Chanzo cha IPIP kinachoruhusiwa hukubaliwa hata wakati kichwa cha ndani kinataja mwenyeji ambao ungependelea kutouelekeza. Kwa hiyo chanzo asilia si kile ambacho mwenzako alikikagua kwa ajili yako, na jozi hiyo ya anwani za ndani inahitaji utekelezaji wake baada ya usimbuaji-kinyume.
Kifuniko hutoa muundo wa uelekezaji, si tabaka la pili la usimbaji fiche. Kuita IPIP ulinzi wa ziada ndani ya WireGuard kunaelezea muundo tofauti.
Thibitisha kwa ngazi, si kwa ping moja
Jaribu ukubwa unaozunguka mpaka uliohesabu, kisha thibitisha kile kernel inachodhani kuhusu vifaa vyote viwili. Wakati baiti 1360 za mzigo pamoja na baiti 40 za vichwa zinafanya 1400, mwagiko wa kwanza chini unatoshea na wa pili unakaa baiti moja zaidi ya dari:
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
Kupita safi chini ya dari na kushindwa kwa ukubwa wa kwanza juu yake kunamaanisha hesabu inashikilia kutoka mwanzo hadi mwisho. Kisha endesha tena uhamishaji uliokwama awali, kwa sababu probe ya sintetiki inathibitisha bajeti na haisemi chochote kuhusu ukubwa wa uandishi wa mtumaji mwenyewe. Ikiwa njia iliyowekwa ndani bado inavunjika kwenye ukubwa uliothibitisha kuwa unatoshea, kagua usimbuaji-kinyume na njia za ncha ya mbali kabla ya kukata baiti kumi zaidi kutoka MTU.