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 байт боштук сактайт, ошондуктан wikiден көчүрүлгөн сан бул жерге дагы эле туура келет. Бүт стекти диаграммага тартыңыз, антпесе кийинки 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-дан дагы он байт кесерден мурун алыскы учтун каптоодон чыгарылышын жана маршруттарын карап чыгыңыз.