使用 WSL 存取網路應用程式

使用網路應用程式時,有一些考慮要注意,無論您是從 Windows 應用程式存取 Linux 網路應用程式,還是從 Linux 應用程式存取 Windows 網路應用程式,您可能需要識別您所處理虛擬機器的 IP 位址,這與您本機實體電腦的 IP 位址不同。

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

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

從 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 的位址。 我們正致力於新增這項功能。