호스트 시스템에서 게스트 VM에 연결하는 방법은 무엇입니까?


15

VM 웹 서버 설정이 있고 Apache를 설치하고 시작했습니다. VM에는 브리지 된 네트워크 인터페이스가 있으며 192.168.0.2를 사용하여 호스트에서 ping 할 수 있습니다.

그러나 호스트 컴퓨터의 브라우저에 동일한 IP 주소를 입력하면 VM에서 기본 아파치 페이지가 생성 될 것으로 예상되지만 대신 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

내가 생각하는 네트워크 활동 / 연결의 대략적인 그림.

                               여기에 이미지 설명을 입력하십시오


이만 표시되면 :::80Apache는 IPv6 연결 만 수신하는 것입니다. Listen지시 사항을 확인 해 보셨습니까 ?
Lekensteyn

Apache가 실제로 다른 서비스가 아닌 포트 80에서 수신 대기 중인지 확인 하려면 -p플래그를 추가하십시오 netstat. curl localhost손님으로부터 도망 칠 수 있습니까? 무엇을 grep -C3 -rni Listen /etc/httpd/보여줍니까?
Lekensteyn

이 지침이 효과가 있다면 스크린 샷에 액세스 할 수 있기 때문에 답변으로 작성하십시오. 이 질문은 상당한 금액으로 발생하며 솔루션이 정확하게 캡처되지 않았다고 생각합니다.
slm

답변:


14

문제 # 1-VM 네트워킹 유형

네트워킹에는 3 가지 모드가 있습니다.

  1. NAT
  2. 호스트 만
  3. 브리지

설정에 대한 세부 사항

각각을 언제 사용해야합니까?

  • # 1 : 다른 서버에있는 Facebook / 웹 앱 개발
  • # 2 : 자체 앱을 빌드하고 게스트 VM뿐만 아니라 VirtualBox 호스트에서 테스트하려는 경우
  • # 3 : 앱을 빌드하고 LAN의 다른 시스템에서 테스트하려는 경우

문제 # 2-방화벽 차단?

사용중인 배포판에 따라 방화벽이 웹 브라우저가 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가 수신 대기하는 것을 보았지만 때로는 하나의 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이 아파치가 설치 및 시작된 경우에도 호스트의 웹 브라우저에서 동일한 IP 주소를 얻을 수 없습니다. it worked!아파치 페이지를 참조하십시오.
oshirowanen

@oshirowanen-문제를 해결하려고 노력하면서 좌절하지 않는 것에 감사드립니다. 8-). Apache가 CentOS에서 실행 중인지 확인하십시오 /etc/init.d/httpd status.
slm

1
VM에서 방화벽을 중지했으며 이제 호스트 컴퓨터에서 웹 브라우저를 사용하여 VM의 URL에 액세스 할 때 기본 IP 페이지를 볼 수 있습니다 !!!
oshirowanen

1
@oshirowanen-WOOHOO! 전체 문제는 방화벽 일 뿐이므로 방화벽에 규칙을 추가하는 명령을 추가하겠습니다.이 명령을 사용하여 규칙을 영구적으로 만들 수도 있습니다 /sbin/service iptables save.
slm

예! CentOS를 최소한으로 설치했는데 방화벽이 기본적으로 비활성화되어 있다고 가정해서는 안됩니다 ... 솔직히 말해서 방화벽이 마음에 들지 않았습니다. 도와 주셔서 감사합니다.
oshirowanen

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.