Ubuntu に Apacheサーバーへのアクセスを広げる 20230215
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アドレスアクセス
Ubuntuが動作中のPC,Vegaで内部のipアドレスを確認する。 (1)PCのipアドレスの確認
powershellでの作業
>ipconfig
自PC(ホストPC)のipアドレスは192.168.1.18であることがわかった。これは,内部的には仮想Windowsマシンの外向けipアドレスである。
:
IPv4 address 192.168.1.18
:
vEthernet (WSL)
:
IPv4 address 172.31.208.16
vEthernetのipアドレス記述172.31.208.16もあるがこれは仮想Windowsマシンの仮想LAN側のipアドレスである。
(vEthernetのipアドレス記述は,WSLが起動中のみ表示される。)
(2)Ubuntuのipアドレスの確認
Ubuntuでの作業> ip a show dev eth0
Ubuntuの仮想LAN向けのipアドレスが172.31.208.28であることがわかった。
6: eth0:mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:bb:18:85 brd ff:ff:ff:ff:ff:ff
inet 172.31.208.28/20 brd 172.31.223.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:febb:1885/64 scope link
valid_lft forever preferred_lft forever
ここまで判ったら,Vegaのブラウザでhttp://localhost/は,http://172.31.208.28/でもアクセスできることがわかる。
3.他のPCのブラウザからアクセス
他のPC(ここではAltair)のブラウザからアクセスしたい。
AltairからVegaへのHTTPアクセスはVegaのWindowsマシンに対して行われるため,WindowsマシンからUbuntuに転送されなければならない。(ポートフォワーディング)
そのためにはPC,Vega上で次の2つの作業が必要になる。3.1 VegaのファイアウォールでHTTPのアクセス許可
- VegaのファイアウォールでHTTPのアクセス許可
- VegaのWindowsマシンのipアドレスからWSLの仮想ipアドレスへのポートフォワーディング
3.2 ポートフォワーディング
- Vega上で「すべてのアプリ から windowsセキュリティ」を起動する
- 「ファイアウォールとネットワークの保護」をクリックする
- 「詳細設定」をクリックする。(下のほうにある)
- 「セキュリティが強化されたWindowsDefenderファイアウォール」が起動する
- ウィンドウ左側にある「受信の規則」を選択する
- 右側にある「新しい規則」を選択する
- 「ポート」を選ぶ
- 「TCP」 「特定のローカルポート 80」に設定する
- 「接続を許可する」に設定する
- この規則をいつ適用するか とりあえず プライベートのみにする
- この規則に名前を付ける 「HTTP」
ファイアウォールでのポート80への許可は,解除の作業をするまで有効である。
以上の作業が終了すると,
- ポートフォワードの設定
ホストPC(192.168.1.18)上のポート 80 でリッスンし,
それを IPアドレス172.31.208.28 の WSLのポート 80 に接続するポートフォワーディング設定をする
(ポート80はHTTP)
PowerShell上で
> netsh.exe interface portproxy add v4tov4 listenport=80 connectaddress=172.31.208.28- ポートフォワーディング設定の確認
PowerShell上で
> netsh.exe interface portproxy show v4tov4 ipv4 をリッスンする: ipv4 に接続する: Address Port Address Port --------------- ---------- --------------- ---------- * 80 172.31.208.28 80- ブート時にポートフォワーディング起動設定
PowerShell上で
> sc.exe config iphlpsvc start=auto
この設定は1回行うと以降は有効になる- ポートフォワーディングの動作開始
PowerShell上で
> sc.exe start iphlpsvc
すでに動作中の場合は,その旨注意される。
apache2が動作しているPC以外のPCのブラウザからのアクセス
http://192.168.1.18
が可能になる。
apacheが動作しているPCのブラウザからも,アクセス
http://192.168.1.18
が可能になる。
〇ポートフォワーディング設定の解除
Apache2サーバを利用している場合はこのコマンドは使わない
PowerShell上で
> netsh.exe interface portproxy delete v4tov4 listenport=80
〇ブート時にポートフォワーディング起動設定解除
Apache2サーバを利用している場合はこのコマンドは使わない
PowerShell上で
> sc.exe config iphlpsvc start=disabled
★ Microsoftのwslのipアドレスの仕様で,PCが起動するたびに仮想側のipアドレスが変化してしまうので,PCの起動時に毎回ipアドレスの確認とポートフォワーディング設定作業が必要になる。(いずれは対処されると思われる。)
→対処方法はある。次の項目「4」参照
4.WSLのipアドレス問題(起動ごとに変わってしまう)の解決方法
外部PCからHTTPアクセス出来るようにするポートフォワーディングであるが,ApacheサーバPCが再起動するたびにWSLのipアドレスが変わってしまう。
この問題を解決するために。classAのipアドレスを固定(追加)で割りつけてしまうアイディアが公開されている。
https://www.kemasoft.net/?vm/wsl2%A4%CB%B8%C7%C4%EAIP%A4%C7ssh-server
これはSSH接続(port22)の話なので,参考にさせていただいて,HTTP接続(port80)の設定にすればよい。
次の内容のファイルxxxxxx.cmdを作って,利用時に動かす。
Ubuntuを立ち上げて固定アドレスを与え,apache2を立ち上げて,Windowsにも仮想側固定アドレスを与え,ポートフォワーディング設定をしてくれる。
ただし,次の2点に注意
- 3行目を利用中のubuntuディストリビューション名に書き換える必要がある。
set WSL_DISTRIBUTION=Ubuntu → set WSL_DISTRIBUTION=[インストールしたubuntuディストリビューション名] (PowerShellで[ wsl -l -v ]を実行して確認,Ubuntu-22.04のような名前になっているかもしれない)- このコマンドはPC起動後,1回だけ実行すればよい。2回目以降では,すでに動作中といった意味のエラーメッセージが表示されるが問題ない。
その結果次のような構成になる。