Nid yw WSL2 yn etifeddu'r VPN gorfforaethol, a dyna'r bai
Mae WSL2 yn rhedeg yn ei rwydwaith rhithwir ei hun ac nid yw byth yn etifeddu stac VPN y gwesteiwr. Gwahanwch fethiannau enwau oddi wrth fethiannau llwybr cyn i chi olygu resolv.conf o gwbl.
Mae'r wici fewnol yn llwytho yn Edge, ac mae git clone y tu mewn i'r dosbarthiad yn goramseru. Mae'r un arsylwi hwnnw fel arfer yn cael ei ddarllen fel «mae'r VPN yn blocio WSL2», ac mae'r awr nesaf yn mynd i olygu /etc/resolv.conf. Y darlleniad mwy defnyddiol yw na chafodd WSL2 lwybr rhwydwaith y gwesteiwr erioed: mae'n rhedeg mewn VM cyfleustodau gyda'i adapter ei hun, ei lwybrau ei hun a ffeil resolver y mae Windows yn ei chynhyrchu ar ei gyfer. Mae popeth sy'n dilyn yn dibynnu ar ba un o'r tri hynny sy'n eisiau arnoch mewn gwirionedd.
Mae gan y VM ei stac, ei fetrigau a'i resolver ei hun
Yn y modd NAT diofyn, mae'r dosbarthiad y tu ôl i swits rhithwir ac yn cyrraedd y rhyngrwyd trwy'r gwesteiwr, ond nid yw'n gweld adapterau'r gwesteiwr. Mae ip addr yn dangos un rhyngwyneb ag adres breifat, mae ip route yn dangos llwybr diofyn trwy'r swits hwnnw, ac mae /etc/resolv.conf yn ffeil a gynhyrchwyd sy'n cyfeirio at stub resolver a ddewiswyd gan Windows. Nid oes unrhyw un o'r rhain yn newid oherwydd bod cleient VPN wedi cychwyn ar ochr Windows.
Dyma pam mae «mae'r porwr yn gweithio» yn profi cyn lleied. Mae'r porwr yn defnyddio stac y gwesteiwr, y twnnel a pholisi resolver y gwesteiwr. Mae eich cragen yn defnyddio stac gwahanol sy'n digwydd rhannu NIC ffisegol. Maent yn cytuno yn yr achos hapus ac yn gwahanu'n union pan fydd y VPN yn gosod hidlydd, yn ailysgrifennu'r rhestr DNS neu'n ychwanegu llwybr ar gyfer is-rwydwaith y swits rhithwir.
Mae dau brawf yn penderfynu ym mha fyd yr ydych, ac mae'n rhaid eu rhedeg y tu mewn i'r dosbarthiad:
getent hosts example.com
curl -sS -m 8 -o /dev/null -w "%{http_code}\n" 1.1.1.1
ip route
cat /etc/resolv.conf
Mae enwau'n methu wrth i adres lythrennol ateb yn broblem resolver. Mae enwau ac adresau'n methu gyda'i gilydd yn broblem llwybr, ac ni fydd unrhyw olygu resolver yn cyffwrdd â hi. Daw tystiolaeth ochr Windows nesaf: mae Get-NetAdapter | Get-DnsClientServerAddress a route print -4 yn dangos a yw'r twnnel wedi hawlio'r is-rwydwaith lle mae eich VM yn byw.
Chwedl un: mae gweinyddwyr DNS corfforaethol yn datrys y peth
Golygu'r ffeil resolver yw'r cyngor clasurol, ac mae'n gywir tua hanner y tro. Pan fo'n gywir, mae'n gywir am reswm penodol: mae'r ffeil a gynhyrchwyd yn cyfeirio at resolver nad yw'n gwybod ond enwau cyhoeddus, felly mae ymholiad am intranet.example.internal yn dod yn ôl fel un nad yw'n bodoli er bod y llwybr yn iawn.
Mae pinio gweinyddwyr y VPN yn golygu atal Windows rhag ailgynhyrchu'r ffeil, oherwydd bod unrhyw ffeil a ysgrifennwch â llaw yn cael ei disodli ar y cychwyn nesaf:
[network]
generateResolvConf = false
Cadwch hynny fel /etc/wsl.conf, rhedwch wsl --shutdown o Windows, yna cychwynnwch y dosbarthiad ac ysgrifennwch /etc/resolv.conf gyda gweinyddwyr y twnnel yn gyntaf a resolver cyhoeddus yn unig fel copi wrth gefn. Mae hwn yn newid parhaol â chost cynnal a chadw: nid yw'r ffeil yn dilyn y gwesteiwr mwyach, felly pan fydd y cyfeiriadau DNS corfforaethol yn newid mae'r dosbarthiad yn parhau i ofyn am yr hen rai. Rhaid i rywun fod yn berchen ar y ffeil honno.
Nid yw'n gwneud unrhyw beth chwaith pan fo'r methiant yn ehangach. Os yw curl i 1.1.1.1 yn goramseru, mae cleient y twnnel yn hidlo'r swits rhithwir neu'n llwybro is-rwydwaith y VM i mewn i'r twnnel, ac mae resolver cywir yn rhoi enwau i chi na ellir eu cyrraedd o hyd.
Chwedl dau: mae'r newid metrig yn para
Pan fydd enwau'n datrys ond traffig yn gadael trwy'r adapter ffisegol, metrigau rhyngwyneb yw'r lifer. Rhowch gost uchel i adapter y VPN a chost isel i swits WSL:
Get-NetAdapter | Where-Object InterfaceDescription -Match "AnyConnect" | Set-NetIPInterface -InterfaceMetric 4000
Get-NetIPInterface -InterfaceAlias "vEthernet (WSL)" | Set-NetIPInterface -InterfaceMetric 1
Yna cofiwch fod adapter y twnnel mewn llawer o adeiladau cleient yn cael ei ailgreu ar bob cysylltiad ac mae'r metrig yn dychwelyd i'w ddiofyn. Mae gorchymyn untro yn atgyweiriad sy'n dod i ben yn dawel, fel arfer dros benwythnos, ac mae'r tocyn yn dod yn ôl gyda «roedd yn gweithio wythnos diwethaf». Tasg a drefnwyd sy'n cael ei sbarduno gan ddigwyddiad y VPN, neu sgript y mae'r defnyddiwr yn ei rhedeg ar ôl cysylltu, yw fersiwn onest yr atgyweiriad hwn.
Mae'r un dod i ben yn berthnasol i lwybrau'r gwesteiwr a ychwanegwyd ar gyfer un rhagddodiad styfnig. Maent yn werth eu cael fel diagnosteg, oherwydd maent yn dweud wrthych a yw'r broblem yn un gyrchfan neu'r llwybr cyfan, ond nid ydynt yn bensaernïaeth.
Chwedl tri: mae un atgyweiriad yn gorchuddio pob adeiladwaith Windows
| Approach | What it actually does |
|---|---|
| Resolver pin | Fixes private names only; no effect on path failures |
| Sidecar distribution | Forwards traffic over a socket to a helper VM, so the switch's filter no longer matters |
| Mirrored networking | Gives the distribution the host's interface set; also enables DNS tunnelling |
wsl-vpnkit yw'r patrwm sidecar: mae dosbarthiad bach yn berchen ar y llwybr ochr y gwesteiwr ac yn anfon traffig ymlaen ar gyfer dosbarthiadau eraill trwy soced rhithwir, felly mae traffig cymwysiadau'n peidio â dibynnu ar y swits a hidlwyd. Mae angen i'r llwybr stoc weithio, sy'n golygu tynnu gorbwysiadau networkingMode a dnsTunneling o %UserProfile%\.wslconfig, adfer generateResolvConf = true ym mhob dosbarthiad gweithredol, a chychwyn y gwasanaeth wrth fewngofnodi.
Y modd drych yw'r dewis arall adeiledig ar Windows 11 22H2 ac yn ddiweddarach, a dim ond un gosodiad ynghyd â chau lawr:
[wsl2]
networkingMode=mirrored
Y tu mewn i'r dosbarthiad mae ip addr wedyn yn rhestru adapterau'r gwesteiwr, gall y twnnel ymddangos yn eu plith, ac mae twnelu DNS yn anfon ymholiadau ymlaen trwy resolver Windows hyd yn oed pan fydd y cleient yn ailysgrifennu'r rhestr DNS. Nid yw'n gyffredinol: mae rhai gyrwyr hidlo yn dal i ollwng y llwybr drych, a gall rheolau wal dân Hyper-V fod angen caniatâd penodol. Canllaw rhwydweithio WSL Microsoft yw'r dudalen i'w gwirio yn erbyn eich adeiladwaith cyn defnyddio rysáit a ysgrifennwyd ar gyfer un mwy newydd.
Profwch dri pheth ar ôl pob newid
Dewiswch un mecanwaith fesul peiriant ac ysgrifennwch ef, oherwydd mae'r ddau yn cyfuno'n wael. Mae sidecar ar ben y modd drych yn dyblu'r anfon ymlaen, ac mae gwesteiwr drych â chofnod sidecar hen yn .wslconfig yn tueddu i fethu ar ôl uwchraddiad yn hytrach nag o'i flaen.
Beth bynnag a ddewiswch, yr un tri chais y tu mewn i'r dosbarthiad yw'r prawf derbyn: enw mewnol, enw cyhoeddus ac adres amrwd. Yna ailadroddwch hwy ar ôl datgysylltu ac ailgysylltu'r twnnel, ac ar ôl wsl --shutdown. Mae enw mewnol yn methu ar ei ben ei hun yn golygu polisi resolver; mae enw mewnol a chyhoeddus yn methu gyda'i gilydd gydag adres sy'n gweithio yn dal i olygu polisi resolver; mae popeth yn methu yn golygu'r llwybr.
Os yw un gwesteiwr mewnol yn methu tra bod y gweddill yn gweithio, stopiwch edrych ar y resolver a chwiliwch am lwybr coll ar gyfer y rhagddodiad hwnnw. Os yw popeth yn gweithio tan yr ailgysylltiad nesaf, rydych wedi dod o hyd i atgyweiriad sy'n dibynnu ar gyflwr amser rhedeg, ac mae angen ei ailgymhwyso'n awtomatig neu ei ddisodli gan un o'r ddau fecanwaith uchod.