質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.82%

VMゲストのwebサーバを自宅ルータの外に公開したい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 515

sage

score 1057

前提・実現したいこと

自宅ルータの内側のWindows10 PCにVirtualboxをインストールし、CentOSのゲストを
作成し、apacheをインストール、適当にwebページを作成し、ホストからVMゲストにブラウザでアクセスしてwebページが見れることは確認済。

これをルータの外部に公開したい。

VMゲストはNAT、host-only、bridgeの3つのnicを定義している。
ルータのport forwardでbridgeのnicを指定してTCPのport 80をVMゲストに転送するように設定したが外部から接続できない。
(厳密に言うと/var/log/httpd/access-logに外部からのアクセスが記録されている。しかしスマホからアクセスするとaccess-logにもerror-logにも記録がなく、スマホ側にはGateway Timeoutのメッセージが出る)

VMゲストはCentOS6とCentOS7の両方があり、どちらでもいいから公開したい。

発生している問題・エラーメッセージ

外部からルータのglobal ip addrをすると以下のメッセージがでて、接続できない。

[504] Gateway Timeout

該当のソースコード

ソースコード

試したこと

portが開いているかチェックするツールを使って外部からアクセスしたら80は開いていた。

ルータの内側の他PCからもVMのIP-addr指定でブラウズできることを確認した。

bridge以外の2つのnicをifdownでoffにし、bridgeのnicのみでもVMゲストからyum check-updateや、VMゲスト上のブラウザから外部ネットワークにアクセスできることを確認しました。

VMゲストでtcpdumpを使い、外部からのport80へのアクセスが届いていることまで確認できました。

補足情報(FW/ツールのバージョンなど)

VirtualBox: 6.0.6 (最新)
CentOS 6 (yumで最新にしている)
CentOS 7 (yumで最新にしている)
当初(質問時)はホスト上のNorton360がport 80へのアクセスを停止しており、VMゲストに通信が届いてなかったが、修正、届くようになった。
(VMゲスト上のtcpdumpでスマホからのアクセスを確認できた)

apache(hhtpd)やnicの定義中に同一セグメント内からしかアクセスを許可しないような指定があり、間違ってそれを指定してしまっているのではないかと疑っています。
httpd.confにそういう機能があるのは確認しましたが、理解できた範囲では指定していません。確認漏れがある可能性はあります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • over

    2019/04/22 12:30

    ・「Nortonの設定の件は解決済とかいたのに、まだNortonにこだわっているのはあなたではありませんか。」
    → 文章を追って読んでください。
    可能性を複数挙げています。その中でnortonの説明を求められたから、それに対しての回答をしています。こだわっているのではありません。可能性の一つとして挙げています。
    ところで、どこに「Nortonの設定の件は解決済」とあるのでしょう?

    ・「本当に関係があるというのならば論理的に説明してください。」
    →「WindowsFWを例に挙げると、ローカルネットやドメインネットワークからの80/tcpは許可しています。従って、nortonの設定に依るとしか言えません。」と言っています。ご記載頂いている内容から出来る限り論理的に述べています。

    ・「解決に結びつかない、質問に答えられないのならば他の人と同様、出てくる必要はありません。」
    → 後出しの情報もすべてエスパーして回答できなければコメントするなと?本気で言っています?
    コメントを一度でもしたら回答義務が発生すると思っているのでしょうか。

    キャンセル

  • sage

    2019/04/22 13:29

    話が発散しかけています。
    ホストのfwがどうやって影響するのですか。

    今、解決したいのは自スマホからVMゲスト(CentOS)のport 80に通信が到達しているのに何故httpdのaccess-logに出ないかという点です。error-logにも残っていません。
    一方で、外部からのアクセスがaccess-logに残っている。
    このあたりの矛盾をどう説明するのか、どう解決するのかという点です。

    キャンセル

  • over

    2019/04/22 13:42

    あなたを助けてくれる親切な方のご登場をお待ちください。

    キャンセル

回答 2

checkベストアンサー

0

私がわかる範囲でですが、影響する可能性がある設定などは以下だと思います。

  • ルータのFW、NAT(ポートフォワーディング設定をしているとのこと。解決済み)
  • ホストのFW(Norton360とのこと。解決済み?)
  • ゲストのFW(iptables, firewalld)
  • httpd.confでのアクセス制限
  • htaccessでのアクセス制限

今、解決したいのは自スマホからVMゲスト(CentOS)のport 80に通信が到達しているのに何故httpdのaccess-logに出ないかという点です。error-logにも残っていません。
一方で、外部からのアクセスがaccess-logに残っている。
このあたりの矛盾をどう説明するのか、どう解決するのかという点です。

apacheのエラーログもアクセスログもないのであればゲストのFWで止められているのではないかと思います。
外部からのアクセスがaccess-logに残っているというのは、正常に通信できたのでしょうか。access-logに残っているが正常に表示されなかったのであれば、戻りパケットがどこかで拒否されていないか確認してみてはどうでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/22 19:45

    httpdのacess-log、error-logを見ると
    (1) サブネット内の別PCからアクセスするとaccess-logにも残るし、実際にブラウザに表示される。
    (2) 誰かが外(例えば104.152.52.29)からアクセスしたのはaccess-logに残っているが、(第三者なので)webを見れたかどうかは分からない。
    (3) 自分で(スマホで)ルータの外からアクセスしようとすると、httpdが動作しているVM上のtcpdumpでport 80まではアクセスしてきているのは確認できるが、access-log、error-logには何も残らない(スマホ側はtimeout表示となる)。

    スマホでのアクセスのみを考えるとVM上のfirewallも疑わしいが、それなら何故104.152.52.29からだったらアクセスログが残るのかが説明できない。途中で設定を変えた時があり、その中のどれかだと外部からアクセスできた?
    (但し設定を変えた時には毎回スマホでアクセスを試みたはず)

    ということで、access-logにはログが残っていません(残っているのは他人のアクセス)。
    従って調査すべきは戻りパケットではなく、httpdへのパケットではないでしょうか。

    この場合、何をどうやって確認すれいばいいのでしょうか?

    iptablesでrejectした結果はどこかにログが残るのでしょうか? ちょっとやってみた(iptables -A INPUT -p tcp --dport 80 -j LOG)のですが、スマホからアクセスしても/var/log/messagesにはこれに関するログは何もありませんでした。

    キャンセル

  • 2019/04/22 20:09

    他の人のアクセスはログに残るのに、質問者さんがスマホからアクセスしたときはログが残らないのですね。
    そのような設定は普通しないので、iptablesが原因であることは考えにくいですが参考までにiptablesのログ出力先は/etc/syslog.confに記載されていると思います。
    軽く調べた感じなので明確にこうだとは言えませんが、apacheのアクセスログはレスポンスを返す際に書き込まれるようです。戻りパケットがきちんと行かないのでアクセスログが書き込まれていないのではないでしょうか。
    スマホはWifiに接続していたりしませんか?ゲストのブリッジ以外のインタフェースからパケットを戻そうとしてしまっていたりしませんかね?

    キャンセル

  • 2019/04/22 21:27

    apacheがアクセスログを返すのがレスポンスを返す際ならば、レスポンスが返っていないので、ログに残っていない
    理由は理解できます。

    スマホはwi-fi接続にするとルータの内側からの接続になってしまうので、そこはきちんと意識してアクセスしています。
    nicは、また3つある状態でテストしているので、どこから返っているのか分かりません。
    eth2(bridgeひとつ)だけにしてテストをやり直します。

    今、一番気にしているのはhttpd.confのServerNameの記述です。何度か書き換えており、
    現在は「ServerName :80」のみになっています。ここにdynamicdnsに登録しているホスト名を書いていた時があり
    そのときだけ(第三者が)外部からアクセスできたのでは? というものです。外部ip-addrを書いていた時もあります。

    ★★↓

    スマホからアクセスできました。

    やったことは2つ
    (1) nicをeth2(bridge)のみにし、natとhost-onlyはifdownで停止させた。
    (2) /etc/httpd/conf/httpd.confの2項目を変更
    変更前
    ServerName :80
    UseCVanonicalName Off
    変更後
    ServerName 192.168.120.24 :80
    UseCVanonicalName On

    この後、httpd restartをしてスマホからwi-fiはoffにして(ルータのグローバルip-addr指定で)
    アクセスしたらwebページが表示されました。

    もちろん、tcpdumpにも/var/log/httpd/access-logにもログが残っています。

    ★★↓

    この後、絞り込むためにeth0とeth1をifup してテストするとスマホへの応答がなくなりました。
    nicの問題だったようです。

    ありがとうございました。

    もう少し調べることがありそうですが、とりあえずの目的は達成できました。

    キャンセル

0

以下の2点の設定上の問題点によりアクセスできなかった。

  1. VirtualBoxと言えどwindowsアプリなので、ホスト上でport 80へのアクセスを制限していたら、ゲストへアクセスは到達しない。
    → ホスト上のNorton360でport 80へのアクセスを制限していた。これを解除したら外部からの見え方が変わった。
  2. VMゲスト上でbridge、host-only、NATとNICを3個も使用しており、想定外のNICから応答が返っていたらしい。
    このため、うまく通信ができなかった。
    → NICをbridgeの1個のみonlineにしたらきちんと応答が返るようになった。

外部からのアクセスログが見つかった時点で、テスト条件設定(動作確認)のやり直しが必要だった。
整理せずにいろいろとやりすぎていた。
ログに残っている以上、どれかの条件で外部からアクセスできたのは間違いないのだから、
やったことを整理し、ひとつひとつ、条件と結果を切り分けていけばよかった。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.82%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る