IPIP WireGuard ішінде: ешкім бюджетке қоспаған қосымша 20 байт
IPIP WireGuard ішінде 20 қосымша байт тұрады. Тірі туннельде тұрып қалған тасымалды фрагментацияға жаппас бұрын бюджетті дұрыс қабатта есептеңіз.
Кішкентай ping-дер күні бойы туннельден өтеді, SSH баннері келеді, содан кейін файл тасымалы басталған сәтте сессия қатып қалады. Бұл үлгі дұрыс емес қабатта есептелген байт бюджетін көрсетеді: сыртқы туннель өз шығынына өлшенген, ал ішкісін ешкім шегермеген. WireGuard үшін кірістірілген IPIP пакеті — жай ғана тағы бір IP пакеті, сондықтан ол сіз ешқашан бөлмеген байттарды жұмсайды. Түзету — арифметика, ол үш команда мен бір кестеге сыйяды.
Оны әшкерелейтін симптом
Фрагментация мәселесі өзін өлшеммен жариялайды, ешқашан мекенжайлармен емес. Серіктесіңіз 56 байттық ping-ке бір сағат бойы жауап береді, содан кейін туннель көтеріліп тұрған және ешбір маршрут өзгермеген күйде 1400 байтта үнсіз қалады. Қол алысу сияды, алғашқы толық TCP терезесі сыймайды, тасымал сау болып көрінгеннен бірнеше секундтан кейін тоқтайды.
Бірдеңені өңдеу алдында шекті өлшеңіз, өйткені өлшенбеген шек — екі рет қуатын шек. Күмәнді өлшемнен төмен do-not-fragment биті қосылған бір зонд жіберіңіз, ping -M do -s 1000 10.9.0.2, содан кейін оны тым үлкен екенін білетін өлшемде қайталаңыз. Аударылу пайдалы жүктеме өлшеміне ілесіп, межелі орын өзгермей қалса, маршруттау өз жұмысын істеп жатыр, ал бюджеттен бір тақырыпша жетіспейді.
Әр тақырыпшаны бір рет, дұрыс қабатта санаңыз
Туннель интерфейсінен емес, жолдағы ең кіші MTU-дан бастаңыз, өйткені қабырға екі ұштан да жоғары тұр. WireGuard IPv4 сыртқы тасымалына 60 байт жұмсайды: 20 — IP-ге, 8 — UDP-ге және 32 — өз тақырыпшасына, ал бұл тасымал IPv6 болса, 80 байт. 1420 байттық wg0 1500 байттық жол шынымен жеткізе алатын 1440-ның астында 20 байт бос орын ұстайды, сондықтан wikiden көшірілген сан осында әлі сәйкес келеді. Бүкіл стекті диаграммаға салыңыз, әйтпесе келесі MTU-ды өзгертетін адам жаңа дөңгелек сан таңдап, сіздің қатеңізді мұраға алады.
| 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 |
Бесінші қатар — бюджеттер бұзылатын жер, өйткені кірістірілген интерфейс таситын 1400 байт бастапқы пакеттің өз 40 байт тақырыпшаларын қамтиды. Сол байттардың тек 1360-ы ғана файлды оқитын процеске жетеді. 1400-ді қосымша пайдалы жүктемесі деп қараңыз, сол бағансыз кез келген диаграмма сізді осылай шақырады, сонда ішкі құрылғы қозғалмаған қабырға алдында 40 байт артық жомарт болып шығады.
Екі MTU-ды бөлек орнатыңыз
Тасымалдаушы мен кірістірілген құрылғы жеке объектілер, сондықтан әрқайсысына өз мәні керек. Оларды осы ретпен қолданыңыз, өйткені кірістірілген құрылғы тасымалдаушыдан ештеңе мұраға алмайды:
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
Есте сақтауға тұрарлық ереже: ішкі MTU = сыртқы MTU - 20, егер IPIP туннелі таситын пакет IPv4 болса, және - 40, ішкі пакеттің қайсыбір жағы IPv6 болған бойда, өйткені кірістірілген тақырыпша 20 байттан 40-қа өседі. Бұл шегерімге басқа ештеңе кірмейді. WireGuard шығыны 1420 таңдаған кезде-ақ жұмсалған, ал оны екі рет алу мінсіз жұмыс істейтін және ешкім өлшемейінше баяу қалатын туннель жасайды. Екі құрылғы да дөңгелек 1400 таситын орналастыру — дәл сол қатенің саусақ ізі.
Кірістірілген пакеттің кез келген жағындағы IPv6 жоғарыдағы әрбір санды жояды, сондықтан ұқсас сайттан сан көшірудің орнына қайта есептеңіз. Шегерілетін тақырыпшалар — IPv6 сыртқы жолда немесе бастапқы дейтаграммада пайда болған бойда әрқайсысы 40 байт, ал пайдалы жүктеме саны дәл сонша азаяды.
Сізге, бәлкім, керек емес брандмауэр ережесі
Екі WireGuard серіктесінің арасында сымдағы жалғыз нәрсе — UDP, сондықтан 4 протоколы үшін кіріс ережесі, RFC 2003 IPv4-IPv4 ішінде қаптауға беретін нөмір, кірістірілген жолды да жасамайды, оны тірі де ұстамайды. IPIP тақырыпшасы шифрланған пайдалы жүктеменің ішінде өмір сүреді, онда оны ешбір шеткі брандмауэр көрмейді. 4 протоколын ашу бәрібір хостқа тағы бір рұқсат етілген жолдан басқа ештеңе сатып алмайды.
Бастапқы пакеттің көздері мен межелі орындарын атайтын саясат қаптамадан шығарғаннан кейін, туннель интерфейстерінде және маршруттау кестесінде тұрады. Оны сонда қойыңыз, шеткі ереже жабық қала алады.
WireGuard шын мәнінде нені тексереді
AllowedIPs WireGuard таситын пакеттің көзін бағалайды, ал ол таситыны — IPIP-мен қапталған пакет. Рұқсат етілген IPIP көзі, ішкі тақырыпша маршруттағыңыз келмейтін хостты атаса да қабылданады. Сондықтан бастапқы көз — серіктестің сіз үшін тексергені емес, және сол ішкі мекенжай жұбына қаптамадан шығарғаннан кейін өз күшіне енуі керек.
Қаптама маршруттау құрылымын береді, криптографияның екінші қабатын емес. IPIP-ті WireGuard ішінде қосымша қорғаныс деп атау басқа дизайнды сипаттайды.
Бір ping емес, сатымен тексеріңіз
Есептеген шегіңізді екі жағынан қамтитын өлшемдерді сынап көріңіз, содан кейін ядро екі құрылғы туралы не ойлайтынын растаңыз. 1360 байт пайдалы жүктеме плюс 40 байт тақырыпша 1400 болса, төмендегі бірінші жаңғырық сияды, ал екіншісі шектен бір байт асып отырады:
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
Шектен төмен таза өту және одан жоғары алғашқы өлшемде сәтсіздік — арифметика бастан аяқ ұстап тұр деген сөз. Содан кейін әуелде тұрып қалған тасымалды қайта іске қосыңыз, өйткені синтетикалық зонд бюджетті дәлелдейді және жіберушінің өз жазу өлшемдері туралы ештеңе айтпайды. Егер кірістірілген жол сіз дәлелдеген өлшемде әлі де сынса, MTU-дан тағы он байт кесер алдында алыс ұштың қаптамадан шығаруын және маршруттарын қарап шығыңыз.