VMのUbuntuにWebサーバを立てる
概要
- 色々苦戦したのでメモ
やったこと
- 2.VM内のブラウザで localhost:8181 → 当然見られる
- 3.ホストPCのWindowsのブラウザで、VMのプライベートIPアドレスを指定して192.168.19.137:8181を見る → これも見られる
- 4.しかしiphoneからはアクセスできない
- 5.ルータのネットワーク外からポート8181のアクセスが来た時に、VMのWebサーバに行くようにポートフォワード(ポート開放)する
- 6.ルータがポートフォワードできるIPアドレスの範囲がVMのIPアドレスと違うー
- 7.なので、VMのIPアドレスをポートフォワードできるものに変更
- 8.ファイアウォールの設定も変更しよう ⇒ ufwで8181のポートをallowに
- 9.まだつながらない → 面倒だから 自宅ルータから直接VMをブリッジで接続しよう
- 10.出来た iphoneやノートPCのブラウザからUbuntu内のファイルの情報が見られた
- 11.グローバルIPアドレスを設定して見られないか確認
ここまで2,3日
手順
1.VM上のubuntuで pythonで簡易的にweb serverを立ち上げる ポート8181
python3の入っている環境で以下の通り、Webサーバ立ち上げる
ポートは8181
$ python3 -m http.server --cgi 8181 Serving HTTP on 0.0.0.0 port 8181 (http://0.0.0.0:8181/) ...
2.VM内のブラウザで localhost:8181 → 当然見られる
3.ホストPCのWindowsのブラウザで、VMのプライベートIPアドレスを指定して192.168.19.137:8181を見る → これも見られる
Windows側のブラウザでは上のlocalhostの部分をVMのIPアドレスにしたものを表示 - VMのIPアドレスはifconfigで取得した(IPV4のもの)
4.しかしiphoneからはアクセスできない
みられない
会社PCからも見られない
pingもtracerouteもVMのアドレスに対してやってもtimeoutする(ホストPCであるWindowsのIPアドレスに対しては問題なし)
$ ping 192.168.19.137 PING 192.168.19.137 (192.168.19.137): 56 data bytes ping: sendto: Host is down ping: sendto: Host is down Request timeout for icmp_seq 0 ping: sendto: Host is down Request timeout for icmp_seq 1 ping: sendto: Host is down Request timeout for icmp_seq 2 $ traceroute -v 192.168.19.137 traceroute to 192.168.19.137 (192.168.19.137), 64 hops max, 52 byte packets 1 * *^C
なぜつながらないのか?
あとからもう少しわかることだったが、ここで繋がらなかった理由はこの時点のVMのネットワークの設定がNATになっていて、ホストPC側の設定が正しくなかったからかもしれない
5.ルータのネットワーク外からポート8181のアクセスが来た時に、VMのWebサーバに行くようにポートフォワード(ポート開放)する
家のルータはソフトバンク光の 光BBユニット(EWMTA2.3)だった
参考
ルータの設定
そうしたら以下のように言われた
転送先IPアドレスに誤りがあります。IPアドレスの範囲内で半角数字で入力してください
6.ルータがポートフォワードできるIPアドレスの範囲がVMのIPアドレスと違うー
以下によると、転送先のIPアドレスの範囲が限られているらしく、VMのアドレスと異なるので転送できない・・・
ルータの設定
7.なので、VMのIPアドレスをポートフォワードできるものに変更
以下の方法でVMのIPアドレスを、ポート開放できる範囲に変える
実践初級ITブログ VMwareのUbuntuを固定IPにする
もともとのUbuntu IPアドレス 192.168.19.137 ブロードキャストアドレス 192.168.19.255 サブネットマスク 255.255.255.0 デフォルトルート 192.168.19.2 第一DNS 192.168.19.2 VMのUbuntuのIPを以下に変更 192.168.3.11
変える前
変えた後
ifconfigなどでIPアドレスが変わっていることを確認 再度ポート転送を設定すると成功
8.ファイアウォールの設定も変更しよう ⇒ ufwで8181のポートをallowに
utfいじる
- ここでallowにしたポート以外はファイアウォールが有効なので、ホストOSからは接続できない
第76回 Ubuntuのソフトウェアファイアウォール:UFWの利用(1):Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
$ sudo ufw status 状態: 非アクティブ $ sudo ufw enable ファイアウォールはアクティブかつシステムの起動時に有効化されます。 $ sudo ufw status 状態: アクティブ $ $ sudo ufw default DENY デフォルトの incoming ポリシーは 'deny' に変更しました (適用したい内容に基づいて必ずルールを更新してください) $ sudo ufw allow 8181 ルールを追加しました ルールを追加しました (v6) $ sudo ufw status 状態: アクティブ To Action From -- ------ ---- 8181 ALLOW Anywhere 8181 (v6) ALLOW Anywhere (v6) $ sudo ufw allow http ルールを追加しました ルールを追加しました (v6)
9.まだつながらない → 面倒だから 自宅ルータから直接VMをブリッジで接続しよう
- ブリッジについて参考
以下の方法でブリッジに変更した - VMware上のLinux Webサーバに外部からアクセスできるようにする | あみだがみねのもろもろ備忘録
最初はNATに設定されていた
ブリッジに変更
よくよく考えると、VMのネットワークをブリッジ接続にしたので、ゲートウェイとDNS サーバーのIPアドレスはルータのIPアドレスが正しいはず なのに、それらがVMのIPアドレスを変える前のままになっている 以下は間違い
以下が正しい
10.出来た ! iphoneやノートPCのブラウザからUbuntu内のファイルの情報が見られた
11.グローバルIPアドレスを設定して見られないか確認
上の接続はあくまで同一ネットワーク内からVMのプライベートIPアドレス 192.168.3.11 に繋いだだけだった
自分のグローバルIPアドレスが何か? - ルータの設定が書かれた以下のWAN側IPアドレスでも見られる - http://172.16.255.254/settei.html
- 以下のサイトでも考えられる
LAN外のネットワークからルータのグローバルIPアドレスを設定して、 グローバルIP:8181で外からも接続できるか確認
- Ubuntu側でWebサーバを立てる
$python3 -m http.server --cgi 8181 (git)-[master] Serving HTTP on 0.0.0.0 port 8181 (http://0.0.0.0:8181/) ...
ネットワーク外からアクセスする
図で書くとこんな感じだと思う(間違っていないはず・・)