![毎回 IP を変更せずに WSL2 に接続するための SecureCRT 接続を確立するにはどうすればよいですか?](https://rvso.com/image/1654786/%E6%AF%8E%E5%9B%9E%20IP%20%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%9B%E3%81%9A%E3%81%AB%20WSL2%20%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%20SecureCRT%20%E6%8E%A5%E7%B6%9A%E3%82%92%E7%A2%BA%E7%AB%8B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
WSL2 IP を静的にする方法はありますか? それについて読んだところ、IP を静的にする方法はないと言われました。では、構成で IP アドレスを変更せずに WSL2 に SecureCRT 接続して、毎回 IP を再入力しなくても済む方法はあるのでしょうか?
答え1
新しいIPアドレスですべてをやり直さないようにする解決策は、投稿にあります
WSL 2 NIC ブリッジ モード #4150。
残念ながら、解決策は、ログインするたびに自動的に実行されるスクリプトに作業を委ねることだけです。
問題の説明:
回避策としては、WSL 2 サービスの TCP ポートをホスト OS に転送します。WSL
2 マシン上の仮想アダプターは再起動中に IP アドレスを変更するため、1 回限りの実行ソリューションを実装するのは困難です。
また、補足として、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
localhost
WSL2 のポート転送を利用して、Windows ホストをジャンプホストとして使用します。つまりssh -o "ProxyCommand ssh -W %h:%p windowshost.local" -o "StrictHostKeyChecking=no -p 2222 localhost
(「windowshost」をマシン名に置き換えます)。
これが機能するのは、Windows が既定で WSL2 インスタンスで実行されているサービスを検出し、localhost
それらに接続を転送するためです。
もちろん、これは SecureCRT が ProxyCommand を使用できることを前提としています。