Ping адказвае, DNS вырашаецца, а кожная старонка, якой патрэбны сегмент поўнага памеру, завісае. На лініі, якая дадае ўласную інкапсуляцыю, шлях ціха губляе некалькі дзясяткаў байт бюджэту, і профіль, напісаны для чыстага Ethernet, працягвае запытваць пакеты, якія лінія не можа пранесці. Злучэнне не павольнае; яно адкідвае менавіта тыя пакеты, якія маюць значэнне.

Тры варыянты могуць гэта выправіць, і яны працуюць на розных узроўнях. Выбар няправільнага або нічога не робіць, або робіць тунель крохкім па-новаму, таму выбар пачынаецца з таго, што шлях фактычна падтрымлівае.

Тры ручкі, тры розныя ўзроўні

link-mtu — гэта вонкавы бюджэт: зашыфраваная нагрузка плюс загаловак OpenVPN, загаловак UDP і вонкавы загаловак IP. Ён апісвае тое, што пакідае машыну, і менавіта таму гэта лік, які абмяжоўвае фізічны шлях.

tun-mtu — гэта ўнутраны бюджэт: інтэрфейс, які бачыць ваш трафік. Ён роўна на велічыню накладных выдаткаў тунеля большы за тое, што шлях можа пранесці, і OpenVPN звычайна выводзіць яго сам, а не прымушае вас задаваць.

mssfix — цалкам іншы механізм. Ён перапісвае максімальны памер сегмента, абвешчаны падчас рукапацісканняў TCP, каб партнёры TCP выбіралі сегменты, якія змяшчаюцца пасля інкапсуляцыі. Ён не змяняе MTU інтэрфейса і не ўплывае на UDP.

Калі задаць link-mtu яўна, OpenVPN адымае ўласныя накладныя выдаткі, каб вывесці ўнутраны MTU. Гэтыя выдаткі не з'яўляюцца пастаяннай канстантай; яны залежаць ад шыфра і аўтэнтыфікацыі, таму значэнне, скапіяванае з допісу на форуме, можа быць памылковым у іншым профілі. Заданне адначасова link-mtu і tun-mtu дае кліенту дзве супярэчлівыя інструкцыі.

Вымярайце шлях, перш чым выбіраць любы лік

Вымярайце з фізічнага інтэрфейса, а не знутры тунеля, і памятайце, што ping паведамляе пра нагрузку, а не пра памер пакета. Дадайце 28 байт для загалоўкаў IPv4 і ICMP, перш чым параўноўваць нагрузку з кадрам у 1500 байт, і трымайце гэтую папраўку ў галаве, калі партнёр паведамляе іншы лік.

На кліенце Linux ping -M do -s 1472 забараняе фрагментацыю і церпіць няўдачу, калі пакет занадта вялікі. Зніжайце нагрузку, пакуль ён не пройдзе, затым дадайце 28, каб атрымаць MTU шляху. PPPoE каштуе 8 байт, таму 1492 — норма для DSL. DS-Lite і некаторыя мабільныя шляхі каштуюць 40 або больш, і адказ звычайна ніжэйшы, чым мяркуе намінальная хуткасць злучэння.

Калі кожны памер ping паспяховы, але вялікія перадачы ўсё яшчэ завісаюць, падазравайце чорную дзірку, а не проста абмежаванне памеру. Паведамленне ICMP пра неабходнасць фрагментацыі фільтруецца недзе на шляху, таму адпраўнік так і не даведваецца, што трэба паменшыцца, і гэта заўважаюць толькі патокі, якім патрэбны вялікі сегмент.

Спачатку сцісніце TCP, потым паменшыце тунель

Рукапацісканні TCP — адзінае, да чаго дакранаецца mssfix, таму гэта звычайна найменш разбуральны элемент кіравання, які варта паспрабаваць першым. Задайце яго крыху ніжэй за рэальны бюджэт шляху, перадайце тое ж значэнне з сервера, каб абодва бакі ўзгадніліся, і паўторна праверце вялікую загрузку. Калі завісанне знікне, праблема была ў памеры сегмента TCP, і больш нічога змяняць не трэба.

Зніжайце ўнутраны MTU, калі закрануты трафік не TCP. Служба UDP, тунель унутры тунеля або праграма, якая адпраўляе датаграмы поўнага памеру, працягнуць падаць пасля сціскання MSS, бо нішто не перапісвае памер яе пакета. Паменшыце tun-mtu для гэтага выпадку або задайце link-mtu і дазвольце кліенту вывесці ўнутранае значэнне, але ніколі абодва адначасова.

Не бярэцеся за стары варыянт фрагментацыі. Ён разбіваў пакеты ўнутры тунеля, дадаваў накладныя выдаткі і быў адхілены па слушных прычынах; сучасны OpenVPN чакае, што шлях будзе апісаны дакладна.

Чаму малыя праверкі працягваюць працаваць

Запыты DNS, рэха ICMP і рукапацісканні TCP — усё гэта значна ніжэй за памер, які падае. Таму тунель выглядае здаровым у кожным хуткім тэсце, пакуль рукапацісканні TLS і адказы HTTP ціха падаюць. Гэтая камбінацыя — працоўны traceroute і браўзер, які завісае на першым вялікім адказе, — і ёсць подпіс, які трэба шукаць. Бярыцеся за праверку поўнага памеру, перш чым брацца за новы профіль.

Правярайце тым трафікам, які пацярпеў няўдачу. Загрузіце вялікую старонку, адпраўце датаграму UDP поўнага памеру, калі гэта і ёсць закранутая служба, і паўтарыце з другога кліента на іншай лініі. Запішыце вымераны MTU шляху і выбранае значэнне, бо наступны чалавек, які дакранецца да профілю, інакш палічыць лік адвольным.

Ніколі не апускайце ўнутраны MTU ніжэй за 1280, калі IPv6 ідзе праз тунель, бо гэта мінімум, які павінна пранесці кожнае звяно IPv6. Меншы MTU — гэта факт пра шлях, а не настройка прадукцыйнасці, якую падбіраюць навобмацак.

Падобныя артыкулы