Linux-та әр маршрут бойынша MTU: үш өлшем бақылауы, бір маршрут
Интерфейс MTU, маршрут MTU және MSS шегі әр түрлі деңгейде әрекет етеді. Іздеуде жеңетін маршрутқа бюджетті байланыстырып, өзгерісті қайтарылатын күйде сақтаңыз.
Linux клиентіндегі үш параметр «пакеттерді кішірейт» деп естіледі және олар әр түрлі деңгейде әрекет етеді. Интерфейс MTU құрылғы жіберетін әр пакетті шектейді. Маршрут MTU сол маршрутты қолданатын пакеттерді шектейді, бұл бір VPN межесі үшін көбіне шынымен қажет нәрсе. TCP MSS шегі екі шеттің келісетінін өзгертеді және UDP үшін ештеңе істемейді.
Бір түйме сияқты көрінетін үш бақылау
Таңдау алдында оларды қатар қойыңыз, өйткені дұрыс емес жолды таңдау жұмыс істемейтін кеңестердің көбін түсіндіреді:
| Control | Scope | What it cannot fix |
|---|---|---|
| Interface MTU | Every packet the device sends | Nothing, but it over-constrains unrelated traffic |
| Route MTU | Packets using that route | A send that the lookup never routes there |
| MSS clamp | TCP handshake on that path | UDP payload sizes and ICMP |
Бүкіл машина үшін Ethernet MTU-ны төмендету осы түзетудің өрескел нұсқасы. Ол жұмыс істейді және хосттағы кез келген басқа қолданбаны да жазалайды, жолдары дұрыс болғандарды қоса. Маршрут бойынша мән сол ниетті жанама шығынсыз білдіреді.
Салыстыру тек хосттың өзі жасайтын трафик үшін жарамды. Басқа клиент үшін пакетті жіберу оның өз жолын және туннельдің сыртқы бюджетін қамтиды, ал бұл хосттағы маршрут метрикасы сол шекарадан аспайды.
Бюджетті іздеуде жеңетін маршрутқа байланыстырыңыз
Мысал IPv4 маршрут жазбасы былай көрінеді:
ip -4 route get 10.60.0.20
ip -4 route add 10.60.0.0/16 dev tun-office src 10.90.0.2 mtu 1380
Жазбаны қоюға арналған мән емес, ниет сипаттамасы ретінде оқыңыз. Префикс, құрылғы және қалаулы дереккөз нақты конфигурацияға сай болуы керек, және сан блог жазбасынан емес, инкапсуляцияланған жол туралы дәлелден келуі керек. Маршрут MTU ішкі IP пакетін шектейді, бұл 1380 байттық TCP жүктемесі немесе 1380 байттық шифрланған сыртқы пакет дегенді білдірмейді.
Бірдеңе қоспас бұрын іздеудің шынында қайда шешілетінін қараңыз. Саясат ережелері бар хост берілген межені main-ден өзге кестеден өткізе алады, және тек main кестесінде бар метрика сол сұрауға көрінбейді. Салыстырыңыз ip -4 route show table all мен ip route get жауабын, ережелер қолданғанда белгі немесе атау кеңістігі контекстімен бірге. Егер екеуі сәйкеспесе, метрика жауап берген кестеге керек, ықшам көрінетінге емес.
mtu — mtu lock емес
Әдепкіде ядро ICMP кері байланысынан жол MTU-сын жаңарта алады, жол MTU-сын анықтау осы үшін. Қосу lock мұны тоқтатады. Бұл басқа шешім, сол санды сақтаудың күштірек жолы емес, және IPv4 үшін «бөлшектеме» битінің құжатталған өңделуін өзгертеді.
Жолды өлшеп, кез келген нәрсе келсе де мән тұрақты болуын қаласаңыз, құлыптау орынды. Желі заңды өлшем кері байланысын жібергенде бұл нашар әдепкі, өйткені ядро енді бейімделе алмайды және ақау басқа симптомға ауысады.
Егер ICMP жолдың бір жерінде сүзілсе, ешқандай маршрут параметрі оны түзетпейді. Түзету сүзгіге тиесілі, ал кішірек MTU — келесі жол өзгерісіне дейін нақты ақауды жасыратын уақытша шешім.
Туннель бағдарламасы өз өлшем түймелерін қосады
OpenVPN- mssfix өзінің құжатталған UDP туннель жағдайы үшін TCP сегментінің өлшемін реттейді. Ол TCP әңгімесінде әрекет етеді, сондықтан операциялық жүйенің маршрут MTU-сының басқа жазылымы емес және келіссөзді елемейтін UDP қызметіне көмектесе алмайды.
Маршрут MTU-сын, интерфейс MTU өзгерісін және MSS шегін бір өзгеріс терезесіне үймеңіз. Егер мәселе жоғалса, қайсысы маңызды болғанын білмейсіз, ал қалдырғандарыңыз жылдар бойы трафикті шектейді, себебін ешкім есте сақтамайды.
Оны қайтарылатын етіп жасаңыз, содан кейін дәлелдеңіз
Маршруттың нақты иесі өзгерістің қайта қосылудан кейін қалатынын шешеді. Маршрутты динамикалық орнататын VPN клиенті оны әдетте сіздің метрикаңызсыз қайта құрады, ал қолмен ip route add кейін бір күннен соң сәтсіз болған түзету сияқты көрінеді. Мәнді менеджердің конфигурациясына қойыңыз, ал уақытша эксперимент керек болса, алдымен бастапқы маршрутты жазып алыңыз.
Тоқырап қалған операцияны орындайтын жаңа қосылыммен сынаңыз, содан кейін көзделген жеке маршрут әлі де жеңетінін және байланысы жоқ межелердің өзгермегенін растаңыз. Туннельді қайта қосып, маршрутты қайта оқыңыз, өйткені қайта қосылуда жоғалатын мән түзету емес.
Егер дәлелдер өзгерісті қолдамаса, қайта анықтауды оның менеджері арқылы алып тастап, маршрутты жоюдың орнына бастапқы маршрут атрибуттарын қалпына келтіріңіз. Содан кейін нені, қай жолда өлшегеніңізді жазыңыз, келесі адам нақты жақсартуды жұмысқа қалдырылған эксперименттен ажырата алатындай.