WSL2に立てたサーバに、外部端末からアクセスする
最近、絶賛WSL2で開発中なのだが、ちょくちょく外部端末からアクセスしたくなる事が多くなってきた。
wsl2 で立てたサーバーにローカルネットワーク内の他の端末からアクセスする
上記記事を丸パクリ参考にして、自分の環境用にカスタマイズしたスクリプトを公開する。
ポートを開放するスクリプト
ポートを開放するスクリプトは下記の通り。 コピペで使えるはず。 コメント行の下に空行を入れないと、その下の文がコメント扱いされるという罠があったので、注意。 僕はこのスクリプトに、server_conf.ps1という適当な名前をつけて、PowerShellで実行した。 実行すると、管理者権限のPowerShellが立ち上がって勝手に色々やってくれる。 $ports変数の所を調整すれば、色々と好きなポートを開けることが出来るので、自分の環境に合わせて変えて欲しい。
# 管理者権限で実行
# コメントの下に空行を入れないと、その下の文はコメント扱いされるので、注意
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powershell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit }
# WSL 2 の IP アドレスを取得
$ip = bash.exe -c "ip r |tail -n1|cut -d ' ' -f9"
if( ! $ip ){
echo "The Script Exited, the ip address of WSL 2 cannot be found";
exit;
}
# 通信ポートを開く
$ports=@(3000, 5173);
$ports_a = $ports -join ",";
# ファイアウォールの例外ルールを削除
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";
# New-NetFireWallRule コマンドを使用して、指定したポート番号に対するインバウンドおよびアウトバウンドのファイアウォール例外ルールを作成
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";
# netsh interface portproxy コマンドを使用して、ポートプロキシ設定を行う。
for( $i = 0; $i -lt $ports.length; $i++ ) {
$port = $ports[$i];
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=* connectport=$port connectaddress=$ip";
}
# 作成されたポートプロキシの設定を表示したい場合は、以下を実行
# iex "netsh interface portproxy show v4tov4";
ポートを開放した後は開発サーバを立ち上げ、192.168.XXX.XXX:3000みたいなアドレスで、アクセスする事が出来るようになる。 同じLAN内ならばこれで気兼ねなく通信が出来るはずだ。
ポートを塞ぐスクリプト
ポートを開いたら塞ぎましょう。 という事で、これもclose_conf.ps1という適当な名前をつけて、PowerShellから実行すれば良い。 書くまでもないと思うが、$ports変数に入れるパラメータは、上記のスクリプトで設定したパラメータと合わせること。
# 管理者権限で実行
# コメントの下に空行を入れないと、その下の文はコメント扱いされるので、注意
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powershell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit }
# 作成した例外ルールを削除
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";
# 通信ポートを塞ぐ
$ports=@(3000, 5173);
for( $i=0; $i -lt $ports.length; $i++ ){
$port = $ports[$i];
iex "netsh interface portproxy delete v4tov4 listenport=$port"
}
最後に
前にも似たようなスクリプトを書いた記憶があるのだが、どこかに消えてしまったので、ブログに残すことにした。僕にとってのサブ頭脳的な感じでブログは使われている。結構便利。
コメント
コメントを投稿