Jak połączyć się z maszyną wirtualną gościa z systemu hosta?

15

Mam konfigurację serwera VM, zainstalowałem i uruchomiłem Apache. Maszyna wirtualna ma zmostkowany interfejs sieciowy i może być pingowana z hosta za pomocą 192.168.0.2.

Jednak jeśli wpisuję ten sam adres IP w przeglądarce na komputerze hosta, spodziewałem się, że zobaczysz domyślną stronę apache wygenerowaną na maszynie wirtualnej, ale zamiast tego dostanę can't connect to 192.168.0.2przeglądarkę komputera hosta.

Wyraźnie coś przeoczyłem. Czy ktoś wie, co przeoczyłem lub zrobiłem źle?

Dane wyjściowe z maszyny wirtualnej 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

Szorstki rysunek tego, co według mnie wyglądałaby aktywność / łączność sieciowa.

                               wprowadź opis zdjęcia tutaj

oshirowanen
źródło
Jeśli widzisz tylko :::80, Apache nasłuchuje tylko połączeń IPv6. Próbowałeś już sprawdzić swoje Listendyrektywy?
Lekensteyn
Spróbuj dodać -pflagę, aby netstatsprawdzić, czy Apache nasłuchuje na porcie 80, a nie na innych usługach. Czy potrafisz uciec curl localhostod gościa? Co grep -C3 -rni Listen /etc/httpd/pokazuje
Lekensteyn
Wyświadcz mi przysługę, jeśli te wskazówki działają, napisz to jako odpowiedź, ponieważ będziesz mieć dostęp do zrzutów ekranu. To pytanie pojawia się dość często, nie sądzę, aby jego rozwiązanie zostało dokładnie uchwycone.
slm

Odpowiedzi:

14

Problem nr 1 - Typy sieci maszyn wirtualnych

Istnieją 3 tryby sieci:

  1. NAT
  2. Tylko host
  3. Bridged

Szczegółowe informacje na temat ich konfigurowania

Kiedy używać każdego z nich?

  • # 1 : Do tworzenia aplikacji Facebook / web, które znajdują się na innych serwerach
  • # 2 : Jeśli chcesz zbudować własną aplikację i przetestować ją z hosta VirtualBox (nie tylko maszyny wirtualnej gościa)
  • # 3 : Jeśli chcesz zbudować aplikację i przetestować ją z innych systemów w sieci LAN

Problem nr 2 - blokowanie zapory ogniowej?

W zależności od używanej dystrybucji zapora może blokować dostęp do przeglądarki Apache przez przeglądarkę internetową. Ma to sens, biorąc pod uwagę, że możesz pingować system, ale nie możesz uzyskać do niego dostępu przez port 80, który jest portem, na którym nasłuchuje Apache.

tymczasowo je wyłącza

W CentOS używasz tego polecenia, aby je wyłączyć.

$ /etc/init.d/iptables stop

sprawdź, czy Apache nasłuchuje

Możesz także potwierdzić, że nasłuchuje na tym porcie.

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

potwierdź, że zapora jest wyłączona

Zaporę ogniową można potwierdzić, że jest szeroko otwarta.

$ 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      

Jeśli to rozwiąże problem, możesz na stałe dodać regułę zezwalającą na ruch przez port TCP 80.

dodanie reguły dla portu TCP 80

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

UWAGA: Dzięki temu reguła będzie się utrzymywać między restartami.

zapora akceptuje port TCP 80

System z otwartym portem 80 wyglądałby mniej więcej tak:

$ 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         

Problem nr 3 - Słuchanie Apache?

W powyższym numerze widzieliśmy, że Apache nasłuchuje, ale czasami jest źle skonfigurowany, tak że nasłuchuje tylko na jednym adresie IP lub że nasłuchuje na innym interfejsie sieciowym. Polecenia netstatmożna użyć do podwójnego sprawdzenia tego, a także do przeglądania plików konfiguracyjnych Apache.

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

To pokazuje, że Apache nasłuchuje na wszystkich interfejsach (IP 0.0.0.0).

Nie będę powtarzał odpowiedzi @ Lekensteyn , która omawia ten konkretny problem bardziej szczegółowo tutaj.

Bibliografia

slm
źródło
teraz jestem całkowicie zdezorientowany. Mam już maszynę wirtualną w trybie pomostowym, mogę pingować maszynę wirtualną z hosta, ale nie mogę dostać się do tego samego adresu IP z przeglądarki internetowej na hoście, mimo że maszyna wirtualna ma zainstalowany i uruchomiony apache, powinienem zobaczyć it worked!strona apache.
oshirowanen
@oshirowanen - dziękuję, że nie denerwujesz się, gdy próbujemy rozwiązać problem 8-). Upewnij się, że Apache działa na CentOS /etc/init.d/httpd status, powinien się wyświetlać.
slm
1
Zatrzymałem zaporę na maszynie wirtualnej i teraz widzę domyślną stronę IP podczas korzystania z przeglądarki internetowej na komputerze hosta w celu uzyskania dostępu do adresu URL maszyny wirtualnej !!!
oshirowanen
1
@oshirowanen - WOOHOO! OK, więc cała sprawa była tylko firewall, dodam polecenie, aby dodać regułę zapory, można również zrobić to na stałe w / tym poleceniu /sbin/service iptables save.
slm
Tak! Zrobiłem minimalną instalację CentOS i nie powinienem był zakładać, że zapora jest domyślnie wyłączona ... Szczerze mówiąc, zapora nawet nie przyszła mi do głowy. Dziękujemy za poświęcenie czasu na pomoc.
oshirowanen
2

Twoja instalacja Apache jest prawdopodobnie skonfigurowana do nasłuchiwania tylko na localhost. Możesz to sprawdzić, uruchamiając gościa:

$ 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

Jeśli to mówi 0.0.0.0:80, nasłuchuje na wszystkich interfejsach. W twoim przypadku oczekiwałbym 127.0.0.1:80zamiast tego. Aby rozwiązać ten problem, edytuj konfigurację Apache (gdzieś w /etc/httpd/conf/) i zmień:

Listen 127.0.0.1:80

do:

Listen 80

Możesz także użyć nmapdo weryfikacji dostępnych usług na swoim komputerze. Powinno to wyglądać następująco:

$ 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
Lekensteyn
źródło
2

W CentOS 7 firewalld zastąpił iptables jako domyślną zaporę ogniową.

Musiałem użyć

systemctl stop firewalld

aby wstrzymać zaporę ogniową w celu przetestowania połączenia z hosta do maszyny Wirtualnej CentOS.

Zobacz więcej tutaj: /programming/24756240/how-can-i-use-iptables-on-centos-7

świstak 1333
źródło