![]() |
広島三段峡の三段滝 |
WSL2「Windows Subsystem for Linux
2」への外部からのアクセスは,「netsh」コマンドによるポートフォワーディングが一般的です。
しかし,最近,新しい手法として「ミラーモード」という機能がサポートされました。
この機能はWindows11 22H2
以降のPCで利用でき,「C:\Users\ユーザ名」下にある「.wslconfig」ファイル内に以下のように定義することで有効化されます。
[wsl2]
networkingMode=mirrored
この設定により、WSL2はWindows 上のネットワーク インターフェースをLinux
にミラーリングするというまったく新しいネットワークアーキテクチャに変更されます。
現時点での利点は次のとおりです。
- IPv6 のサポート
- localhost アドレス 127.0.0.1を使用して Linux 内から Windows サーバーに接続できます。(但し, IPv6 localhost アドレス ::1 はサポートされていません。)
- VPN のネットワーク互換性の向上
- マルチキャストのサポート
- ローカル エリア ネットワーク (LAN) から WSL に直接接続します。
新しいネットワークモードは、NAT (ネットワーク アドレス変換)
ベースのアーキテクチャにおいて,WindowsとLinuxが異なるIPアドレスを持つという課題を解決します。
外部からWSL2へアクセスするのに「netsh」コマンドを利用しなくてもいいというメリットは大きいと言えます。
そこで,WSL2のミラーモードを使って,外部ネットワークからSSHリモート接続を実証してみます。
【実証前提条件】
・パソコン : Windows11 pro 24H2 (IPアドレス:IPv4固定値)
・Linux ディストリビューション : Ubuntu-24.04.1 LTS
・WSL2 バーション : 2.4.12.0
それでは学習を始めます。
1.WSL2にミラーモードを設定する
ミラーモードの設定は,「.wslconfig」というWSL2設定パラメータファイルを直接修正するのですが、間違う可能性もありますのでマイクロソフトが用意した「WSL Settings」というアプリを使うことにします。
WSL2インストール後に,Windowsスタートから入ってアプリ一覧から「WSL Settings」を探し,起動すると設定画面が開きます。左の項目欄で「ネットワーク」を選択します。主に必要な項目は次の2項です。
- ネットワークモード:mirrored
- Hyper-Vファイアーウォールが有効:オフ
Hyper-Vファイアーウォールが新たに追加されましたので,これも設定しないといけないことになりました。
今回の実証では、簡便的にHyper-Vファイアーウォールを「オフ」にしました。
但し、デフォルトは「オン」であるため、「オン」のまま使うのであれば次のコマンドを管理者権限付き「PowerShell」で実行し、WSL2へのアクセスを許可します。
(Microsoft Learn 参照)
管理者:PowerShell
Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow
または ポート番号を指定して以下のように許可します。
管理者:PowerShell
New-NetFirewallHyperVRule -Name "MyWebServer" -DisplayName "My Web Server" -Direction Inbound -VMCreatorId '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -Protocol TCP -LocalPorts 22
【その他のコマンド群】
Hyper-VファイアーウォールのWSL
GUIDを取得するには,管理者権限付「PowerShell」上で次のコマンドを実行します。
管理者:PowerShell
Get-NetFirewallHyperVVMCreator
以下のようなメッセージが出力されます。
メッセージ
VMCreatorId : {40E0AC32-46A5-438A-A0B2-2B479E8F2E90}
FriendlyName : WSL
このWSL
GUIDを使って、Hyper-Vファイアーウォールの設定内容を調べるには次のコマンドを入力します。
管理者:PowerShell
Get-NetFirewallHyperVVMSetting -PolicyStore ActiveStore -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}'
以下のようにメッセージが出力されます。
メッセージ
Name : {40E0AC32-46A5-438A-A0B2-2B479E8F2E90}
Enabled : True
DefaultInboundAction : Block
DefaultOutboundAction : Allow
LoopbackEnabled : True
AllowHostPolicyMerge : True
「DefaultInboundAction
」が「Block」になっていますので、通過を許可するため、先程の「Set-NetFirewallHyperVVMSetting」や「New-NetFirewallHyperVRule」を設定します。
マイクロソフトの「WSL Settings」アプリを起動し,ネットワークモードをmirroredに変更した後,「C:\Users\ユーザ名」下にある設定パラメータファイル「.wslconfig」の内容を確認します。
以下のような記述があれば,OKです。
.wslconfig
[wsl2]
networkingMode=mirrored
次に,WSL2を起動してLinuxを立ち上げます。この立ち上げ方はいろいろありますが,次のブログカードを参考にしてください。
![]()
Win11/WSL2のインストールから起動方法まで
Windows11化に伴い新たにWSL2(Windows Subsystem for Linux 2)のインストールから起動までをまとめた。Windows11になって機能追加されている処もあるので参考にしてほしい。
Linuxプロンプトに次のコマンドを入力して,IPアドレスを確認します。
Linuxコード
hostname -I
これにより,次のようなメッセージが出てくると思います。
メッセージ例
192.168.XXX.XXX 240f:b2:XXXX:1:bbdc:b81c:XXXX:XXXX 240f:b2:XXXX:1:21df:9dd8:XXXX:XXXX
これを見ると,WindowsのIPアドレスが,Linuxで直接使えるようになっているのが分かります。
「netsh」コマンドによリポートフォワーディングしなくても,外部ネットワークからWSL2にアクセスできる事を確認するため,リモートアクセスツールで疎通を確認します。
sshリモート通信準備およびパソコンのファイアーウォールにポートの通信許可を設定する必要がありますが,下記のブログを参考に設定してください。
![]()
Win11/WSL2への外部からのアクセス(ポートフォワーディング)について
Win11/WSL2への外部環境からのアクセス通信を受けるため,ポートリッスン「ポートフォアデンング」方法について学習する。
準備が整いましたら,外部ネットワークのパソコンで「PowerShell」を立ち上げて,以下のコマンドをプロンプトに入力します。
PowerShell
ssh <ユーザ名>@<Windows_IPアドレス>
<ユーザ名>にユーザ名,<Windows_IPアドレス>にWindowsのIPアドレスを代入して下さい。
パスワードを求められますが,上手く設定されていればWSL2にアクセスできると思います。もちろん,「TeraTerm」などの他のリモートアクセスツールを使うのも良いです。
4.まとめ
このように「netsh」コマンドによるポートフォワーディングを使わなくても,WSL2への外部アクセスにWindowsのIPアドレスを直接利用できることがわかりました。
このミラーモード設定では,LinuxからWindows上にあるアプリに対しても,LocalHostアドレス「127.0.0.1」を利用して,アクセスすることが出来るようです。
ただ,現時点ではサポートされたばかりなので,安定稼働するにはもう少し時間がかかるような気がいたします。また,Windowsとlinuxで同じポート番号を同時に利用できないようです。
しかし,ネットワーク設定が簡単ですので利用する価値はあると考えます。
詳しくは,Microsoft Learnサイトを閲覧ください。
それでは,楽しいITリテラシーライフをお過ごしください。
(ご注意)情報の正確性を期していますが,実施される場合には自己責任でお願いします。
0 件のコメント:
コメントを投稿