介紹
Windows Subsystem for Linux (WSL) 是微軟在 Windows 10 引入的一個與 Linux 相容的核心界面,透過 WSL,我們可以在 Windows 執行各種不同 Linux 的發行版本,並且效率會比 VirtualBox、VMWare 等等虛擬出一整個 VM 的效率來的要更高,如果在 Windows 上需要執行 Linux 的開發環境,WSL 是一個不錯的選擇。
安裝
直接在 Microsoft Store 搜尋 Linux 發行版,下載完後就會跳出一個命令提示窗建立使用者帳號與密碼,建立完成就進入到 Linux 的 Shell 了,相當方便。
啟用 systemd
Linux 中許多服務都仰賴 systemd 進行服務的管理,但是由於 PID 1 的 init 被 Windows 佔走了,所以要進行一些設定才能夠使用 systemctl 指令來操作,所幸已經有人幫忙整理好了指令,只要執行完以下指令就可以使用 systemctl 了。
apt update && apt install git
git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
cd ubuntu-wsl2-systemd-script/
bash ubuntu-wsl2-systemd-script.sh
SSH
apt install openssh-server
如果要啟用密碼登入,記得把 /etc/ssh/sshd_config 裡面的 PasswordAuthentication
設定成 yes
若登入失敗,顯示以下錯誤的話,就把 /run/nologin 這個檔案移除就可以了
System is booting up. Unprivileged users are not permitted to log in yet. Please come back later. For technical details, see pam_nologin(8).
Docker
執行以下指令後就可以使用 docker
apt install docker.io
設定對外 Port Forwarding
在 WSL 的 Linux 中如果我們啟動了一些網路服務,在 Windows 上會透過 wslhost.exe 來監聽,但它預設只會監聽 127.0.0.1 上的封包,如果我們需要提供給同一個區網下的其他電腦連線,有兩種設定方式
- 第一種方式比較暴力,直接修改 wslhost.exe 的程式,把 127.0.0.1 改成 0.0.0.0,具體方法如下
cd C:\Windows\System32\lxss\
wsl -- xxd -g 1 -ps wslhost.exe > lgs.txt
wsl -- vim lgs.txt
在 Vim 中 把所有的 0100007f 全部替換成 00000000 後存檔退出,然後執行
wsl -- xxd -r -g 1 -ps lgs > wslh.exe
wsl --shutdown
接下來修改一下權限把 wslh.exe 替換掉原本的 wslhost.exe 就可以了
ren wslhost.exe wslold.exe
ren wslh.exe wslhost.exe
參考:解决WSL2的服务在别的机器不能访问的问题_VHeroin的博客-CSDN博客_wslhost.exe
- 第二種方法則是利用 Windows 內建的 Port Proxy 進行封包轉發
監聽外部封包並轉發到設定好的 Linux IP & Port
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=172.20.66.57 connectport=22
檢視目前所有的規則
netsh interface portproxy show all
刪除規則
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=2222
設定固定 IP
WSL 每次重啟 IP 都會變動,參考以下方法可以設定固定 IP
给 WSL2 设置静态 IP 地址 – 知乎 (zhihu.com)