MTU или MSS? Какво всъщност поправя една промяна на VPN
MTU ограничава това, което носи връзката; MSS ограничава TCP полезния товар в нея. Ограничете правилния параметър и знайте кои протоколи не покрива нито един от двата.
Ping-овете минават, големите трансфери забиват, а тунелът се отчита като здрав. Някой намалява MTU на интерфейса, друг ограничава MSS и понякога проблемът изчезва по причини, които никой не записва. Двете числа описват различни обекти, затова промяната на грешното дава поправка, която изглежда като късмет. Ето реда за действие: определете слоя, приложете съответната настройка и след това тествайте на нова връзка.
Две числа, два обекта
MTU принадлежи на връзка или интерфейс: това е най-големият пакет, който може да бъде предаден, без да се разделя. MSS принадлежи на TCP: това е най-голямото количество TCP полезен товар, което един сегмент може да носи, и изключва както TCP, така и IP заглавките. При обикновена Ethernet връзка с IPv4 MTU от 1500 байта дава познатия MSS от 1460 байта. Тези числа описват различни слоеве и се обменят чрез различни механизми. Объркването им е лесно, защото и двете се мерят в байтове и са близо до 1500.
Едното идва като настройка на интерфейса. Другото идва като опция в сегмент SYN, договорена между крайни точки, които никога не виждат вашия интерфейс.
Къде се озовава външната допълнителна тежест
VPN поставя вътрешния пакет в друг пакет и външният трябва да се побере във физическия път. Заглавките на инкапсулацията, външната IP заглавка, транспортната заглавка и всеки етикет за удостоверяване изразходват байтове, които вътрешният пакет не може да използва. Оставете тунелния интерфейс на 1500 и външният пакет редовно надхвърля това, което пътят може да пренесе. С поставен бит 'без фрагментиране' рутерът го изхвърля и би трябвало да върне ICMP грешка; ако тази грешка се филтрира, подателят никога не разбира.
Затова отказът изглежда избирателен. Малките заявки завършват, а всичко, което запълни сегмент, забива, защото се изхвърлят само големите пакети. Тунел, който пропуска ping, не е тунел, който носи данни.
Ограничаване на MSS и къде се прилага
Ограничаването на MSS презаписва стойността в сегмента SYN, докато той пресича избрана точка, и така двете крайни точки избират по-малък полезен товар, без да знаят защо. В Linux това е цел в таблицата mangle, прилагана с явно правило, и трябва да удари SYN пакетите в посоката, която искате. Ограничете го до тунелния интерфейс и диапазона от адреси, защото широко правило променя поведението за трафик, който никога не влиза в тунела.
Ефектът е само върху TCP. UDP приложение, QUIC сесия и всеки протокол, който изгражда собствени датаграми, не се засягат от него.
Диагностика по фиксиран път
Дръжте по една променлива наведнъж. Тествайте с пакет, чийто размер избирате вие, и задайте флага 'без фрагментиране', за да съобщи ядрото резултата, вместо да го скрие.
Запишете къде започва отказът: вътре в тунела, на тунелния интерфейс или на физическия път след инкапсулацията. След това променете едно число и повторете същия тест, а не друг. Съществуващите връзки запазват MSS, който са договорили, затова промяната в политиката се вижда само при нова връзка, поради което кеширана страница не доказва нищо в нито една посока. Ако едно голямо качване започне да работи, научихте за този път, а не за всеки протокол по него.
Какво не поправя всяка промяна
Намаляването на MTU на интерфейса не променя MSS на вече установена сесия. Ограничаването на MSS не помага на UDP поток и не поправя път, където ICMP грешките се филтрират само в една посока. Всяка промяна поправя един клас проблеми и оставя останалите точно както са били.
Запишете коя настройка сте приложили, къде и кой тест показа разликата, защото иначе следващият инженер прилага и двете и губи способността да каже кое е имало значение. Ако ограничението е реално и постоянно, предпочетете MTU на тунела, който го отразява, пред ограничаване, което го прикрива. Ако трябва да ограничавате, оставете правилото ограничено по обхват и с коментар, защото необяснено правило в mangle по подразбиране става постоянно.