配置WSL2實現與宿主機的網路互通

王竹笙發表於2024-10-30

WSL1 是基於代理的虛擬化技術,它透過將 Linux 系統呼叫轉換為 Windows 系統呼叫來實現與 Windows 核心的互動。WSL2 則使用了真正的虛擬機器技術,它在 Windows主機 上執行一個輕量級的 Linux 核心。

WSL2 無法訪問 Windows 的 localhost 網路是由 WSL2 的網路架構所致。WSL2 使用了一個虛擬網路介面卡來與 Windows 主機進行通訊,這導致 WSL2 無法直接訪問 Windows 的 localhost 網路。因此,以往的 WSL2 在訪問 Windows 網路時需要將其當作 LAN 的另一個裝置,而 Windows 宿主則可以把 WSL 當作本機裝置。這導致了很多問題,尤其是梯子方面的。

WSL2 2.0 引入的映象網路可以解決 localhost 訪問問題。啟用映象網路後,WSL2 和 Windows 主機將使用相同的網路,並且可以透過 localhost 訪問本機系統上的服務。這意味著你可以在 WSL2 中訪問本機系統上執行的應用程式,以及透過本機系統訪問在 WSL2 中執行的應用程式。

在家目錄 建立檔案C:\Users\hzhiy

.wslconfig

[wsl2]
memory=4GB                        # 分配給 WSL 2 的記憶體大小
processors=2                      # 分配給 WSL 2 的 CPU 核心數
localhostForwarding=true          # 是否啟用 localhost 轉發
 
[experimental]
autoMemoryReclaim=gradual         # 開啟自動回收記憶體,可在 gradual, dropcache, disabled 之間選擇
networkingMode=mirrored           # 開啟映象網路
dnsTunneling=true                 # 開啟 DNS Tunneling
firewall=true                     # 開啟 Windows 防火牆
autoProxy=true                    # 開啟自動同步代理
sparseVhd=true                    # 開啟自動釋放 WSL2 虛擬硬碟空間

重啟WSL


管理員身份執行PowerShell:

  • 停止WSL: wsl --shutdown
  • 啟動WSL: wsl

    之後就可以在 wsl 中使用 localhost 的方式來訪問宿主機上的服務了。
    curl http://localhost

相關文章