WSL2 не достиже VPN подмрежу: прочитајте руту домаћина
Дистрибуција стоји иза сопственог NAT-а и никада не види Windows тунел. Прочитајте тренутну адресу и префикс са домаћина, па их додајте унутар WSL-а.
Изнутра дистрибуције, ping ка интерном серверу истиче, док иста адреса одговара са Windows-а. VPN је повезан и Windows рута је исправна, па је размак граница WSL-а. Прођите пут од неуспеле команде назад до интерфејса домаћина. Поправка није фиксни CIDR у конфигурационој датотеци; то је читање тренутне адресе и њено додавање тамо где је дистрибуција може користити.
Потврдите где се пут зауставља
Покрените исти тест на обе стране: разрешите и повежите се са једним интерним домаћином са Windows-а, па то поновите у дистрибуцији. Успех на Windows-у плус истек у дистрибуцији лоцира квар између њих, а не у VPN клијенту или интерном серверу. Учините то пре промене било које руте, како би оба резултата описивала исту дестинацију.
Унутар дистрибуције ip -4 addr приказује виртуелни адаптер са адресом из WSL NAT опсега, а ip route приказује подразумевану руту ка WSL пролазу. Нема руте за корпоративни префикс јер тунелски адаптер домаћина нема пандан унутар дистрибуције. Подразумевани пролаз води у WSL NAT, а не у корпоративну мрежу.
Додавање корпоративне руте без претходног додавања локалне адресе на доступној вези даје истек или грешку недоступне мреже. Адреса је део који руту чини употребљивом, зато је прво прочитајте, а руту третирајте као други корак.
Изаберите огледалну мрежу или руту са скриптом
Огледална мрежа даје дистрибуцији сопствене интерфејсе домаћина, па се тунел и његове руте појављују без копирања. Функција зависи од новије Windows градње и од networkingMode=mirrored у .wslconfig, а њено укључивање мења неповезано понашање као прослеђивање localhost-а. Третирајте је као промену платформе, а не као подешавање руте. Ако је градња подржава и нежељени ефекти су прихватљиви, то је најкраћи пут.
Ужи приступ задржава подразумевани NAT и копира адресу и руту тунела у дистрибуцију сваки пут када се тунел подигне. Ради на више градњи, не мења понашање localhost-а и видљиво пада када је VPN искључен. Цена је мала скрипта која мора да се покреће при сваком повезивању.
Изаберите једну и запишите је. Мешање огледалне конфигурације са ручним рутама ствара дистрибуцију са два пута до истог префикса и без јасног власника ниједног. Један документовани метод лакше се отклања од грешака од два полуконфигурисана.
Извуците тренутне детаље тунела са домаћина
Упарите адаптер по MAC адреси, а не по имену, јер се имена мењају са VPN клијентом и редоследом повезивања. Наведите адаптере једном, забележите MAC тунелског адаптера, па затражите његову адресу и префикс. MAC остаје са виртуелним адаптером кроз поновна повезивања, док име и индекс интерфејса не остају:
powershell.exe 'Get-NetAdapter | Where-Object { $_.MacAddress -eq "3C-52-82-0A-1B-7C" } | Get-NetIPAddress -AddressFamily IPv4 | Select-Object IPAddress, PrefixLength'Пролаз долази из конфигурације интерфејса. Прво узмите индекс интерфејса, па прочитајте следећи скок. Индекс се може променити после рестартовања или ресетовања адаптера, зато га скрипта треба читати, а не чувати:
powershell.exe '(Get-NetAdapter | Where-Object { $_.MacAddress -eq "3C-52-82-0A-1B-7C" }).InterfaceIndex'
powershell.exe '(Get-NetIPConfiguration -InterfaceIndex 27).IPv4DefaultGateway.NextHop'Пропустите излаз кроз tr -d '\r' пре него што га доделите променљивој. PowerShell завршава редове повратком кочије, а без уклањања последње поље носи скривени знак због којег команда руте падне са збуњујућом грешком анализе.
Примените адресу и руту унутар дистрибуције
Инсталирајте адресу тунела као адресу са префиксом на интерфејсу дистрибуције, па усмерите корпоративни блок кроз пролаз домаћина:
sudo ip addr add 172.20.14.37/22 dev vpn
sudo ip route add 172.20.0.0/16 via 172.20.12.1 dev vpnNetworkManager одбацује ручно конфигурисану адресу када се веза циклички обнови, а ниједан DHCP клијент не тражи замену. Поставите метод на аутоматски како би свако поновно повезивање освежило адресу, па поново подигните везу. Ручни метод изгледа стабилно до првог поновног повезивања:
nmcli con show vpn
sudo nmcli con mod vpn ipv4.method auto
sudo nmcli con up vpnПокрените оба корака из куке која покреће VPN, а не из интерактивне љуске. Скрипта која чита адресу, додаје је, додаје руту и бележи вредности претвара понављајућу ручну поправку у поновљиву, а дневник је прво што треба прочитати када се префикс промени.
Причврстите име и докажите пут
Језгро може преименовати интерфејс дистрибуције између eth1 и eth2 после пребацивања мреже, а скрипта писана према имену тада уређује погрешан уређај. udev правило везано за MAC даје интерфејсу стабилну ознаку:
SUBSYSTEM=="net", ACTION=="add", ATTRS{address}=="3c:52:82:0a:1b:7c", NAME="vpn"Затим проверите адресом, рутом и стварном TCP везом: ip -4 addr show dev vpn, ip route get 172.20.4.10 и везом на познати интерни порт. Претрага руте треба да именује vpn уређај и изворну адресу коју сте додали.
Ако сва три прођу унутар дистрибуције, а веза и даље не успева, пакет напушта WSL и одбацује се на страни Windows-а. Проверите заштитни зид домаћина и сопствено филтрирање VPN клијента пре промене скрипте, јер још једна измена руте неће поправити пакет који већ стиже до домаћина.