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 по подразбиране става постоянно.

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