MTU на маршруце ў Linux: тры кантролі памеру, адзін маршрут
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 |
Зніжэнне MTU Ethernet для ўсёй машыны — гэта грубая версія гэтага выпраўлення. Яно працуе, але таксама карае кожную іншую праграму на хосце, уключаючы тыя, чые шляхі былі ў парадку. Значэнне на маршрут выяўляе тую ж думку без спадарожных выдаткаў.
Параўнанне слушнае толькі для трафіку, які стварае хост. Перадача пакета іншаму кліенту ўключае ўласны шлях гэтага кліента і знешні бюджэт тунелю, а метрыка маршруту на гэтым хосце не дасягае праз гэтую мяжу.
Прывяжыце бюджэт да маршруту, які перамагае пры пошуку
Прыкладны запіс маршруту 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
Па змаўчанні ядро ўсё яшчэ можа абнаўляць MTU шляху з зваротнай сувязі ICMP, дзеля гэтага і існуе выяўленне MTU шляху. Даданне lock спыняе гэта. Гэта іншае рашэнне, а не мацнейшы спосаб захаваць той жа лік, і для IPv4 яно змяняе дакументаваную апрацоўку біта «не фрагментаваць».
Блакіроўка разумная, калі вы вымералі шлях і хочаце, каб значэнне заставалася нязменным незалежна ад таго, што прыходзіць. Гэта дрэннае значэнне па змаўчанні, калі сетка дасылае слушную зваротную сувязь пра памер, бо ядро ўжо не можа адаптавацца і збой пераходзіць у іншы сімптом.
Калі ICMP фільтруецца дзесьці на шляху, ніякая налада маршруту гэтага не выправіць. Выпраўленне належыць фільтру, а меншы MTU — гэта абыход, які хавае сапраўдную няспраўнасць да наступнай змены шляху.
Праграмы тунеляў дадаюць уласныя ручкі памеру
OpenVPN- mssfix рэгулюе памер TCP-сегментаў для свайго дакументаванага выпадку UDP-тунелю. Ён працуе з TCP-размовай, таму гэта не іншае напісанне MTU маршруту аперацыйнай сістэмы, і ён не можа дапамагчы службе UDP, якая ігноруе дамоўленасць.
Не стаўце MTU маршруту, змену MTU інтэрфейса і абмежаванне MSS у адно акно змен. Калі праблема знікне, вы не даведаецеся, што менавіта мела значэнне, а тое, што вы пакінеце, будзе абмяжоўваць трафік гадамі без прычыны, якую хтосьці памятае.
Зрабіце гэта зваротным, потым давядзіце
Сапраўдны ўладальнік маршруту вырашае, ці перажыве змена перападключэнне. VPN-кліент, які ўсталёўвае маршрут дынамічна, звычайна перабудуе яго без вашай метрыкі, і ручная ip route add тады выглядае як выпраўленне, якое правалілася праз дзень. Запішыце значэнне ў канфігурацыю мэнэджара, і калі патрэбны часовы эксперымент, спачатку запішыце зыходны маршрут.
Праверце новым злучэннем, якое выконвае аперацыю, што захрасла, потым пацвердзіце, што патрэбны прыватны маршрут па-ранейшаму перамагае, а староннія мэты не змяніліся. Перападключыце тунель і зноў прачытайце маршрут, бо значэнне, якое знікае пры перападключэнні, не з'яўляецца выпраўленнем.
Калі доказы не падтрымліваюць змену, выдаліце перавызначэнне праз яго мэнэджар і аднавіце зыходныя атрыбуты маршруту, а не выдаляйце маршрут. Затым запішыце, што вы вымералі і на якім шляху, каб наступны чалавек мог адрозніць сапраўднае паляпшэнне ад эксперыменту, які пакінулі працаваць.