WSL2 VPN quyi tarmog'iga yetib bormaydi: xost yo'nalishini o'qing
Distributiv o'z NAT'i orqasida o'tiradi va Windows tunnellarini hech qachon ko'rmaydi. Xostdan joriy manzil va prefiksni o'qing, so'ng ularni WSL ichiga qo'shing.
Distributiv ichidan ichki serverga ping vaqt tugashi bilan yakunlanadi, xuddi shu manzil esa Windows dan javob beradi. VPN ulangan va Windows yo'nalishi to'g'ri, shuning uchun bo'shliq WSL chegarasidir. Muvaffaqiyatsiz buyruqdan xost interfeysigacha yo'lni bosib o'ting. Yechim konfiguratsiya faylidagi qat'iy CIDR emas; u joriy manzilni o'qib, distributiv foydalana oladigan joyga qo'shishdir.
Yo'l qayerda to'xtashini tasdiqlang
Ikkala tomonda bir xil sinovni bajaring: Windows dan bitta ichki xostni hal qilib ulaning, so'ng uni distributivda takrorlang. Windows dagi muvaffaqiyat va distributivdagi vaqt tugashi nosozlikni ikkalasi orasida ko'rsatadi, VPN mijozi yoki ichki serverda emas. Buni har qanday yo'nalishni o'zgartirishdan oldin qiling, shunda ikkala natija bir xil manzilni tavsiflaydi.
Distributiv ichida ip -4 addr WSL NAT diapazonidan manzilga ega virtual adapterni ko'rsatadi, ip route esa WSL shlyuziga qaratilgan standart yo'nalishni ko'rsatadi. Korporativ prefiks uchun yo'nalish yo'q, chunki xostning tunnel adapterining distributiv ichida o'xshashi yo'q. Standart shlyuz WSL NAT ga olib boradi, korporativ tarmoqqa emas.
Korporativ yo'nalishni avval erishish mumkin bo'lgan bog'lanishda mahalliy manzil qo'shmasdan qo'shish vaqt tugashi yoki tarmoqqa erishib bo'lmaydi xatosini beradi. Yo'nalishni foydali qiladigan qism manzildir, shuning uchun avval uni o'qing, yo'nalishni esa ikkinchi qadam deb biling.
Oynali tarmoq yoki skript yo'nalishini tanlang
Oynali tarmoq distributivga xostning o'z interfeyslarini beradi, shuning uchun tunnel va uning yo'nalishlari nusxa ko'chirmasdan paydo bo'ladi. Funksiya yangi Windows buildiga va .wslconfig faylidagi networkingMode=mirrored ga bog'liq, uni yoqish esa localhost uzatish kabi aloqasiz xatti-harakatni o'zgartiradi. Buni yo'nalishni nozik sozlash emas, platforma o'zgarishi deb qabul qiling. Build qo'llab-quvvatlasa va nojo'ya ta'sirlar maqbul bo'lsa, bu eng qisqa yo'ldir.
Torroq yondashuv standart NAT ni saqlaydi va tunnel har ko'tarilganda tunnel manzili va yo'nalishini distributivga nusxalaydi. U ko'proq buildlarda ishlaydi, localhost xatti-harakatini o'zgartirmaydi va VPN o'chirilganda ko'rinadigan tarzda muvaffaqiyatsiz bo'ladi. Narxi har bir ulanishda ishga tushirilishi kerak bo'lgan kichik skriptdir.
Bittasini tanlang va yozib qo'ying. Oynali konfiguratsiyani qo'lda yasalgan yo'nalishlar bilan aralashtirish bir xil prefiksga ikki yo'li bor va hech birining aniq egasi yo'q distributiv yaratadi. Bitta hujjatlashtirilgan usulni disk raskadrovka qilish ikkita yarim sozlanganidan osonroq.
Joriy tunnel ma'lumotlarini xostdan oling
Adapterni nomi bilan emas, MAC manzili bilan moslashtiring, chunki nomlar VPN mijozi va ulanish tartibi bilan o'zgaradi. Adapterlarni bir marta ro'yxatga oling, tunnel adapterining MAC ini yozib oling, so'ng uning manzili va prefiksini so'rang. MAC qayta ulanishlar orasida virtual adapter bilan qoladi, nom va interfeys indeksi esa qolmaydi:
powershell.exe 'Get-NetAdapter | Where-Object { $_.MacAddress -eq "3C-52-82-0A-1B-7C" } | Get-NetIPAddress -AddressFamily IPv4 | Select-Object IPAddress, PrefixLength'Shlyuz interfeys konfiguratsiyasidan keladi. Avval interfeys indeksini oling, so'ng keyingi sakrashni o'qing. Indeks qayta yuklash yoki adapterni qayta o'rnatishdan keyin o'zgarishi mumkin, shuning uchun skript uni saqlash o'rniga o'qishi kerak:
powershell.exe '(Get-NetAdapter | Where-Object { $_.MacAddress -eq "3C-52-82-0A-1B-7C" }).InterfaceIndex'
powershell.exe '(Get-NetIPConfiguration -InterfaceIndex 27).IPv4DefaultGateway.NextHop'Natijani o'zgaruvchiga belgilashdan oldin tr -d '\r' dan o'tkazing. PowerShell satrlarni carriage return bilan tugatadi, agar tozalanmasa oxirgi maydon yashirin belgi olib yuradi va yo'nalish buyrug'i tushunarsiz tahlil xatosi bilan ishlamay qoladi.
Manzil va yo'nalishni distributiv ichida qo'llang
Tunnel manzilini distributiv interfeysiga prefiksli manzil sifatida o'rnating, so'ng korporativ blokni xost shlyuzi orqali yo'naltiring:
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 vpnUlanish aylanaganda NetworkManager qo'lda sozlangan manzilni tashlab yuboradi va hech bir DHCP mijozi o'rinbosar so'ramaydi. Usulni avtomatik qilib qo'ying, shunda har bir qayta ulanish manzilni yangilaydi, so'ng ulanishni yana ko'taring. Qo'lda usul birinchi qayta ulanishgacha barqaror ko'rinadi:
nmcli con show vpn
sudo nmcli con mod vpn ipv4.method auto
sudo nmcli con up vpnIkkala qadamni VPN ni ishga tushiruvchi hook ichidan bajaring, interaktiv shell dan emas. Manzilni o'qib, qo'shib, yo'nalishni qo'shib, qiymatlarni logga yozadigan skript takrorlanuvchi qo'lda tuzatishni takrorlanadigan tuzatishga aylantiradi, prefiks o'zgarganda birinchi o'qiladigan narsa esa logdir.
Nomni mahkamlang va yo'lni isbotlang
Tarmoq almashinuvidan keyin yadro distributiv interfeysining nomini eth1 va eth2 orasida o'zgartirishi mumkin, nomga qarab yozilgan skript esa o'shanda noto'g'ri qurilmani tahrirlaydi. MAC ga bog'langan udev qoidasi interfeysga barqaror yorliq beradi:
SUBSYSTEM=="net", ACTION=="add", ATTRS{address}=="3c:52:82:0a:1b:7c", NAME="vpn"So'ng manzil, yo'nalish va haqiqiy TCP ulanishi bilan tekshiring: ip -4 addr show dev vpn, ip route get 172.20.4.10 va ma'lum ichki portga ulanish. Yo'nalish qidiruvi vpn qurilmasini va siz qo'shgan manba manzilini ko'rsatishi kerak.
Agar uchtasi ham distributiv ichida o'tsa-yu ulanish baribir muvaffaqiyatsiz bo'lsa, paket WSL dan chiqib, Windows tomonida tashlab yuboriladi. Skriptni o'zgartirishdan oldin xostning xavfsizlik devori va VPN mijozining o'z filtrlashini tekshiring, chunki yana bir yo'nalish tahriri xostga allaqachon yetib borayotgan paketni tuzatmaydi.