Ubuntu/Apacheサーバーへの外部からのアクセス 20260412

1.Apacheサーバーへのアクセス

Apacheサーバーが起動していれば,DocumentRootにあるindex.htmlは,同じPCのブラウザからhttp://localhost/で閲覧できる。
しかし,自PCのipアドレスがわかっていても,http://自PCのipアドレス/では閲覧できない。
例えば,自PCのipアドレスが192.168.1.18の場合,http://192.168.1.18/では閲覧できない。
別のPCやスマートフォンからhttp://192.168.1.18/のようにしても閲覧できない。
WSLを使ってUbuntuを導入すると,1つのPC内に,仮想的なUbuntuマシンが存在し,仮想的なUbuntuマシンは別のipアドレスを持っているからこのようなことが起こっている。



Localhostというのは,Ubuntuが動作中の仮想マシンを指している。(なんか変だが仕様のようだ)

2.仮想ipアドレスの確認とブラウザからのipアドレスアクセス

(1)PCのipアドレスの確認
Ubuntuが動作中のPC,Vegaで内部のipアドレスを確認する。
windowsのpowershellでの作業

>ipconfig

Ethernet adapter Ethernet:
    :
  IPv4 address 192.168.1.18
    :
vEthernet (WSL)
    :
  IPv4 address 172.31.128.1
日本語環境では
イーサネット アダプター イーサネット:
    :
  IPv4 アドレス 192.168.1.18
    :
イーサネット アダプター vEthernet (WSL (Hyper-V firewall)):
    :
  IPv4 アドレス 172.31.128.1
自PC(ホストPC)のipアドレスは192.168.1.18であることがわかった。これは,内部的には仮想Windowsマシンの外向けipアドレスである。
vEthernetのipアドレス記述172.31.128.1もあるがこれは仮想Windowsマシンの仮想LAN側のipアドレスである。
(vEthernetのipアドレス記述は,WSLが起動中のみ表示される。)

(2)Ubuntuのipアドレスの確認
Ubuntuでの作業

$ ip a show dev eth0

2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:49:ac:af brd ff:ff:ff:ff:ff:ff
    inet 172.31.137.5/20 brd 172.31.143.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe49:acaf/64 scope link
       valid_lft forever preferred_lft forever
と表示されます。3行目の
inet 172.31.137.5/20 brd 172.31.143.255 scope global eth0
に着目します。
172.31.137.5がUbuntuの仮想マシンが持つIPアドレスです。
(/20は上位20ビットがネットワーク部 下位12ビットが個々の機器(ホスト部)の識別)
Ubuntuの仮想LAN向けのipアドレスが172.31.137.5であることがわかった。



ここまで判ったら,Vegaのブラウザでhttp://localhost/は,http://172.31.137.5/でもアクセスできることがわかる。

3.他のPCやスマートフォンのブラウザからアクセス

他のPC(ここではAltair)のブラウザからアクセスすることを想定する。
AltairからVegaへののHTTPのアクセスは,Vegaのport80を通して行われる。通常はファイアウォールが遮断しているので通過できるようにする必要がある。
AltairからVegaへのHTTPアクセスはVegaのWindowsマシンに対して行われるため,Vegaの WindowsマシンからUbuntuに転送されなければならない。(ポートフォワーディング)
そのためにはPC,Vega上で次の2つの作業が必要になる。 3.1 VegaのファイアウォールでHTTP(port80)のアクセス許可
  1. Vega上で「すべてのアプリ から windowsセキュリティ」を起動する
  2. 「ファイアウォールとネットワークの保護」をクリックする
  3. 「詳細設定」をクリックする。(下のほうにある)
  4. 「セキュリティが強化されたWindowsDefenderファイアウォール」が起動する
  5. ウィンドウ左側にある「受信の規則」を選択する
  6. 右側にある「新しい規則」を選択する
  7. 「ポート」を選ぶ → 次へ進む
  8. 「TCP」を選んで「特定のローカルポート」に 80 を設定する → 次へ進む
  9. 「接続を許可する」に設定する → 次へ進む
  10. この規則をいつ適用するか プライベート,パブリックにチェック → 次へ進む
  11. この規則に名前を付ける 「HTTP」 → 完了
    ファイアウォールでのポート80の通過許可は,解除の作業をするまで有効である。
3.2 ポートフォワーディング
  1. ポートフォワードの設定
    ホストPC(192.168.1.18)上のポート 80 でリッスンし,
    それを IPアドレス172.31.137.5 のポート 80 に接続するポートフォワーディング設定をする
    (ポート80はHTTP)
    管理者権限のPowerShell上で
    > netsh.exe interface portproxy add v4tov4 listenport=80 connectaddress=172.31.137.5

  2. ポートフォワーディング設定の確認
    管理者権限のPowerShell上で
    > netsh.exe interface portproxy show v4tov4
    ipv4 をリッスンする:         ipv4 に接続する:
    
    Address         Port        Address         Port
    --------------- ----------  --------------- ----------
    *               80          172.31.137.5    80
    
  3. ブート時にポートフォワーディング起動設定
    PowerShell上で

    > sc.exe config iphlpsvc start=auto

    この設定は1回行うと以降は有効になる
  4. ポートフォワーディングの動作開始
    PowerShell上で

    > sc.exe start iphlpsvc

    すでに動作中の場合は,その旨注意される。



以上の作業が終了すると,
であればVegaのwindowsのブラウザ,Vega以外のPCのブラウザやスマートフォンのブラウザからのVegaへのHTTPアクセス
http://192.168.1.18
が可能になる。応答するのはVegaのubuntuで動作中のApache2である。
ただし,これはhttpアクセスであり,httpsアクセスではないため,ブラウザによっては安全ではないとの警告が出たり,表示が注意されたりすることもある。

〇ポートフォワーディング設定の解除
(Apache2サーバを利用している場合はこのコマンドは使わない)
PowerShell上で

> netsh.exe interface portproxy delete v4tov4 listenport=80

〇ブート時にポートフォワーディング起動設定解除
(Apache2サーバを利用している場合はこのコマンドは使わない)
PowerShell上で

> sc.exe config iphlpsvc start=disabled

★ 少し前まで,Microsoftのwslのipアドレスの仕様で,PCが起動するたびに仮想側(Ubuntu)に新しいipアドレスが割り当てられていた。ipアドレス(上記の例では172.31.137.5)が毎回変化していた。そのため,PCの起動時に毎回Ubuntuのipアドレスの確認とポートフォワーディング設定作業が必要になっていた。(この問題はすでに解決されていいて,仮想側のipアドレスは固定になっている。)

4.次回以降のPC起動時について

次回以降のPC Vega起動時には,
(1) Vegaの外部向けのファイヤーウォールも設定どおりport80を開いている。
(2) Vegaからubuntuへのポートフォワーディングも起動中である。
の状態にある。
あとはubuntuを起動し,apache2をrootで起動すればubuntuはWebサーバとして機能する。

〇 apache2の起動

windows VegaにstartApache2.batを次の内容で作っておけば,このファイルを起動するだけでよい。
ただし,2行目はapache2とは無関係の便利コマンド。
これがないと,1行目はすぐに作業を終了するのでubuntuは誰も使用していないととらえ,自分を停止してしまう。
2行目はubuntuにある作業を継続的に行わせ,ubuntuが自動停止するのを阻んでいる。

wsl -d Ubuntu -u root service apache2 start
wsl --exec dbus-launch true


〇 apache2の停止

起動中のapache2を止めるだけなら,windows VegaにstopApache2.batを次の内容で作っておけば,このファイルを起動するだけでよい。

wsl -d Ubuntu -u root service apache2 stop


〇 apache2の停止+ubuntuの停止

起動中のapache2を止め,ubuntuも止めるなら,windows VegaにstopApache2exitUbuntu.batを次の内容で作っておけば,このファイルを起動するだけでよい。

wsl -d Ubuntu -u root service apache2 stop wsl --shutdown