ホストシステムからゲストVMに接続する方法


15

VM Webサーバーのセットアップがあり、Apacheをインストールして起動しました。VMにはブリッジネットワークインターフェースがあり、192.168.0.2を使用してホストからpingできます。

ただし、ホストマシンのブラウザに同じIPアドレスを入力すると、VMで生成されたデフォルトのApacheページが表示されるはずでしcan't connect to 192.168.0.2たが、代わりにホストマシンのブラウザが表示されます。

私は明らかに何かを見逃しました。誰が私が見逃したか間違ったことを知っていますか?

VMからの出力 netstat -tnlp

tcp     0     0 0.0.0.0:22        0.0.0.0:*     LISTEN     950/sshd
tcp     0     0 127.0.0.1:25      0.0.0.0:*     LISTEN    1026/master
tcp     0     0 :::22                  :::*     LISTEN     904/sshd
tcp     0     0 ::1:25                 :::*     LISTEN     980/master

ネットワークアクティビティ/接続性がどのように見えるかについて、私が考えていることの概略図。

                               ここに画像の説明を入力してください


あなただけ表示された場合:::80、その後、ApacheはIPv6のみの接続を待機しています。Listenディレクティブを確認しようとしましたか?
Lekensteyn

-pフラグを追加して、netstatApacheが実際にポート80でリッスンしていることを確認し、他のサービスではないことを確認してください。curl localhostゲストから走れますか?何がgrep -C3 -rni Listen /etc/httpd/表示されますか?
Lekensteyn

これらの指示が機能する場合は、スクリーンショットにアクセスできるので、回答として書き留めてください。この質問はかなりの量で発生しますが、その解決策が正確に把握されているとは思いません。
slm

回答:


14

問題#1-VMネットワークの種類

ネットワークには3つのモードがあります。

  1. NAT
  2. ホストのみ
  3. ブリッジド

設定の詳細

それぞれをいつ使用するか?

  • #1:他のサーバー上にあるFacebook / Webアプリの開発用
  • #2:独自のアプリを構築して、VirtualVMホスト(ゲストVMだけでなく)からテストする場合
  • #3:アプリを構築して、LAN上の他のシステムからテストする場合

問題#2-ファイアウォールのブロック?

使用しているディストリビューションによっては、ファイアウォールがWebブラウザーからApacheインスタンスへのアクセスをブロックしている可能性があります。これは、システムにpingできるが、Apacheがリッスンしているポートであるポート80を介してアクセスできない場合に意味があります。

一時的に無効にする

CentOSでは、このコマンドを使用して無効にします。

$ /etc/init.d/iptables stop

Apacheがリッスンしていることを確認します

このポートでリッスンしていることも確認できます。

$ netstat -antp | grep :80 | head -1 | column -t
tcp  0  0  :::80  :::*  LISTEN  3790/httpd

ファイアウォールがオフであることを確認

ファイアウォールが開いていることを確認できます。

$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination      

これで問題が解決した場合、TCPポート80経由のトラフィックを許可するルールを永続的に追加できます。

TCPポート80のルールの追加

$ /etc/init.d/iptables restart
$ iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ /etc/init.d/iptables save

注:これにより、再起動間でルールが保持されます。

ファイアウォールはTCPポート80を受け入れています

ポート80が開いているシステムは次のようになります。

$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:8834 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

問題#3-Apacheリスニング?

上記の問題では、Apacheがリッスンしていることを確認しましたが、1つのIPアドレスのみをリッスンするように、または別のネットワークインターフェイスをリッスンするように設定が間違っている場合がありました。このコマンドnetstatは、Apache構成ファイルを確認するだけでなく、これを再確認するために使用できます。

$ netstat -anpt | grep :80 | column -t
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  1750/httpd

これは、Apacheがすべてのインターフェイス(IP 0.0.0.0)でリッスンしていることを示しています。

@ Lekensteynのこの特定の問題を詳細にカバーする答えをここで繰り返しません。

参照資料


今、私は完全に混乱しています。既にVMをブリッジモードにしているので、ホストからVMにpingを実行できますが、VMにApacheがインストールおよび起動されていても、ホストのWebブラウザーから同じIPアドレスにアクセスできません。it worked!Apacheのページ。
oshirowanen 14年

@oshirowanen-問題を解決しようとしてもイライラしないでくれてありがとう8-)。ApacheがCentOSで実行されていることを確認してください/etc/init.d/httpd status
slm

1
VMのファイアウォールを停止し、ホストマシンのWebブラウザを使用してVMのURLにアクセスすると、デフォルトのIPページが表示されるようになりました!!!
oshirowanen

1
@oshirowanen-WOOOOO!OKなので、問題はすべてファイアウォールのみでした。ルールをファイアウォールに追加するコマンドを追加します/sbin/service iptables save。このコマンドで永続化することもできます。
slm

はい!CentOSの最小インストールを行ったのですが、ファイアウォールがデフォルトで無効になっていると想定すべきではありませんでした...正直なところ、ファイアウォールは思いもしませんでした。お世話になりましてありがとうございます。
オシロワネン14年

2

Apacheインストールは、ローカルホストのみでリッスンするように構成されている可能性があります。ゲストで実行することで確認できます:

$ netstat -tnl | grep :80
Proto Recv-Q Send-Q Local Address      Foreign Address  State
tcp        0      0 0.0.0.0:80         0.0.0.0:*        LISTEN
tcp6       0      0 :::80              :::*             LISTEN

の場合0.0.0.0:80、すべてのインターフェイスでリッスンします。あなたの場合、127.0.0.1:80代わりに期待します。これを解決するには、Apacheの設定(のどこか/etc/httpd/conf/)を編集して変更します:

Listen 127.0.0.1:80

に:

Listen 80

使用nmapして、マシンで利用可能なサービスを確認することもできます。次のようになります。

$ nmap 192.168.0.2

Starting Nmap 6.40 ( http://nmap.org ) at 2014-01-11 15:22 CET
Nmap scan report for localhost (192.168.0.2)
Host is up (0.0036s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.