Някъде в някое ръководство има число, обикновено между шестдесет и осемдесет байта, което някой е извадил от 1500, за да получи MTU на интерфейса. Това число описва една конкретна инкапсулация по един конкретен път. Сменете режима, външното семейство адреси, шифъра или наличието на NAT и сметките вече не важат за вашия тунел.

Числото идва от друг тунел

Натоварването не е свойство на IPsec по принцип. То е свойство на пакета, който действително се изгражда: договорен режим, външна заглавка, заглавка за защита, подпълване, поле за цялост и евентуално допълнителна UDP обвивка.

Стойност, цитирана за транспортен режим с IPv4 и без NAT, описва по-малък пакет от тунелен режим с IPv6 при преминаване през NAT. И двете са верни за своя случай. Копирането на която и да е от тях в друго внедряване е начинът, по който хората се сдобиват с MTU, който чупи големите преноси. Отказът е тих, защото малките заявки продължават да работят.

Съберете слоевете, които наистина ги има

Започнете от външната IP заглавка и вървете навътре. В тунелен режим оригиналният пакет е отвътре, така че външната заглавка е добавка, а не замяна. RFC 4303 описва заглавката на ESP, подпълването и данните за цялост, които я следват.

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

Нито един от тези редове не е постоянен между внедряванията, а редът за подпълване не е постоянен дори в едно внедряване. Точно затова една публикувана стойност за натоварването разочарова.

Два обекта могат да не са съгласни за един и същ тунел

Защитеният пакет все още трябва да премине външния път, а външният път не е еднакъв навсякъде. PPPoE линията за достъп носи по-малко от чист Ethernet сегмент. Мобилната мрежа може да се свие още, а доставчик, който тунелира собствения си трафик, добавя още една инкапсулация, за която никой не е споменал. Тунел, който работи на една връзка и се проваля на друга, описва втората връзка, а не протокола.

И двете посоки могат да се различават. Асиметричен маршрут може да ви даде работещо качване и застинало сваляне, което изглежда като проблем на приложението, докато не погледнете размерите на пакетите, а не достъпността. Успешният малък ping доказва много малко за отговор в пълен размер.

Измерете, вместо да изваждате

Намерете най-голямата дейтаграма, която оцелява по пътя. После я сравнете със стойността, която интерфейсът съобщава:

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'

Намалявайте размера на ping, докато не започнат да пристигат отговори, и приемете най-голямата работеща стойност за бюджета на този път. Изходът на xfrm ви казва кой режим и кои алгоритми са договорени, а това е входът за всяко честно изчисление. Заснемането потвърждава дали по кабела пътува ESP или ESP в UDP обвивка, което решава въпроса с NAT без догадки.

Отделете една стойност и за контролната плоскост. Пакетите за ръкостискане на IKE имат различна структура от пакетите с данни, така че размер, изведен от заснемане на ръкостискане, не е MTU на плоскостта с данни.

Сложете числото там, където му е мястото

За TCP през тунел ограничаването на MSS често е най-малко инвазивната мярка, защото намалява това, което крайните точки изпращат, без да променя самия тунел. За тунел, базиран на маршрути, задайте MTU на тунелния интерфейс умишлено и документирайте защо. Ако направите и двете наведнъж и после измерите, няма да научите кое е помогнало.

Дръжте договорения режим, външното семейство, състоянието на NAT и възпроизводимия симптом заедно в тикета. Записан набор от четири факта бие запомнена константа и това е единствената версия, която оцелява след следващото обновяване на клиента.

Подобни статии