Git застаје у WSL2 преко VPN-а: MTU интерфејса или путања?
Git се аутентификује и затим виси у WSL2? Упоредите Linux интерфејс са Windows VPN адаптером, тестирајте једну мању вредност и планирајте његов животни век.
Клон се аутентификује, број објеката се појави, а затим се ништа не помера неколико минута. Windows пријављује да је VPN повезан, име домаћина се разрешава, а прегледач на истој машини преузима исту страницу складишта без потешкоћа. Та комбинација указује на величину пакета, а не на акредитиве, и питање величине мора се поставити на два места јер WSL2 има свој Linux интерфејс са својим MTU-ом. Један број припада Windows страни путање, други дистрибуцији, а читање само VPN адаптера оставља половину путање непроверену.
Три сигнала одвајају проблем величине од другог
Први сигнал је облик: успостављање везе и мала размена успевају, затим масовни пренос престаје да напредује. Други је симетрија: исто складиште и исти транспорт не успевају док други домаћин на истој путањи ради, или се отказ мења са величином терета, а не са добом дана. Трећи је тишина: нема грешке аутентификације, нема одбијања проксија, нема неуспеха разрешавања имена, само пренос који никада не завршава.
Ова три заједно оправдавају хипотезу о величини пакета. Отказ DNS-а, истекао токен, одбијен SSH кључ и прокси који одбија CONNECT сваки производе своју грешку, и ниједан не изгледа као застој после успеха. Очување истог складишта, транспорта и временског прозора током тестирања чини поређење поштеним.
Упоредите оба интерфејса пре одлуке
Прикупите Windows поглед и Linux поглед у истој сесији и држите се адресе складишта уместо претпоставке који интерфејс је носи. Команда испод прво разрешава одредиште, тако да претрага путање описује стварни сервер са којим се клон повезује, а он се може разликовати од имена које је приказао прегледач. Покрените обе половине близу једна друге, јер VPN може променити метрике интерфејса између покушаја.
netsh interface ipv4 show subinterfaces
wsl -d Ubuntu -- bash -lc 'dest=$(getent ahostsv4 github.com | awk \'NR==1{print $1}\'); ip -br link show; ip route get "$dest"'
Покрените Linux половину унутар дистрибуције уместо да налепите излаз у Windows љуску, јер имена интерфејса и избор путање имају смисла само тамо. Налепљени излаз из Windows љуске пријављује погрешне бројеве са великом сигурношћу. Запишите уређај, изабрану путању и MTU са сваке стране пре него што било шта промените.
Одлучите да ли број треба да буде мањи
Већи MTU интерфејса од онога што путања може да носи није аутоматски дефект, јер откривање MTU-а путање постоји управо за то. Режим отказа се појављује када је откривање потиснуто: ICMP поруке се филтрирају негде на путу, пошиљалац никада не сазна границу, и велики пакети нестају док мали пролазе. То је својство путање, а не својство Git-а. То је и разлог зашто мала датотека може успети на вези где велика никада не завршава.
Ако докази то подржавају, привремена промена на Linux интерфејсу је најјефтинији тест. Изаберите вредност испод употребљиве величине путање, запишите претходну и држите све остало непромењено да би поређење имало смисла. Ако се пренос заврши са мањом вредношћу, имате дијагнозу, а не случајност.
ip -br link show dev eth0
sudo ip link set dev eth0 mtu 1380
ip -br link show dev eth0
Одлучите где треба да живи подешавање
Из теста произлазе три опције, и обично је прикладна само једна од њих. Ако мања вредност поправи пренос и вредност је заиста потребна овој мрежи, подешавању је потребан власник животног циклуса: кука за покретање у дистрибуцији, мрежна конфигурација којом управља платформа или документована процедура. Ако вредност ништа не поправи, вратите је и вратите се питањима транспорта, проксија и аутентификације.
Да ли кука за покретање постоји зависи од верзија Windows-а и WSL-а које се користе и од конфигурисаног мрежног режима. Пресликавање Windows мреже може променити како VPN сарађује са дистрибуцијом, на начине који су важнији од прилагођавања MTU-а, зато идентификујте режим пре него што осмислите заобилазно решење за њега. Вредност која одговара једном оператеру или једном VPN профилу није подразумевана за следећи.
Чега треба избегавати јесте примамљиво смештање: привилегована мрежна команда у датотеци за покретање сваке интерактивне љуске, или sudo без лозинке за целу ip бинарну датотеку да би скрипта могла да изврши један ред. Оба претварају дијагнозу у трајну изложеност и чине првобитни проблем теже видљивим касније.
Проверите после чистог покретања, затим поништите
Промена која траје само до поновног покретања дистрибуције није поправка. Поново покрените дистрибуцију, поново повежите VPN и поновите изворну Git операцију уместо замене као што су ping или мали HTTP захтев. Затим потврдите да интерфејс у новој сесији носи жељену вредност.
ip -br link show dev eth0
ip route get "$(getent ahostsv4 github.com | awk 'NR==1{print $1}')"
Држите забележену изворну вредност поред промене да би експеримент могао чисто да се поништи, и забележите која је фамилија адреса тестирана, јер резултат IPv4 не говори ништа о IPv6 вези на истом домаћину. Документација за WSL мреже описује режиме који одређују како поправка треба да изгледа; сам број MTU-а је локално мерење, не препорука.