WSL2のサービスにスマホや他のPCからアクセスできるようにするには

WSL1の時は、特に設定は必要なく。

WSLを動かしているPC(WSLホスト)のTCPポートに接続すると、普通にサービスにアクセスできましたね。

WSL2は、WSLホストのlocalhostや127.0.0.1ではアクセス可能なのですが、他のPCからアクセスすると弾かれてしまいます。

WSL2でもアクセス可能になる設定手順を記録しておこうと思います。

※22.10.27追記:

WSL2版Podman.exeの場合、こちらのバッチファイルで、ポッドの起動・ポートフォワード・ファイアウォールの開放が可能になりました。

以下、Ubuntuの場合の例になります。


WSL2で構築したネットワーク・アプリの他PCアクセス設定手順

ずばり。こちらの記事になります。

その前に、少し状況を整理しておきたいと思います。

WSLホストPC側のvEthernetネットワークの確認

前提条件ですが。

このような形で、WSLホストPCにvEthernetが存在し、使用できる状況であることが前提です。上図では、「172.19.16.1」というIPアドレスが割り当てられています。

これは、WSLホスト(Windows PC)側のIPアドレスになります。

スマホや他のPCから、WSLゲストへアクセスする場合、Wi-FiやLANケーブルを通じてWSLホストPCへパケットが入ってきます。

おうちLAN等では、192.168.xxx.xxxのようなIPアドレスが一般的かと思います。

この192.168.xxx.xxxに入ってきたパケットが、172.19.16.xxxのvEthernetにルーティングされま・・・され・・・され?・・・されてないから問題なのでしょうね。

アクセスできない原因がわかったところで、具体的に設定を進めたいと思います。

WSLゲスト側のvEthernetネットワークのIPアドレスを調べる

まずは、公開したいWSLゲスト(Ubuntu等)のIPアドレスを調べておきます。

少し古めのUbuntu 20.04での実行例ですが、次のコマンドでIPアドレスを調べます。

ip addr

上図では、「172.19.19.51」というIPアドレスが割り当てられている状況です。

実は、このIPアドレスが毎回変わるのが問題で・・・というのは後で。

今、WSLを再起動するまでは、このIPアドレスである、という意味になります。

※22.10.27追記:

WSL2のゲストOSのIPアドレスを調べるコマンドを作ってみました。

「/proc/net/fib_trieファイルからIPアドレスを得る」コマンドは、Ubuntuでも実行可能です。

WSLゲスト側の公開したいサービスのポート番号を調べる

たとえばWordPressやNextCloud等のネットワーク・アプリを、aptコマンドでネイティブに構築/snap/Docker/podman等のコンテナ化等で構築するかと思います。

podmanで構築する場合、こちらの手順になります。

たとえば上記リンクの中のNextcloudは、TCPポート番号8081で動かしています。

このように、TCP/UDPのポート番号いくつであるか、公開したいアプリケーションのポート番号を調べておきます。

外部から来たパケットをルーティングする設定

以上、公開したいWSLゲストのIPアドレスと、TCP/UDPのポート番号から、下記のコマンドを作成しておきます。

netsh interface portproxy add v4tov4 listenport=<ポート番号> listenaddress=0.0.0.0 connectport=<ポート番号> connectaddress=<WSLゲストのIPアドレス>

あとはこちらを、管理者権限で実行します。

これでWSLホストPC側の準備が整いました。

スマホ(iPhone)からアクセスする場合、同一セグメントでしたら、次のようなURLでアクセスできました。

https://<ホスト名>.local:8081

ホスト名.localは、mDNSによる名前解決で、Windows同士やiPhone、iPad等で使用可能です。

Linuxの場合はavahiをインストールすると使用できるようになります。(よってAndroidで使用できるかどうかは、avahiの有無によります)

Windowsファイアウォールの設定変更

Windows Defenderファイアウォールの設定を変更しておきます。

wf.msc

受信の規則、送信の規則に、該当のポート番号を追加し、「許可」に設定しておきましょう。

ネットワーク・アプリケーション側の設定を確認

たとえば上述のNextcloudの場合、スマホからNextcloudにまだアクセスできません。

管理画面で下記のようなエラーが表示されます。

Nextcloudの場合、config.phpを編集し、アクセス可能なURLを追加する必要があります。

上記podmanで構築したNextcloudの場合、ポッド名はnc-pod、Webコンテナ名はnc-web、DBコンテナ名はnc-dbになります。

config.phpの編集は下記の流れになります。

# Webコンテナ内でbashを起動
sudo podman exec -ti nc-web bash
# テキストエディタをインストール
apt update
apt install vim -y
# config.phpを編集
vi config/config.php

アクセスエラーを確認する手段とまして、podmanで動かしたサービスは、podman logsコマンドでエラーログを表示して、何かアクセス制限がかかっていないかどうか、確認することが可能です。

Webコンテナのログを表示する場合、下記のコマンドになります。

sudo podman logs -f nc-web

ポッドのログは、すべてのコンテナのログを混ぜた内容になると思います。

こちらのログを見ながらアクセスしてみて、エラーログを参考に、アプリの設定を調整する感じでしょうか。


以上で、WSL2で構築したネットワーク・アプリに、外部のPCやスマホからアクセスできるようになりました。

しかし。

少しお話したように、WSL2ゲスト(たとえばUbuntu)のIPアドレスが変わるのですよね・・・これはゲスト側のIPアドレスの取得方法の問題と思いますので、ゲスト側で工夫が必要なのかなと思います。(推測で恐縮ですが

まあ設定は不完全ながら、技術的にはWindows 11 + WSL2 + PodmanでNextcloudやWordpressを構築して、スマホからアクセスできるようになりました。

よろしければお試しくださいませ!

スポンサーリンク

フォローする

スポンサーリンク