
有沒有辦法讓 WSL2 ip 靜態?我讀到它,我被告知沒有辦法使 IP 靜態,那麼有沒有一種方法可以使 SecureCRT 連接到 WSL2,而無需更改配置中的 IP 位址,這樣我就不必重新輸入每次都是ip嗎?
答案1
不再使用新 IP 位址重做所有內容的解決方案可在貼文中找到
WSL 2 NIC 橋接模式 #4150。
不幸的是,解決方案只是將工作委託給每次登入後自動執行的腳本。
問題描述:
解決方法是將 WSL 2 服務的 TCP 連接埠轉送到主機作業系統。
WSL 2 電腦上的虛擬適配器在重新啟動期間會變更其 IP 位址,這使得很難實現一次運行解決方案。
另請注意,Windows 防火牆會阻止重新導向連接埠。
解決方案是編寫一個 PowerShell 腳本來執行以下操作:
- 取得 WSL 2 機器的 IP 位址
- 刪除之前的連接埠轉送規則
- 新增連接埠轉送規則
- 刪除之前新增的防火牆規則
- 新增新的防火牆規則
該腳本還會刪除不需要的防火牆規則。
這是從該帖子複製的腳本:
$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
if( $found ){
$remoteport = $matches[0];
} else{
echo "The Script Exited, the ip address of WSL 2 cannot be found";
exit;
}
#[Ports]
#All the ports you want to forward separated by coma
$ports=@(80,443,10000,3000,5000);
#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";
#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";
#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";
for( $i = 0; $i -lt $ports.length; $i++ ){
$port = $ports[$i];
iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}
您需要安排腳本在登入後運行,如下所示:
轉到搜索,搜索任務計劃程序。在右側的操作選單中,按一下建立任務。
輸入名稱,轉到觸發器標籤。建立一個新的觸發器,在登入時開始任務,將延遲設定為 10 秒。
轉到操作並新增腳本。如果您使用的是筆記型電腦,請前往設定並啟用開機運作。
答案2
如果您只需要ssh
SecureCRT 的連線/協定(您在評論中指出),那麼還有連接埠轉送的替代方案:
- 安裝 Windows OpenSSH 伺服器(方向在連接埠 22 上運作。
- 將 WSL2 sshd 連接埠設定為其他連接埠(例如 2222)
/etc/ssh/sshd_config
- 使用 Windows 主機作為跳轉主機,利用 WSL2 的
localhost
連接埠轉送。即ssh -o "ProxyCommand ssh -W %h:%p windowshost.local" -o "StrictHostKeyChecking=no -p 2222 localhost
(用您的電腦名稱替換“windowshost”)。
這是可行的,因為預設情況下,Windows 將偵測 WSL2 執行個體中執行的服務並將localhost
連線轉送到它們。
當然,這假設 SecureCRT 可以使用 ProxyCommand。