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 клиентийн өөрийн шүүлтийг шалгана уу, учир нь өөр нэг маршрутын засвар хостод аль хэдийн хүрч буй пакетыг засахгүй.