ひかりの備忘録

WSL 内のサーバーを LAN に公開する

この記事では WSL 内のサーバーを LAN に公開する方法を紹介します。

サーバーを建てる

既にサーバーがある場合は、この章は読み飛ばしてください。

index.html の作成

例として、以下の内容で index.html 作成します。

<!-- index.html -->
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello, world!</title>
</head>
<body>
    <h1>Hello, world!</h1>
</body>
</html>

Ruby で簡易的なサーバーを立てる

Ruby でサーバーのスクリプトを記述します。 server.rb に保存します。

#!/usr/bin/env ruby

# server.rb

require 'webrick'

server = WEBrick::HTTPServer.new({
:DocumentRoot => './',
:Port => 8000
})

trap('INT') { server.shutdown }

server.start

次に、ruby server.rb を実行し、サーバーを立ち上げます。
(ここで、エラーが発生する場合は gem install webrick を実行してください。)

ブラウザで localhost:8000 に接続すると index.html の内容が表示されます。 hostname -I で表示される IP アドレスでも表示できます。

LAN に公開する

最近の WSL2 の仕様では WSL で立ち上げたサーバーが localhost へ転送されます。 しかし、WSL1 とは異なり LAN のアドレス (例えば、192.168.0.2 など) へアクセスしても、WSL2 のサーバーへアクセスすることはできません。

したがって、ポート転送する必要があります。

ポート転送設定

netsh interface portproxy コマンドを利用することで、ポート転送が可能です。

以下のコマンドは、すべての NIC に割り当てられている IP アドレスの 8000 へのアクセスを、 localhost:8000 へ転送する設定です。 このコマンドは、管理者権限で実行する必要があります。

netsh interface portproxy add v4tov4 listenport=8000 connectaddress=localhost

設定は netsh interface portproxy show v4tov4 を実行することで見ることができます。

PS > netsh interface portproxy show v4tov4

ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               8000        localhost       8000
設定の削除方法
        netsh interface portproxy delete v4tov4 listenaddress=* listenport=8000
        
    

また、すべての NIC ではなく、特定の NIC の IP アドレスに対して行いたい場合は、以下のコマンドを実行します。

netsh interface portproxy add v4tov4 listenport=8000 connectaddress=localhost listenaddress=<対象 NIC の IP アドレス>

ファイアウォール設定

  1. Win + R で「ファイル名を指定して実行」を開き、wf.msc と入力して「OK」し、「セキュリティが強化された Windows Defender ファイアウォール」を開きます。

firewall

  1. 左側にある「受信の規則」をクリックし、右側の「新しい規則…」をクリックして「新規受信の規則ウィザード」を開きます。
    • 「ポート (O)」を選択して [次へ(N) >] をクリック
    • 「特定のローカル ポート(S):」のところにポート番号 (今回の場合は 8000) を入力し [次へ(N) >] を 3 回クリック
    • 「名前(N):」のところに適当な設定名をつけて [完了(F)] をクリックし設定を保存

LAN からアクセスできるかの確認

ipconfig を入力し、LAN の IP アドレスを確かめます。 おそらくほとんどの場合は、192.168.x.x の形式だと思います。

このアドレスとポート番号を同じネットワーク内の端末 (スマホなど) のブラウザに入力します。 例えば、IP アドレスが 192.168.0.2 の場合は http://192.168.0.2:8000 です。