#author("2021-03-09T23:26:48+09:00","default:nobuoki","nobuoki")
#author("2021-03-09T23:27:29+09:00","default:nobuoki","nobuoki")
* はじめに [#b64720ef]

wsl2に外部マシンからssh接続する際に問題になるのが、Windows再起動でwsl2のIPが変わる点です。

そこで発想を変えて、wsl2 にもう一つ固定IPを付与する(wsl2に2つ目のIPアドレスを固定的に振る)方法を紹介します。

- [[WSL2 Set static ip? Issue #4210 microsoft/WSL GitHub>https://github.com/microsoft/WSL/issues/4210#issuecomment-697257757]]

* 準備 [#x7c69d9d]

- wsl2を有効化しOSをインストール後、windows ファイアウォールで 22/tcp 受信を許可
-- [[WSL2をインストール、sshやクリップボードを設定してWindowsでUbuntuを使う | TomboMemo>https://tombomemo.com/wsl2-install-settings/]]
- (念の為)openssh-server の purge & install
-- [[Windows Subsystem for Linux のトラブルシューティング | Microsoft Docs>https://docs.microsoft.com/ja-jp/windows/wsl/troubleshooting]]

* Windowsログインで自動起動させるスクリプト [#b308a804]

- ここでは Ubuntu-20.04 の wsl2 に 10.255.255.16 を付与し、母艦には 10.255.255.88 を付与する例を示します
-- [[WSL2 Set static ip? Issue #4210 microsoft/WSL GitHub>https://github.com/microsoft/WSL/issues/4210#issuecomment-697257757]]
-- どうやら wsl2(vEthernet (WSL)) は Class-B や Class-C のプライベートアドレスを振るようなので、Class-A を固定IPに使えば多分 vEthernet (WSL) とは被らないだろう、という目論見です
-- どうやら wsl2(vEthernet (WSL)) は Class-B や Class-C のプライベートアドレスを振るようなので、Class-A のプライベートアドレスを固定IPに使えば多分 vEthernet (WSL) とは被らないだろう、という目論見です
- 1つのバッチファイル内で一部のコマンドを管理者権限で実行しています
-- [[Windowsのバッチを、必ず管理者権限で実行させる方法|なにがし|note>https://note.com/nanigashi/n/nbd9759140047]]

管理者権限でやること:
- 母艦に固定IP付与
- 母艦→wsl2への 22/tcp フォワーディング設定
- 母艦の ip helper サービス起動

ユーザー権限でやること:
- wsl2 の ssh サービス起動
- wsl2 に固定IPを付与

#prism(batch){{{
@rem # Windowsのバッチを、必ず管理者権限で実行させる方法|なにがし|note
@rem # https://note.com/nanigashi/n/nbd9759140047

cd /d %~dp0
set WSL_DISTRIBUTION=Ubuntu-20.04

@rem 管理者特権が必要なコマンドを実行し、エラーだったら promotion に分岐
openfiles > NUL 2>&1
if NOT %ERRORLEVEL% EQU 0 goto promotion

@rem ここから管理者権限で実行させたい処理を記述
netsh interface ip add address "vEthernet (WSL)" 10.255.255.88 255.255.255.0
netsh interface portproxy add v4tov4 listenport=22 connectaddress=10.255.255.16
sc.exe start  iphlpsvc  

@rem 管理者権限のときは promotion 部分をスキップし end に飛ぶ
goto end

:promotion
@rem ここからユーザー権限で実行させたい処理を記述
wsl -d %WSL_DISTRIBUTION% -u root ip addr add 10.255.255.16/24 broadcast 10.255.255.255 dev eth0 label eth0:1
wsl sudo service ssh start

@rem 管理者権限で自分自身を実行(昇格処理)
powershell start-process %~nx0 -verb runas

:end
}}}

これを wsl2-ssh-forwarding.bat などの名前で保存し、
スタートアップディレクトリ(shell:startup)にショートカットを作成しておけば準備OKです。

Windowsを再起動し、ログインするとUAEのダイアログが表示されるので、OKをクリックしバッチファイルの実行を続けて下さい。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS