使用 WSL 存取網路應用程式

使用網路應用程式時,無論您是從 Windows 應用程式存取 linux 網路應用程式,還是從 Linux 應用程式存取 Windows 網路應用程式,都需要注意幾個考慮,您可能需要識別您正在使用之虛擬機器的 ip 位址,而這會與本機實體電腦的 ip 位址不同。

從 Windows (localhost) 存取 Linux 網路應用程式

如果您要在 Linux 發行版本中建立網路應用程式 (例如,在 NodeJS 或 SQL 伺服器上執行的應用程式),您可以使用 localhost 從 Windows 應用程式 (例如您的 Edge 或 Chrome 網際網路瀏覽器) 進行存取 (如同您平時執行的動作)。

不過,如果您執行的是舊版 Windows (組建 18945 或更低版本),您將需要取得 Linux 主機 VM 的 IP 位址 (或是更新為最新的 Windows 版本)。

若要尋找支援您 Linux 發行版本的虛擬機器 IP 位址:

  • 從您的 WSL 發行版本 (也就是 Ubuntu) 執行命令:ip addr
  • 尋找並複製 eth0 介面上 inet 值底下的位址。
  • 如果您已安裝 grep 工具,可使用 ip addr | grep eth0 命令來篩選輸出,以便您找出該項目
  • 使用此 IP 位址連線到您的 Linux 伺服器。

下圖顯示這種情況的範例,使用 Edge 瀏覽器連線到 Node.js 伺服器。

使用 Edge 連線至 NodeJS 伺服器

從 Linux (主機 IP) 存取 Windows 網路應用程式

如果您想要從 Linux 發行版本 (也就是 Ubuntu) 存取在 Windows 上執行的網路應用程式 (例如,在 NodeJS 或 SQL 伺服器上執行的應用程式),則需要使用主機電腦的 IP 位址。 雖然這不是常見的案例,但您可以遵循下列步驟來讓其執行。

  1. 從 Linux 發行版本執行下列命令,以取得主機電腦的 IP 位址:cat /etc/resolv.conf
  2. 複製下列詞彙後面的 IP 位址:nameserver
  3. 使用複製的 IP 位址連線到任何 Windows 伺服器。

下圖顯示這種情況的範例,透過 curl 連線到在 Windows 中執行的 Node.js 伺服器。

透過 Curl 連線至 Windows 中的 NodeJS 伺服器

透過遠端 IP 位址連線

使用遠端 IP 位址連線到您的應用程式時,系統會將其視為來自區域網路 (LAN) 的連線。 這表示您必須確定您的應用程式可以接受 LAN 連線。

例如,您可能需要將應用程式繫結至 0.0.0.0,而不是 127.0.0.1。 在使用 Flask 的 Python 應用程式範例中,您可以使用下列命令來完成這項作業:app.run(host='0.0.0.0')。 在進行這些變更時,請記住安全性,因為這會允許來自您 LAN 的連線。

從區域網路 (LAN) 存取 WSL 2 發行版本

使用 WSL 1 發行版本時,如果您的電腦設定為在您的 LAN 中存取,則在 WSL 中執行的應用程式也可以在您的 LAN 上存取。

這不是 WSL 2 中的預設案例。 WSL 2 具有虛擬化的乙太網路介面卡,而且具有自己的唯一 IP 位址。 目前若要啟用這個工作流程,您需要進行與一般虛擬機器相同的步驟。 (我們正在尋找改善這種體驗的方式。)

以下的 PowerShell 命令範例可新增連接埠 Proxy,以接聽主機上的連接埠 4000,並將其連線至 IP 位址為 192.168.101.100 的 WSL 2 VM 的連接埠 4000。

netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100

IPv6 存取

WSL 2 發行版本目前無法連線至僅限 IPv6 的位址。 我們正致力於新增這項功能。