Внатре во контејнер зад корпоративен VPN, DNS се решава, страницата за најава се вчитува, здравствената крајна точка одговара, а потоа HTTPS барањето заглавува додека не истече времето. Повторното градење на сликата и менувањето на прокси променливите не менуваат ништо, бидејќи дефектниот дел не е во сликата. Клиентот се автентицира преку еден транспорт и пренесува големи податоци преку друг, а само вториот е расипан.

Два транспорта, еден збунувачки симптом

Корпоративен клиент базиран на TLS обично се автентицира преку обична TLS врска, потоа преговара втор канал за податоци базиран на UDP за сесијата. Кога таа втора нога работи, пропусноста и латентноста се подобруваат. Кога е филтрирана или не може да се смести во патеката, сè пред големиот пренос успева, а самиот пренос запира, што е точно горната шема.

Контејнерот не ја менува таа преговарање; тој ја менува патеката по која одат надворешните пакети. Домаќинот го преведува текот на контејнерот, така што UDP датаграмите излегуваат од друг изворен порт од локалниот сокет на клиентот и се враќаат преку запис за превод што истекува со многу пократок тајмер од воспоставен TCP тек. Ако тунелот работи на домаќинот, а не успева во контејнерот, споредете ги тие два тека пред да ја обвините апликацијата. Тоа споредување решава повеќе од секое повторно градење на сликата.

Одлучувајте со експеримент, не со интуиција

Најевтиниот експеримент го исклучува UDP каналот за податоци и го повторува барањето. Користете клиент од командната линија наместо десктоп обвивката, за да се примени знамето навистина: openconnect vpn.example.net --user=you --interface=tun0 --no-dtls. Ако барањето што заглавуваше сега се заврши, DTLS ногата беше проблемот, а остатокот беше шум.

Потврдете го резултатот во двете насоки од истиот контејнер: едно големо барање со знамето и едно без. Промена на однесувањето што го следи знамето е доказ; страница што на крајот се вчитува не е.

Ако знамето го поправи, одлучете зошто

Три услови го даваат истиот симптом и бараат различни одговори. Патеката може целосно да го филтрира UDP, што го прави знамето точниот траен одговор за таа мрежа. Патеката може да дозволува UDP, но да ги отфрла големите датаграми, што упатува на MTU, а не на филтрирање. Или патеката може да биде толку загубена што UDP ногата работи полошо од TCP, што е одлука за капацитет, а не за достапност.

Разликувајте ги пред да документирате заобиколно решение. Филтрирањето преживува секоја големина на пакет, проблемите со MTU се појавуваат само над праг, а загубата се покажува како повторно испраќање и променливо доцнење, а не како чисто заглавување. Секој тест ја стеснува причината без да ја менува конфигурацијата на клиентот.

Проверете ја големината на пакетот пред да го задржите заобиколното решение

Ако причината е големината, интерфејсот на тунелот прифаќа пакети што патеката не може да ги носи, и проблемот се враќа на секој транспорт штом порасне товарот. Споредете ги интерфејсите: ip link show tun0 на домаќинот, потоа docker network inspect bridge за читање на MTU запишан во мрежните опции. Контејнерски мост што сè уште е на 1500 бајти под тунел што носи помалку е вообичаен наод.

Истражувајте нагоре од позната добра големина со тест за забрана на фрагментација внатре во тунелот, потоа намалете го MTU на контејнерската мрежа или стегнете TCP MSS на тунелот. Секоја од двете поправки често ја прави UDP патеката повторно употреблива и ја отстранува потребата од знамето, што е подобар исход кога филтрирањето не е причината.

Одлучете што сте подготвени да размените

Со исклучен канал за податоци, тунелот го носи товарот внатре во TCP врска. На чиста патека тоа е само побавно; на загубена, еден изгубен сегмент го забавува сè зад него и надворешното повторно испраќање се натпреварува со внатрешното. Таа размена одговара на интерактивен развој и мали API повици, а лошо одговара на големи преноси или долги сесии преку мобилни врски.

Која и опција да изберете, запишете кој транспорт тунелот на крајот го користел и зошто. Контејнер што тивко зависи од знаме што некој го додал пред месеци е следниот дефект, а тој што ќе го дебагира нема да знае дали знамето било заобиколно решение за филтрирање или остаток од експеримент со MTU.

Поврзани статии