這些設定會覆寫任何 Allow-Inbound 防火牆規則。 因此,此設定會封鎖 HNS 建立的 UDP 防火牆規則,因此會防止 WSL 解析名稱。
若要讓此設定能夠運作,WSL 必須設定為使用 DNS 通道。 此設定一律會封鎖 NAT DNS Proxy。
計算機設定 \ 系統管理範本 \ 網络 \ 網络連線 \ Windows Defender 防火牆 \ 網域配置檔 |標準配置檔
「Windows Defender 防火牆:不允許例外狀況」- 已啟用
從 MDM 原則 :
./Vendor/MSFT/Firewall/MdmStore/PrivateProfile/Shielded
./Vendor/MSFT/Firewall/MdmStore/DomainProfile/Shielded
./Vendor/MSFT/Firewall/MdmStore/PublicProfile/Shielded
您可以執行下列命令來查看這是否設定為不允許任何輸入防火牆規則(請參閱上述防火牆配置檔注意事項)。 這隻是 Powershell 中傳回之第一個防火牆配置檔的代碼段:
PS C:\> Get-NetFirewallProfile -PolicyStore ActiveStore
Name : Domain
Enabled : True
DefaultInboundAction : Block
DefaultOutboundAction : Allow
AllowInboundRules : False
AllowInboundRules: False means that no inbound Firewall rules will be applied.
3.用戶流覽 Windows 安全性設定應用程式,並檢查控制件是否有「封鎖所有連入連線,包括允許應用程式清單中的連線」
Windows 支援使用者選擇啟用與上述第2點所參考的企業版相同的設定。 用戶可以開啟 [Windows 安全性] 設定頁面、選取 [防火牆 & 網络保護] 選項、選取他們想要設定的防火牆配置檔(網域、私人或公用),然後在 [連入連線] 底下檢查標示為[封鎖所有連入連線,包括允許應用程式清單中的連線]。
如果這是針對公用配置檔設定的 (這是 WSL vNIC 的預設配置檔),則 HNS 所建立的防火牆規則將會封鎖 UDP 封包進行共用存取。
您必須取消勾選NAT DNS代理設定,這樣才能從WSL使用。或 WSL 可以設定為使用 DNS 隧道。
4. 為允許 DNS 封包共享的 HNS 防火牆規則可能會變成無效,因為參考了先前的 WSL 介面識別碼。
這是 HNS 中已使用最新 Windows 11 版本修正的缺陷。 在舊版中,如果發生這種情況,則不容易發現,但它有簡單的應對方法:
停止 WSL
wsl.exe –shutdown
刪除舊的 HNS 防火牆規則。 在大部分情況下,此 Powershell 命令應該可以運作:
Get-NetFirewallRule -Name "HNS*" | Get-NetFirewallPortFilter | where Protocol -eq UDP | where LocalPort -eq 53 | Remove-NetFirewallRule
拿掉所有 HNS 端點。 注意:如果使用 HNS 來管理其他容器,例如 MDAG 或 Windows 沙箱,也應該停止這些容器。
hnsdiag.exe delete all
重新啟動 HNS 服務
Restart-Service hns
重新啟動 WSL 時,HNS 會建立新的防火牆規則,正確地以 WSL 介面為目標。
針對 Windows 上的網路存取問題進行疑難解答
如果您沒有網路存取權,可能是因為設定錯誤。 請查看 FSE 驅動程式是否正在執行:『sc queryex FSE』。 如果這未顯示 FSE 執行中,請檢查 PortTrackerEnabledMode 登錄值是否存在於此登錄機碼下:reg query HKLM\System\CurrentControlSet\Services\Tcpip\Parameters。 如果 FSE 未執行或安裝,且 PortTrackerEnabledMode 存在,請刪除該登錄值並重新啟動
手動刪除虛設配接器的方式
Ghost 配接器或虛構的即插即用(PnP)裝置,是指那些出現在您系統清單中但實際上未連接的硬體元件。 這些「幽靈」裝置可能會導致系統設定中的混淆和雜亂。 如果您在虛擬機 (VM) 中執行 WSL 時,看到鬼魂適配器,請遵循這些手動步驟來尋找和刪除這些幽靈 PnP 裝置。 Microsoft正在處理不需要手動介入的自動化解決方案。 更多信息即將推出。
開啟設備管理員
檢視 > 顯示隱藏的裝置
請遵循指示,在 GitHub 上的 WSL 存放庫中 收集 WSL 記錄,以收集 GitHub 上的詳細記錄和提出問題。
更新 WSL
適用於Linux的 Windows 子系統有兩個元件需要更新。
若要更新適用於Linux的 Windows 子系統本身,請使用PowerShell或 CMD 中的命令 wsl --update
。
若要更新特定的 Linux 發行版使用者二進位檔,請使用命令:在您要更新的 Linux 發行版中 apt-get update | apt-get upgrade
。
Apt-get 升級錯誤
有些套件使用我們尚未實作的功能。 例如,udev
尚不支援,並導致數個 apt-get upgrade
錯誤。
若要修正與 udev
相關的問題,請遵循下列步驟:
將下列內容寫入 /usr/sbin/policy-rc.d
並儲存你的變更。
#!/bin/sh
exit 101
將執行權限新增至 /usr/sbin/policy-rc.d
:
chmod +x /usr/sbin/policy-rc.d
執行下列命令:
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
安裝時發生「錯誤:0x80040306」
這與我們不支援舊版控制台的事實相同。
若要關閉舊版主控台:
開啟 cmd.exe
在標題列上按右鍵 -> 屬性 -> 取消選取 [使用舊版控制台]
按兩下 [確定]
Windows 更新之後的「錯誤:0x80040154」
Windows Update 期間可能會停用適用於 Linux 的 Windows 子系統功能。 如果發生這種情況,則必須重新啟用 Windows 功能。 如需啟用適用於 Linux 的 Windows 子系統的指示,請參閱 手動安裝指南。
變更顯示語言
WSL 安裝會嘗試自動變更 Ubuntu 地區設定,以符合 Windows 安裝的地區設定。 如果您不想要此行為,您可以在安裝完成之後執行此命令來變更 Ubuntu 地區設定。 您必須重新啟動 bash.exe,此變更才會生效。
下列範例會將地區設定變更為 en-US
:
sudo update-locale LANG=en_US.UTF8
Windows 系統還原之後的安裝問題
刪除 %windir%\System32\Tasks\Microsoft\Windows\Windows Subsystem for Linux
資料夾。
注意:如果您的選用功能已完全安裝並運作,請勿這麼做。
開啟 WSL 選用功能(如果尚未開啟)
lxrun /uninstall /full
安裝 bash
WSL 中沒有因特網存取
有些用戶回報了特定防火牆應用程式在 WSL 中封鎖因特網存取的問題。 報告的防火牆如下:
Avast
Symantec Endpoint Protection
在某些情況下,關閉防火牆允許存取。 在某些情況下,只要安裝防火牆,就會封鎖存取。
如果您使用 Microsoft Defender 防火牆,取消勾選 [封鎖所有連入連線,包括允許的應用程式清單中的連線] 選項將允許存取。
使用 ping 時的許可權拒絕錯誤
針對 windows 年度更新版本 1607 Windows 年度更新版,Windows 中的系統管理員許可權,才能在 WSL 中執行 ping。 若要執行 Ping,請以系統管理員身分在 Windows 上的 Ubuntu 上執行 Bash,或使用系統管理員許可權從 CMD/PowerShell 提示字元執行 bash.exe。
針對較新版本的 Windows,組建 14926+,不再需要系統管理員權限。
Bash 已無回應
如果在使用 bash 時,您發現 bash 卡住(或死機)且未回應輸入,請收集並報告記憶體傾印檔案,以協助我們診斷問題。 請注意,這些步驟會當機您的系統。 如果您對此不滿意,請勿這麼做,或者在執行此動作之前先儲存工作。
收集記憶體轉儲
將記憶體轉儲類型變更為「完整記憶體轉儲」。 變更傾印類型時,請務必記下您當前的類型。
使用 步驟,透過鍵盤控件設定當機配置。
重現程式無回應或死結。
使用(2)的鍵盤序列使系統崩潰。
系統會當機並收集記憶體轉儲。
系統重新啟動後,請將memory.dmp報告為 [email protected]。 傾印檔案的預設位置是 %SystemRoot%\memory.dmp,如果 C: 是系統磁碟驅動器,則為 C:\Windows\memory.dmp。 在電子郵件中,請注意轉儲是針對 Windows 上的 WSL 或 Bash 團隊。
將記憶體轉儲類型還原至原始設定。
檢查組建編號
若要尋找計算機的架構和 Windows 組建編號,請開啟
設定>系統>關於
尋找 [OS 組建] 和 [系統類型] 字段。
若要尋找您的 Windows Server 組建編號,請在 PowerShell 中執行下列命令:
systeminfo | Select-String "^OS Name","^OS Version"
確認已啟用 WSL
您可以在提升權限的 PowerShell 視窗中執行下列命令,以確認已啟用適用於 Linux 的 Windows 子系統:
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
OpenSSH-Server 連線問題
嘗試連線 SSH 伺服器失敗,發生下列錯誤:「連線被 127.0.0.1 埠 22 關閉」。
請確定您的 OpenSSH 伺服器正在執行:
sudo service ssh status
您已遵循本教學課程:https://ubuntu.com/server/docs/service-openssh
停止 sshd 服務,並在偵錯模式中啟動 sshd:
sudo service ssh stop
sudo /usr/sbin/sshd -d
檢查啟動記錄,並確定 HostKey 可供使用,而且您看不到記錄訊息,例如:
debug1: sshd version OpenSSH_7.2, OpenSSL 1.0.2g 1 Mar 2016
debug1: key_load_private: incorrect passphrase supplied to decrypt private key
debug1: key_load_public: No such file or directory
Could not load host key: /etc/ssh/ssh_host_rsa_key
debug1: key_load_private: No such file or directory
debug1: key_load_public: No such file or directory
Could not load host key: /etc/ssh/ssh_host_dsa_key
debug1: key_load_private: No such file or directory
debug1: key_load_public: No such file or directory
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
debug1: key_load_private: No such file or directory
debug1: key_load_public: No such file or directory
Could not load host key: /etc/ssh/ssh_host_ed25519_key
如果您看到這類訊息,且在 /etc/ssh/
下的密鑰遺失,您必須重新產生密鑰,或先清除&然後安裝 openssh-server:
sudo apt-get purge openssh-server
sudo apt-get install openssh-server
啟用 WSL 選用功能時,無法找到參考組件。
此錯誤與處於不良安裝狀態有關。 請完成下列步驟以嘗試並修正此問題:
如果您是從 PowerShell 執行啟用 WSL 功能命令,請改為開啟 [開始] 功能表,搜尋 [開啟或關閉 Windows 功能],然後在清單中選取 [適用於 Linux 的 Windows 子系統],以安裝選用元件。
移至 [設定]、[更新],然後按兩下 [檢查更新] 來更新您的 Windows 版本
如果這兩者都失敗,而且您需要存取 WSL,請考慮使用安裝媒體原地升級,重新安裝 Windows,然後選取 [保留所有專案],以確保您的應用程式和檔案會保留下來。 您可以在 重新安裝 Windows 10 頁面找到如何執行此作業的指示。
如果您看到此錯誤:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/home/user/.ssh/private-key.pem' are too open.
若要修正此問題,請將下列內容附加至 /etc/wsl.conf
檔案:
[automount]
enabled = true
options = metadata,uid=1000,gid=1000,umask=0022
請注意,新增此命令將會包含元數據,並修改 WSL 所見 Windows 檔案上的檔案許可權。 如需詳細資訊,請參閱 文件系統許可權。
無法在 Windows 上透過 OpenSSH 遠端使用 WSL
如果您在 Windows 上使用 openssh-server 並嘗試從遠端存取 WSL,則許多人會看到此錯誤:
The file cannot be accessed by the system.
使用 WSL 的市集版本時,這是 已知問題。 您可以使用 WSL 1,或使用 Windows 內部版本的 WSL 來解決此問題。 如需詳細資訊,請參閱 https://aka.ms/wslstoreinfo。
在發行版中執行 Windows 命令失敗
某些在 Microsoft 市集 中的發行版 仍無法開箱即用地執行 Windows 命令。 如果您在執行 -bash: powershell.exe: command not found
或任何其他 Windows 命令 powershell.exe /c start .
收到錯誤,您可以依照下列步驟加以解決:
在您的 WSL 發行版中,執行 echo $PATH
。
如果不包含 /mnt/c/Windows/system32
,則可能是某些因素正在重新定義標準的 PATH 變數。
使用 cat /etc/profile
檢查設定檔設定。
如果其中包含對 PATH 變數的指派,請編輯該檔案,使用 # 字元將 PATH 指派區塊註解掉。
檢查 wsl.conf 是否存在 cat /etc/wsl.conf
,並確定不包含 appendWindowsPath=false
,否則請將其註解掉。
在 cmd 或 PowerShell 中輸入 wsl -t
,然後輸入分發名稱,或執行 wsl --shutdown
來重新啟動分發。
安裝 WSL 2 之後無法開機
我們瞭解會影響使用者在安裝 WSL 2 之後無法開機的問題。 雖然我們完全診斷這些問題,但用戶回報 變更緩衝區大小 或 安裝正確的驅動程式, 有助於解決此問題。 請檢視此 GitHub 問題,以查看此問題的最新更新。
停用ICS時發生WSL 2錯誤
因特網聯機共用 (ICS) 是 WSL 2 的必要元件。 主機網路服務 (HNS) 使用 ICS 服務來建立 WSL 2 依賴的基礎虛擬網路,該網路提供 NAT、DNS、DHCP 和主機連線共用功能。
停用ICS服務 (SharedAccess) 或透過組策略停用ICS會防止建立WSL HNS 網路。 建立新的 WSL 第 2 版映射時,這會導致失敗,而嘗試將第 1 版映射轉換成第 2 版時發生下列錯誤。
There are no more endpoints available from the endpoint mapper.
需要 WSL 2 的系統應該將 ICS 服務 (SharedAccess) 保留為預設的啟動狀態、手動(觸發程序啟動),以及停用 ICS 的任何原則都應該遭到覆寫或移除。 停用ICS服務會中斷WSL 2,但不建議停用ICS,但使用這些指示 可以停用ICS的部分
使用舊版 Windows 和 WSL
如果您執行舊版的 Windows 和 WSL,例如 Windows 10 Creators Update(2017 年 10 月、組建 16299) 或年度更新版(2016 年 8 月,組建 14393),則有幾個差異。 建議您 更新為最新的 Windows 版本,但如果不可能,我們已概述以下的一些差異。
互作性命令差異:
bash.exe
已取代為 wsl.exe
。 Linux 命令可以從 Windows 命令提示字元或 PowerShell 執行,但針對舊版 Windows,您可能需要使用 bash
命令。 例如:C:\temp> bash -c "ls -la"
。 傳入 bash -c
的 WSL 命令會轉送至 WSL 程序,而不需修改。 檔案路徑必須以 WSL 格式指定,且必須小心逸出相關的字元。 例如:C:\temp> bash -c "ls -la /proc/cpuinfo"
或 C:\temp> bash -c "ls -la \"/mnt/c/Program Files\""
。
若要檢視特定散發版可用的命令,請執行 [distro.exe] /?
。 例如,使用 Ubuntu:C:\> ubuntu.exe /?
。
Windows 路徑包含在 WSL $PATH
中。
在較舊版本的 Windows 10 中,從 WSL 發行版呼叫 Windows 工具時,您必須指定目錄路徑。 例如,若要從 WSL 命令行呼叫 Windows 記事本應用程式,請輸入:/mnt/c/Windows/System32/notepad.exe
若要將預設使用者變更為 root
請在 PowerShell 中使用此指令:C:\> lxrun /setdefaultuser root
,然後執行 Bash.exe 以登入:C:\> bash.exe
。 使用發行版的密碼命令重設您的密碼:$ passwd username
,然後關閉 Linux 命令列:$ exit
。 從 Windows 命令提示字元或 Powershell,將預設使用者重設為一般 Linux 使用者帳戶:C:\> lxrun.exe /setdefaultuser username
。
卸載舊版 WSL
如果您在 Creators 更新之前的 Windows 10 版本上安裝 WSL (2017 年 10 月,組建 16299),建議您將任何必要的檔案、數據等從您安裝的舊版 Linux 發行版移轉至透過 Microsoft 市集安裝的較新發行版。 若要從您的電腦中移除舊版散發套件,請從命令行或 PowerShell 實例執行下列命令:wsl --unregister Legacy
。 您也可以選擇手動移除舊版散發套件,方式是使用 Windows 檔案總管或 PowerShell 刪除 %localappdata%\lxss\
資料夾(以及其所有的子內容):rm -Recurse $env:localappdata/lxss/
。