Kur nors vadove yra skaičius, paprastai tarp šešiasdešimties ir aštuoniasdešimties baitų, kurį kažkas atėmė iš 1500, kad gautų sąsajos MTU. Tas skaičius aprašo vieną konkretų inkapsuliavimą viename konkrečiame kelyje. Pakeiskite režimą, išorinę adresų šeimą, šifrą arba NAT buvimą, ir aritmetika nebegalioja jūsų tuneliui.

Skaičius atėjo iš kito tunelio

Sąnaudos nėra IPsec savybė abstrakčiai. Tai savybė paketo, kuris tikrai sukonstruojamas: suderintas režimas, išorinė antraštė, apsaugos antraštė, užpildymas, vientisumo laukas ir galbūt papildomas UDP apvalkalas.

Skaičius, nurodytas transporto režimui su IPv4 ir be NAT, aprašo mažesnį paketą nei tunelio režimas su IPv6 per NAT. Abu teisingi savo atveju. Vieno iš jų kopijavimas į kitą diegimą yra būdas, kuriuo žmonės atsiduria su MTU, laužančiu didelius perdavimus. Gedimas tylus, nes mažos užklausos veikia toliau.

Sudėkite sluoksnius, kurie tikrai yra

Pradėkite nuo išorinės IP antraštės ir eikite į vidų. Tunelio režime originalus paketas yra viduje, tad išorinė antraštė yra papildymas, o ne pakaitalas. RFC 4303 aprašo ESP antraštę, užpildymą ir vientisumo duomenis, einančius po jos.

LayerWhat it addsWhen it applies
Outer IP header20 bytes for IPv4, 40 for IPv6Always, and 40 rather than 20 if the outer path is v6
ESP header8 bytes of SPI and sequence numberAlways
Block cipher IV8 to 16 bytes depending on the transformWhen the negotiated cipher uses one
Padding and trailerPadding to the block size, plus two trailer bytesAlways, and the amount varies with payload length
Integrity data12 to 16 bytes for common authenticated ciphersWhen integrity protection is negotiated
UDP encapsulation8 bytesNAT traversal on port 4500, which is common for clients behind NAT

Nė viena iš tų eilučių nėra pastovi tarp diegimų, o užpildymo eilutė nėra pastovi net viename diegime. Tai ir yra visa priežastis, kodėl vienas paskelbtas sąnaudų skaičius nuvilia.

Dvi vietos gali nesutarti dėl to paties tunelio

Apsaugotas paketas vis tiek turi pereiti išorinį kelią, o išorinis kelias ne visur vienodas. PPPoE prieigos linija neša mažiau nei švarus Ethernet segmentas. Mobilusis tinklas gali dar labiau susitraukti, o savo srautą tuneliuojantis tiekėjas prideda dar vieną inkapsuliavimą, kurio niekas nepaminėjo. Tunelis, kuris veikia vienoje linijoje ir nepavyksta kitoje, aprašo antrąją liniją, o ne protokolą.

Abi kryptys taip pat gali skirtis. Asimetrinis maršrutas gali duoti veikiantį įkėlimą ir sustojusį atsisiuntimą, o tai skaitoma kaip programos problema, kol pažiūrėsite į paketų dydžius, o ne į pasiekiamumą. Sėkmingas mažas ping labai mažai įrodo apie viso dydžio atsakymą.

Matuokite, o ne atimkite

Raskite didžiausią datagramą, kuri išgyvena kelyje. Tada palyginkite ją su verte, kurią praneša sąsaja:

ip link show eth0 | grep -o 'mtu [0-9]*'
ip xfrm state list
ping -M do -s 1400 198.51.100.7
ping -M do -s 1372 198.51.100.7
tcpdump -ni any -c 20 'esp or udp port 4500'

Mažinkite ping dydį, kol pradės ateiti atsakymai, ir didžiausią veikiančią vertę laikykite to kelio biudžetu. xfrm išvestis pasako, kuris režimas ir kurie algoritmai buvo suderinti, ir tai yra bet kokio sąžiningo skaičiavimo įvestis. Užrašas patvirtina, ar laide yra ESP, ar į UDP įvyniotas ESP, ir tai išsprendžia NAT klausimą nespėliojant.

Vieną vertę atidėkite ir valdymo plokštumai. IKE rankos paspaudimo paketai turi kitokią struktūrą nei duomenų paketai, tad iš rankos paspaudimo užrašo išvestas dydis nėra duomenų plokštumos MTU.

Padėkite skaičių ten, kur jam vieta

TCP per tunelį atveju MSS apribojimas dažnai yra mažiausiai invazyvi kontrolė, nes jis sumažina tai, ką siunčia galiniai taškai, nekeisdamas paties tunelio. Maršrutu pagrįstam tuneliui sąmoningai nustatykite tunelio sąsajos MTU ir dokumentuokite kodėl. Darant abu iš karto ir po to matuojant, nesužinosite, kuris padėjo.

Laikykite kartu biliete suderintą režimą, išorinę šeimą, NAT būseną ir atkartojamą simptomą. Užrašytas keturių faktų rinkinys nugali įsimintą konstantą, ir tai vienintelė to versija, kuri išgyvena kitą kliento atnaujinimą.

Susiję straipsniai