WireGuard доторх IPIP: хэн ч төсөвт оруулаагүй нэмэлт 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 байт зарцуулдаг: IP-д 20, UDP-д 8, өөрийн толгойд 32, тэр тээвэр IPv6 бол 80 байт. 1420 байтын wg0 1500 байтын зам үнэхээр хүргэж чадах 1440-өөс доош 20 байтын зай үлдээдэг, тиймээс викигээс хуулсан тоо энд бас тохирно. Бүх стекыг диаграм дээр зур, эс бөгөөс дараагийн 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-аас дахин арван байт хасахаас өмнө алсын үзүүрийн задлалт, замыг шалга.