如何進行SecureCRT連線來連接WSL2而不必每次都更改IP?

如何進行SecureCRT連線來連接WSL2而不必每次都更改IP?

有沒有辦法讓 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

如果您只需要sshSecureCRT 的連線/協定(您在評論中指出),那麼還有連接埠轉送的替代方案:

  • 安裝 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。

相關內容