こぼれネット

wslでtsubame のdocker compose およびtsubame/src のserver.pyで支援頂きました。この環境を使って、これを外部(とりあえずLANに繋がったリモートマシンのブラウザからアクセスできるようにして下さい。

wslでtsubame のdocker compose およびtsubame/src のserver.pyで支援頂きました。この環境を使って、これを外部(とりあえずLANに繋がったリモートマシンのブラウザからアクセスできるようにして下さい。

WSL 上の Web サーバ(tsubame)を LAN 内から公開する手順

前提

  • Windows + WSL2 環境

  • ~/tsubame/docker compose(DB 等)と
    ~/tsubame/src/server.py(HTTP サーバ)を WSL 上で稼働

  • 公開ポート:18080

  • 公開範囲:同一 LAN 内のみ


1. WSL 側:server.py を外部待受にする

WSL 内で、HTTP サーバが 0.0.0.0:18080 で待受するようにする。

Flask 例

if __name__ == "__main__":
app.run(host="0.0.0.0", port=18080)

起動:

python3 server.py

待受確認

ss -lntp | grep 18080

期待結果:

LISTEN ... 0.0.0.0:18080 ...

2. Windows 側:ファイアウォールで 18080/TCP を許可

管理者 PowerShell で実行。

New-NetFirewallRule `
-DisplayName "tsubame 18080" `
-Direction Inbound -Action Allow `
-Protocol TCP -LocalPort 18080 `
-Profile Any

3. Windows → WSL のポート転送(portproxy)を設定

WSL2 環境では自動転送されない場合があるため、明示的に設定する。

3.1 WSL の IP を確認

ip -4 addr show eth0 | grep inet

例:

172.29.11.141

3.2 portproxy を追加(管理者 PowerShell)

netsh interface portproxy add v4tov4 `
listenaddress=0.0.0.0 listenport=18080 `
connectaddress=172.29.11.141 connectport=18080

確認:

netsh interface portproxy show all

4. アクセス方法(これが正解)

LAN 内の別PCのブラウザから

http://<WindowsのLAN IP>:18080/

今回の環境では:

http://192.168.0.3:18080/

5. docker compose について

  • PostgreSQL 等の 内部サービスは LAN 公開不要

  • server.py が WSL 内 DB に接続できていれば OK

  • docker compose 側のポート公開設定は不要


全体構成(最終形)

別PCブラウザ

Windows (192.168.0.3:18080)
↓ portproxy
WSL (172.29.x.x:18080)

server.py

docker compose(DB 等)

まとめ(要点だけ)

  • WSL の Web サーバは 0.0.0.0 で待受

  • LAN 公開の入口は Windows の IP

  • WSL2 では portproxy を使うのが確実

  • netsh必ず Windows の管理者 PowerShell で実行


HTTPS 化の最終手順(mkcert+nginx+Windows/WSL 構成)

1. mkcert によるサーバ証明書の作成(Windows)

本環境では、mkcert は以下の実行ファイルを直接使用している。

C:\Users\tomoi\Downloads\mkcert-v1.4.1-windows-amd64.exe

証明書は、IP アドレス・localhost・loopback を SAN に含めて生成する。

cd C:\Users\tomoi\Downloads
.\mkcert-v1.4.1-windows-amd64.exe 192.168.0.3 localhost 127.0.0.1 ::1
生成されるファイルは以下の 2 つである。
192.168.0.3+3.pem
192.168.0.3+3-key.pem
この証明書には、SAN として以下が含まれている。
DNS:localhost
IP Address:192.168.0.3
IP Address:127.0.0.1
IP Address:::1

2. 証明書を WSL(nginx)側へ配置

WSL(Ubuntu)上で、nginx 用のディレクトリを作成し、Windows 側から証明書をコピーする。

sudo mkdir -p /etc/nginx/ssl/192.168.0.3

sudo cp /mnt/c/Users/tomoi/Downloads/192.168.0.3+3.pem \
        /etc/nginx/ssl/192.168.0.3/cert.pem

sudo cp /mnt/c/Users/tomoi/Downloads/192.168.0.3+3-key.pem \
        /etc/nginx/ssl/192.168.0.3/key.pem

sudo chmod 644 /etc/nginx/ssl/192.168.0.3/cert.pem
sudo chmod 600 /etc/nginx/ssl/192.168.0.3/key.pem

3. nginx 設定(192.168.0.3 用 HTTPS)

設定ファイル名は IP アドレスで統一する。

/etc/nginx/sites-available/192.168.0.3.conf
server {
    listen 443 ssl;
    server_name 192.168.0.3;

    ssl_certificate     /etc/nginx/ssl/192.168.0.3/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/192.168.0.3/key.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://127.0.0.1:18080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name 192.168.0.3;
    return 301 https://$host$request_uri;
}

有効化と反映。

sudo ln -s /etc/nginx/sites-available/192.168.0.3.conf \
           /etc/nginx/sites-enabled/

sudo nginx -t
sudo systemctl reload nginx

4. Windows → WSL への 443 番ポート転送

PowerShell を 管理者権限で実行する。

netsh interface portproxy add v4tov4 `
  listenaddress=0.0.0.0 listenport=443 `
  connectaddress=172.29.11.141 connectport=443

併せてファイアウォールを許可する。

netsh advfirewall firewall add rule name="Allow HTTPS 443" `
  dir=in action=allow protocol=TCP localport=443

172.29.11.141 は WSL 側の eth0 の IP。


クライアント側(LAN 内 PC)の信頼設定


5. mkcert CA の実体(あなたの環境)

mkcert が使用している CA の実体ディレクトリは以下である。

C:\Users\tomoi\AppData\Local\mkcert

この中にある

rootCA.pem

を、HTTPS アクセスを行うクライアント PC(例:192.168.0.25)へコピーする。


6. クライアント PC(Windows 11)への CA インストール

重要:必ず「ローカル コンピューター」ストアに入れる。

  1. Win + R

  2. certlm.msc を実行

  3. 信頼されたルート証明機関
    └ 証明書
  4. 右クリック →「証明書のインストール」

  5. ローカル コンピューター

  6. 信頼されたルート証明機関

  7. 完了(UAC は許可)

certmgr.msc(現在のユーザー) では Chrome/Edge に効かない点に注意。


7. ブラウザ再起動と確認

Chrome / Edge を完全終了(タスクマネージャでプロセス消滅を確認)後、再起動。

https://192.168.0.3

🔒 鍵アイコンが表示され、
「信頼されていない通信」は解消される。


まとめ

  • mkcert による SAN 付き証明書生成

  • nginx による TLS 終端

  • Windows → WSL の 443 転送

  • ローカル コンピューター証明書ストアへの CA 登録

この 4 点が揃うことで、
LAN 内 IP アドレス指定でも、警告なしの HTTPS が成立する。

モバイルバージョンを終了