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 курулушуна жана .wslconfig ичиндеги networkingMode=mirrored параметрине көз каранды, ал эми аны күйгүзүү 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 саптарды carriage return менен бүтүрөт, ал эми тазалабасаңыз акыркы талаа жашыруун белги алып жүрөт, ал маршрут буйругун түшүнүксүз талдоо катасы менен иштен чыгарат.
Даректи жана маршрутту дистрибутивдин ичинде колдонуңуз
Туннелдин дарегин дистрибутивдин интерфейсине префикстүү дарек катары орнотуп, анан корпоративдик блокту хосттун дарбазасы аркылуу багыттаңыз:
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 vpnТуташуу циклге түшкөндө NetworkManager кол менен конфигурацияланган даректи таштап кетет, ал эми эч бир DHCP кардары алмаштырма сурабайт. Ыкманы автоматтык кылып коюңуз, ошондо ар бир кайра туташуу даректи жаңыртат, анан туташууну кайра көтөрүңүз. Кол ыкмасы биринчи кайра туташууга чейин туруктуу көрүнөт:
nmcli con show vpn
sudo nmcli con mod vpn ipv4.method auto
sudo nmcli con up vpnЭки кадамды тең VPN ды иштеткен hook ичинен аткарыңыз, интерактивдүү shell ден эмес. Даректи окуп, аны кошуп, маршрутту кошуп, маанилерди логго жазган скрипт кайталануучу кол оңдоону кайталануучу оңдоого айландырат, ал эми префикс өзгөргөндө биринчи окулуучу нерсе — лог.
Атты бекитип, жолду далилдеңиз
Тармак которулгандан кийин ядро дистрибутивдин интерфейсинин атын eth1 жана eth2 ортосунда өзгөртүшү мүмкүн, ал эми атка жазылган скрипт ошондо туура эмес түзмөктү редакциялайт. MAC ка байланган udev эрежеси интерфейске туруктуу белги берет:
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 тарапта ташталат. Скриптти өзгөртүүдөн мурун хосттун firewall ын жана VPN кардарынын өзүнүн фильтрлөөсүн текшериңиз, анткени дагы бир маршрутту редакциялоо хостко мурун эле жетип жаткан пакетти оңдобойт.