Znotraj distribucije ping do notranjega strežnika poteče, medtem ko isti naslov odgovarja iz Windows. VPN je povezan in pot Windows je pravilna, zato je vrzel meja WSL. Prehodite pot od neuspelega ukaza nazaj do vmesnika gostitelja. Popravek ni fiksni CIDR v konfiguracijski datoteki; to je branje trenutnega naslova in njegovo dodajanje tja, kjer ga distribucija lahko uporabi.

Potrdite, kje se pot ustavi

Zaženite isti test na obeh straneh: razrešite in se povežite z enim notranjim gostiteljem iz Windows, nato to ponovite v distribuciji. Uspeh v Windows plus potek v distribuciji locira napako med obema, ne v odjemalcu VPN ali notranjem strežniku. To storite pred spremembo katere koli poti, da bosta oba rezultata opisala isti cilj.

Znotraj distribucije ip -4 addr prikazuje navidezni vmesnik z naslovom iz obsega WSL NAT, ip route pa prikazuje privzeto pot do prehoda WSL. Za poslovno predpono ni poti, ker vmesnik tunela gostitelja nima ustreznega para znotraj distribucije. Privzeti prehod vodi v WSL NAT, ne v poslovno omrežje.

Dodajanje poslovne poti brez predhodnega dodajanja lokalnega naslova na dosegljivi povezavi povzroči potek ali napako nedosegljivega omrežja. Naslov je del, ki naredi pot uporabno, zato ga preberite najprej, pot pa obravnavajte kot drugi korak.

Izberite zrcalno omrežje ali skriptno pot

Zrcalno omrežje da distribuciji gostiteljeve lastne vmesnike, zato se tunel in njegove poti pojavijo brez kopiranja. Funkcija je odvisna od novejše gradnje Windows in od networkingMode=mirrored v .wslconfig, njena omogočitev pa spremeni nepovezano vedenje, na primer posredovanje localhost. Obravnavajte jo kot spremembo platforme, ne kot prilagajanje poti. Če jo gradnja podpira in so stranski učinki sprejemljivi, je to najkrajša pot.

Ožji pristop ohrani privzeti NAT in kopira naslov ter pot tunela v distribucijo vsakič, ko se tunel dvigne. Deluje na več gradnjah, ne spremeni vedenja localhost in vidno odpove, ko je VPN izklopljen. Cena je majhen skript, ki ga je treba zagnati ob vsaki povezavi.

Izberite enega in ga zapišite. Mešanje zrcalne konfiguracije z ročnimi potmi ustvari distribucijo z dvema potema do iste predpone in brez jasnega lastnika nobene. Eno dokumentirano metodo je lažje razhroščevati kot dve napol nastavljeni.

Pridobite trenutne podatke o tunelu z gostitelja

Vmesnik povežite po naslovu MAC, ne po imenu, ker se imena spreminjajo z odjemalcem VPN in vrstnim redom povezave. Enkrat naštete vmesnike, zabeležite MAC vmesnika tunela, nato povprašajte za njegov naslov in predpono. MAC ostane pri navideznem vmesniku med ponovnimi povezavami, ime in indeks vmesnika pa ne:

powershell.exe 'Get-NetAdapter | Where-Object { $_.MacAddress -eq "3C-52-82-0A-1B-7C" } | Get-NetIPAddress -AddressFamily IPv4 | Select-Object IPAddress, PrefixLength'

Prehod izhaja iz konfiguracije vmesnika. Najprej pridobite indeks vmesnika, nato preberite naslednji skok. Indeks se lahko spremeni po ponovnem zagonu ali ponastavitvi vmesnika, zato naj ga skript bere, namesto da bi ga shranjeval:

powershell.exe '(Get-NetAdapter | Where-Object { $_.MacAddress -eq "3C-52-82-0A-1B-7C" }).InterfaceIndex'
powershell.exe '(Get-NetIPConfiguration -InterfaceIndex 27).IPv4DefaultGateway.NextHop'

Izhod speljite skozi tr -d '\r', preden ga dodelite spremenljivki. PowerShell zaključuje vrstice z vračilom vozička, in brez odstranitve zadnje polje nosi skriti znak, zaradi katerega ukaz poti odpove z nerazumljivo napako razčlenjevanja.

Uporabite naslov in pot znotraj distribucije

Namestite naslov tunela kot naslov s predpono na vmesniku distribucije, nato usmerite poslovni blok skozi prehod gostitelja:

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 zavrže ročno nastavljen naslov, ko se povezava obnovi, in noben odjemalec DHCP ne zahteva zamenjave. Nastavite metodo na samodejno, da vsaka ponovna povezava osveži naslov, nato povezavo znova dvignite. Ročna metoda je videti stabilna do prve ponovne povezave:

nmcli con show vpn
sudo nmcli con mod vpn ipv4.method auto
sudo nmcli con up vpn

Oba koraka izvajajte iz kljuke, ki zažene VPN, ne iz interaktivne lupine. Skript, ki prebere naslov, ga doda, doda pot in zabeleži vrednosti, spremeni ponavljajoče se ročno popravilo v ponovljivo, dnevnik pa je prva stvar, ki jo preberete, ko se predpona spremeni.

Pritrdite ime in dokažite pot

Jedro lahko po preklopu omrežja preimenuje vmesnik distribucije med eth1 in eth2, skript, napisan na ime, pa nato ureja napačno napravo. Pravilo udev, vezano na MAC, da vmesniku stabilno oznako:

SUBSYSTEM=="net", ACTION=="add", ATTRS{address}=="3c:52:82:0a:1b:7c", NAME="vpn"

Nato preverite z naslovom, potjo in resnično povezavo TCP: ip -4 addr show dev vpn, ip route get 172.20.4.10 in povezavo z znanimi notranjimi vrati. Iskanje poti bi moralo navesti napravo vpn in izvorni naslov, ki ste ga dodali.

Če vsi trije uspejo znotraj distribucije in povezava še vedno ne deluje, paket zapusti WSL in se zavrže na strani Windows. Pred spremembo skripta preverite požarni zid gostitelja in lastno filtriranje odjemalca VPN, ker še ena sprememba poti ne bo popravila paketa, ki že doseže gostitelja.

Sorodni članki