はじめに
前回はWSL2を動かしているWindowsホストからWSL2の仮想マシンに対してリモートデスクトップ接続を行いましたが、今回は外部のクライアントからWSL2の仮想マシンに直接接続できるように、仮想ネットワークの設定を変更しようと思います。
ブリッジ接続を行うために必要なこと
WSL2はいわゆる仮想マシンを動作させる機能となりますが、WSL2を動かしているWindowsホストと仮想マシン間では仮想のスイッチを介して通信を行っています。
デフォルトではWindowsホストと仮想マシン間でしか接続できない設定となっており、また、Windowsホストから仮想マシンに接続するにはWindowsホスト側でポートフォワードを行う必要がありました。
外部と直接通信するためには外部と通信が行える仮想スイッチを作成する必要がありますが、仮想スイッチを作成する機能はHyper-Vのサービスを有効にする必要があり、Hyper-Vのサービスを有効にするにはWindows 11 Proでなければ有効にできません。
以下よりWindows 11 Proでブリッジ接続を行えるようにする設定を紹介していきます。
Hyper-Vサービスの有効化
ブリッジ接続を行うためにはHyper-Vサービスを有効にする必要があるため、今回はPowerShellから有効にしていきます。
PowerShellを特権モードで起動して以下コマンドを実行します。
dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all
サービス有効化後、再起動する必要があるため、メッセージに従い再起動を行ってください。
新しい仮想スイッチの作成
ブリッジ接続するために新しい仮想スイッチを作成していきます。
仮想スイッチマネージャー画面への遷移
検索ボックス等で「コントロールパネル」を開き、「システムとセキュリティ」→「Windowsツール」から「Hyper-Vマネージャー」を起動します。
上部バーか、ウィンドウ右の「操作」メニューから「仮想スイッチマネージャー」を選択。
デフォルトで作成されている仮想スイッチを見ると、以下のように接続の種類が「内部ネットワーク」でNATモードになっていることが確認できます。
WSL2を使用する場合、何もしなければデフォルトの仮想スイッチを使用して外部と通信することになるため、外部と通信する際にはNATで通信することになり、また、接続の種類が内部ネットワークになっているため、外部のクライアントからの接続は行えないようになっています。
そのため、通常はWSL2を動かしているWindowsホストからしか接続できず、Windowsホストから接続する際にもWindowsホスト側でポートフォワーディングを行ってWSL2側のサービスと紐付ける必要があったわけです。
以下より新たに外部からの接続が行えるように新しくスイッチを作成して設定していきます。
外部接続用仮想スイッチの作成
「新しい仮想ネットワークスイッチ」から「外部」を選択し、「仮想スイッチの作成」を選択します。
スイッチに適当な名前(今回はExternal Switch)を入力し、接続の種類で「外部ネットワーク」、「ネットワークアダプターの共有を許可」にチェックを行い、「適用」→「OK」と選択します。
適用時、以下のようなポップアップが表示されたら、「はい」を選択します。
接続する仮想スイッチの変更
外部接続用の仮想スイッチは作成したので、WSL2が使用している仮想スイッチをデフォルトの仮想スイッチから外部接続用の仮想スイッチに以下手順で切り替えます。
.wslconfigの作成
WSL2が使用している仮想スイッチを切り替えるためにはネットワーク設定を書き込んだ.wslconfigというファイルをメモ帳等で新たに作成してWindowsホスト側の「C:¥Users¥[username]」配下に置く必要があります。
[wsl2]
networkingMode=bridged
vmSwitch="External Switch"
dhcp=true
ipv6=true
vmSwitchは先程作成した外部接続用仮想スイッチの名前(今回はExternal Switch)を入力してください。
Ubuntuの再起動
仮想スイッチの切り替えにはWSL2で動かしている仮想マシンの再起動が必要となるため、PowerShellでwsl -l -vコマンドを実行し、Running状態であれば、シャットダウンを行います。
> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
シャットダウンするには、NAMEで表示されている名前(今回はUbuntu)を指定すればOKです。
wsl --shutdown Ubuntu
シャットダウン後、WindowsターミナルからUbuntuのウィンドウを立ち上げれば起動してきます。
IPアドレスの確認
仮想マシン起動後、仮想マシン側で外部ネットワークのアドレスが割り振られているかip a等のコマンドで確認します。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 5e:bb:f6:9e:ee:fa brd ff:ff:ff:ff:ff:ff
inet 192.168.0.15/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 2400:4051:e01:d500:xxxx:xxxx:xxxx:xxxx/64 scope global tentative dynamic mngtmpaddr
valid_lft 2591993sec preferred_lft 604793sec
inet6 fe80::5cbb:f6ff:fe9e:eefa/64 scope link
valid_lft forever preferred_lft forever
ここまでの設定でWSL2側は外部接続用仮想スイッチに接続を切り替えた構成になるため、イメージとしては以下のような接続となっています。
外部からの接続確認
外部接続用の仮想スイッチに繋いだことでWSLを動作させているWindowsホスト以外からも接続できるようになったので、別のクライアントから接続できるか確認してみます。
外部のクライアントでリモートデスクトップ接続を立ち上げ、「[IPアドレス]:13389」を指定して接続します。
なお、Windowsホスト側でファイアウォール等の設定を行っている場合はあらかじめ許可しておきましょう。
Windowsホストで接続したときと同様に接続できれば成功です。
なお、ブリッジ接続を行ったことでWSL2の仮想マシンに外部IPアドレスが割り振られて、直接外部から接続できるようになったことから、リモートデスクトップ接続時のポート番号を分ける必要がなくなったので、13389ポートに変更していたポート番号は、デフォルトの3389ポートに戻してもOKです。
おわりに
WSL2の仮想マシンに外部から接続するという需要があるかはともかく、手元のPCで手軽に設定できるのでちょっとしたテストを行うのに便利だと思いました。






