Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Istnieje kilka zagadnień, które należy wziąć pod uwagę podczas pracy z aplikacjami sieciowymi i usługą WSL. Domyślnie WSL używa architektury opartej na translatorze adresów sieciowych i zalecamy wypróbowanie nowego trybu sieci lustrzanej , aby skorzystać z najnowszych funkcji i ulepszeń.
Identyfikowanie adresu IP
Istnieją dwa scenariusze, które należy wziąć pod uwagę podczas identyfikowania adresu IP używanego do dystrybucji systemu Linux uruchomionej za pośrednictwem programu WSL:
Scenariusz 1: Z perspektywy hosta systemu Windows chcesz wykonać zapytanie dotyczące adresu IP dystrybucji systemu Linux uruchomionego za pośrednictwem protokołu WSL2, aby program na hoście systemu Windows mógł nawiązać połączenie z programem serwera działającym wewnątrz dystrybucji (wystąpienie).
Host systemu Windows może użyć polecenia:
wsl -d <DistributionName> hostname -I
W przypadku wykonywania zapytań względem dystrybucji domyślnej można pominąć tę część polecenia, która wyznacza rozkład: -d <DistributionName>
. Pamiętaj, aby użyć wielkiej litery jako znacznik -I
, a nie małej litery -i
.
W tle polecenie wsl.exe
hosta uruchamia wystąpienie docelowe i wykonuje polecenie hostname -I
systemu Linux (krótka notacja dla --all-ip-addresses
). Następnie to polecenie wyświetla adres IP wystąpienia WSL na STDOUT
. Zawartość tekstowa STDOUT
jest następnie przekazywana z powrotem do wsl.exe. Na koniec wsl.exe wyświetla te dane wyjściowe w wierszu polecenia.
Typowe dane wyjściowe mogą być następujące:
172.30.98.229
Scenariusz dwa: Program działający w dystrybucji systemu Linux za pośrednictwem WSL2 (wystąpienia) chce znać adres IP hosta systemu Windows, aby program systemu Linux mógł połączyć się z programem serwera hosta systemu Windows.
Użytkownik systemu Linux WSL2 może użyć polecenia:
ip route show | grep -i default | awk '{ print $3}'
Typowe dane wyjściowe mogą być następujące:
172.30.96.1
Dlatego 172.30.96.1
jest adresem IP hosta dla systemu Windows, w tym przykładzie.
Notatka
Ta powyższa akcja zapytania o adres IP jest zwykle wymagana, gdy program WSL2 jest uruchomiony z domyślnym trybem sieci NAT .
Gdy WSL2 jest uruchomiony z nowym trybem dublowania , host systemu Windows i maszyna wirtualna WSL2 mogą łączyć się ze sobą przy użyciu localhost
(127.0.0.1) jako adresu docelowego, więc sztuczka użycia adresu IP elementu równorzędnego zapytania nie jest wymagana.
Domyślny tryb sieci: NAT
Domyślnie WSL używa architektury opartej na translatorze adresów sieciowych (NAT) do sieci. Podczas pracy z architekturą sieci opartą na translatorze adresów sieciowych należy wziąć pod uwagę następujące kwestie:
Uzyskiwanie dostępu do aplikacji sieciowych systemu Linux z systemu Windows (localhost)
Jeśli tworzysz aplikację sieciową (na przykład aplikację działającą na serwerze NodeJS lub SQL) w dystrybucji systemu Linux, możesz uzyskać do niej dostęp z poziomu aplikacji systemu Windows (takiej jak przeglądarka Microsoft Edge lub Chrome Internet) przy użyciu localhost
(tak jak zwykle).
Uzyskiwanie dostępu do aplikacji sieciowych systemu Windows z systemu Linux (adres IP hosta)
Jeśli chcesz uzyskać dostęp do aplikacji sieciowej działającej w systemie Windows (na przykład aplikacji działającej w środowisku NodeJS lub serwerze SQL) z dystrybucji systemu Linux (tj. Ubuntu), musisz użyć adresu IP maszyny hosta. Chociaż nie jest to typowy scenariusz, możesz wykonać te kroki, aby to zadziałało.
- Uzyskaj adres IP maszyny hosta, uruchamiając to polecenie w swojej dystrybucji Linuksa.
ip route show | grep -i default | awk '{ print $3}'
- Nawiąż połączenie z dowolnym serwerem z systemem Windows przy użyciu skopiowanego adresu IP.
Na poniższym obrazku przedstawiono przykład, jak łączyć się z serwerem Node.js uruchomionym w systemie Windows za pomocą narzędzia curl.
Nawiązywanie połączenia za pośrednictwem zdalnych adresów IP
W przypadku używania zdalnych adresów IP do łączenia się z aplikacjami będą traktowane jako połączenia z sieci lokalnej (LAN). Oznacza to, że należy upewnić się, że aplikacja może akceptować połączenia LAN.
Na przykład może być konieczne powiązanie aplikacji z 0.0.0.0
zamiast 127.0.0.1
. W przykładzie aplikacji języka Python korzystającej z platformy Flask można to zrobić za pomocą polecenia : app.run(host='0.0.0.0')
. Należy pamiętać o zabezpieczeniach podczas wprowadzania tych zmian, ponieważ umożliwi to nawiązywanie połączeń z sieci LAN.
Uzyskiwanie dostępu do dystrybucji WSL 2 z sieci lokalnej (LAN)
W przypadku korzystania z dystrybucji WSL 1, jeśli komputer został skonfigurowany do uzyskiwania dostępu przez sieć LAN, aplikacje uruchamiane w programie WSL mogą być również dostępne w sieci LAN.
Nie jest to domyślny przypadek w programie WSL 2. WSL 2 ma zwirtualizowaną kartę Ethernet z własnym unikatowym adresem IP. Obecnie, aby włączyć ten przepływ pracy, należy wykonać te same kroki, co w przypadku zwykłej maszyny wirtualnej. (Analizujemy sposoby poprawy tego doświadczenia.)
Oto przykład użycia polecenia netsh interface portproxy w systemie Windows, aby dodać proxy portu, które nasłuchuje na porcie hosta i łączy to proxy portu z adresem IP maszyny wirtualnej WSL 2.
netsh interface portproxy add v4tov4 listenport=<yourPortToForward> listenaddress=0.0.0.0 connectport=<yourPortToConnectToInWSL> connectaddress=(wsl hostname -I)
W tym przykładzie należy zaktualizować <yourPortToForward>
do numeru portu, na przykład listenport=4000
.
listenaddress=0.0.0.0
oznacza, że żądania przychodzące będą akceptowane z dowolnego adresu IP. Adres nasłuchiwania określa adres IPv4, dla którego należy nasłuchiwać i można go zmienić na wartości, które obejmują: adres IP, nazwę NetBIOS komputera lub nazwę DNS komputera. Jeśli adres nie jest określony, wartość domyślna to komputer lokalny. Należy zaktualizować wartość <yourPortToConnectToInWSL>
do numeru portu, którego ma użyć WSL do połączenia, na przykład connectport=4000
. Na koniec wartość connectaddress
musi być adresem IP dystrybucji systemu Linux zainstalowanej za pośrednictwem WSL 2 (adres maszyny wirtualnej WSL 2), który można znaleźć, wprowadzając polecenie: wsl.exe hostname -I
.
Dlatego to polecenie może wyglądać mniej więcej tak:
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100
Aby uzyskać adres IP, użyj:
-
wsl hostname -I
adresu IP dystrybucji systemu Linux zainstalowanej za pośrednictwem protokołu WSL 2 (adres maszyny wirtualnej WSL 2) -
cat /etc/resolv.conf
dla adresu IP maszyny z systemem Windows, jak widać na maszynie wirtualnej WSL 2 (maszyna wirtualna WSL 2)
Używając listenaddress=0.0.0.0
, będzie nasłuchiwać na wszystkich portach IPv4 .
Notatka
Użycie małych liter "i" z poleceniem nazwy hosta spowoduje wygenerowanie innego wyniku niż użycie wielkiej litery "I".
wsl hostname -i
jest twoją maszyną lokalną (127.0.1.1 jest adresem diagnostycznym będącym symbolem zastępczym), natomiast wsl hostname -I
zwróci adres IP twojej maszyny lokalnej, jak jest widoczny na innych maszynach, i powinien być używany do identyfikowania connectaddress
dystrybucji systemu Linux uruchomionego za pośrednictwem oprogramowania WSL 2.
Dostęp do protokołu IPv6
-
wsl hostname -i
adresu IP dystrybucji systemu Linux zainstalowanej za pośrednictwem protokołu WSL 2 (adres maszyny wirtualnej WSL 2) -
ip route show | grep -i default | awk '{ print $3}'
dla adresu IP maszyny z systemem Windows, jak widać na maszynie wirtualnej WSL 2 (maszyna wirtualna WSL 2)
Używając listenaddress=0.0.0.0
, będzie nasłuchiwać na wszystkich portach IPv4 .
Sieć w trybie lustrzanym
Na maszynach z systemem Windows 11 22H2 i nowszych można ustawić networkingMode=mirrored
w obszarze [wsl2]
w pliku .wslconfig
włączyć sieć w trybie dublowania. Włączenie tej opcji zmienia WSL na zupełnie nową architekturę sieciową, która ma na celu odwzorowywanie interfejsów sieciowych z systemu Windows do systemu Linux, w celu dodania nowych funkcji sieciowych i poprawy zgodności.
Poniżej przedstawiono bieżące korzyści związane z włączaniem tego trybu:
- Obsługa protokołu IPv6
- Nawiąż połączenie z serwerami z systemem Windows z systemu Linux przy użyciu adresu localhost
127.0.0.1
. Adres hosta lokalnego IPv6::1
nie jest obsługiwany - Ulepszona zgodność sieci dla sieci VPN
- Obsługa multiemisji
- Nawiązywanie połączenia z protokołem WSL bezpośrednio z sieci lokalnej (LAN)
Notatka
Uruchom następujące polecenie w oknie programu PowerShell z uprawnieniami administratora, aby skonfigurować ustawienia zapory Hyper-V zezwalać na połączenia przychodzące: Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow
lub New-NetFirewallHyperVRule -Name "MyWebServer" -DisplayName "My Web Server" -Direction Inbound -VMCreatorId '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -Protocol TCP -LocalPorts 80
.
Ten nowy tryb rozwiązuje problemy z połączeniem sieciowym występujące podczas korzystania z architektury opartej na NAT (translatorze adresów sieciowych). Znajdź znane problemy lub prześlij opinię na temat wszelkich usterek zidentyfikowanych w repozytorium produktu WSL w witrynie GitHub.
Tunelowanie DNS
Na maszynach z systemem Windows 11 22H2 lub nowszym ustawienie dnsTunneling=true
w obszarze [wsl2]
zawartej w pliku .wslconfig
powoduje, że WSL używa funkcji wirtualizacji do odpowiadania na żądania DNS wewnątrz WSL, zamiast żądać ich przez pakiety sieciowe. Ta funkcja ma na celu poprawę zgodności z sieciami VPN i innymi złożonymi konfiguracjami sieci.
Automatyczny serwer proxy
Na maszynach z systemem Windows 11 22H2 lub nowszym ustawienie autoProxy=true
w obszarze [wsl2]
w pliku .wslconfig
wymusza na WSL używanie informacji serwera proxy HTTP systemu Windows. Jeśli masz już skonfigurowany serwer proxy w systemie Windows, włączenie tej funkcji spowoduje również automatyczne ustawienie tego serwera proxy w programie WSL.
WSL i zapora
Na maszynach z systemem Windows 11 22H2 lub nowszym i WSL 2.0.9 lub nowszym funkcja zapory Hyper-V zostanie domyślnie włączona. Zapewni to:
- Zobacz Zaporę Windows Defender z zaawansowanymi zabezpieczeniami, aby dowiedzieć się więcej o funkcjach zabezpieczeń systemu Windows, które zostaną automatycznie zastosowane do WSL.
- Zobacz Konfigurowanie zapory Hyper-V, aby dowiedzieć się więcej na temat stosowania tych reguł i ustawień zarówno lokalnie, jak i za pośrednictwem narzędzi online, takich jak usługa Intune.
Windows Subsystem for Linux