Как подключиться к гостевой виртуальной машине с хост-системы?


15

У меня есть настройка веб-сервера VM, и я установил и запустил Apache. Виртуальная машина имеет мостовой сетевой интерфейс и может отправлять эхо-запросы с хоста, используя 192.168.0.2.

Однако, если я введу тот же IP-адрес в браузер на хост-машине, я ожидал увидеть страницу Apache по умолчанию, сгенерированную на ВМ, но вместо этого я попал can't connect to 192.168.0.2в браузер хост-машин.

Я явно что-то упустил. Кто-нибудь знает, что я пропустил или сделал неправильно?

Выход из ВМ 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директивы?
Лекенштейн

Попробуйте добавить -pфлаг, чтобы netstatубедиться, что ваш Apache действительно прослушивает порт 80, а не какой-либо другой сервис. Вы можете убежать curl localhostот гостя? Что grep -C3 -rni Listen /etc/httpd/показывает?
Лекенштейн

Сделайте одолжение, если эти указания сработают, запишите это как ответ, так как у вас будет доступ к скриншотам. Этот вопрос стоит немало, я не верю, что его решение было точно найдено.
СЛМ

Ответы:


14

Проблема № 1 - Типы сетей виртуальных машин

Есть 3 режима работы в сети:

  1. NAT
  2. Только хост
  3. Мостовой

Подробности по их настройке

Когда использовать каждый?

  • # 1 : Для разработки Facebook / веб-приложений, которые находятся на других серверах
  • # 2 : Если вы хотите создать собственное приложение и протестировать его с хоста VirtualBox (а не только с гостевой виртуальной машины)
  • № 3 : Если вы хотите собрать приложение и протестировать его из других систем в локальной сети

Проблема № 2 - блокировка брандмауэра?

В зависимости от того, какой дистрибутив вы используете, брандмауэр может блокировать ваш веб-браузер от доступа к вашему экземпляру Apache. Это имело бы смысл, учитывая, что вы можете пропинговать систему, но не получать к ней доступ через порт 80, который является портом, который прослушивает Apache.

временно отключить его

В 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 прослушивает, но иногда он неправильно настроен, поэтому прослушивает только один 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 , который более подробно описывает этот конкретный вопрос.

Ссылки


Теперь я полностью сбит с толку. У меня уже есть виртуальная машина в мостовом режиме, я могу пропинговать виртуальную машину с хоста, но не могу получить тот же IP-адрес из веб-браузера на хосте, даже если на виртуальной машине установлен и запущен apache, я должен увидеть it worked!страница апач.
oshirowanen

@oshirowanen - спасибо, что не расстроились, поскольку мы пытаемся решить проблему 8-). Убедитесь , что Apache работает на CentOS, /etc/init.d/httpd statusдолжны показать работу.
SLM

1
Я остановил брандмауэр на виртуальной машине и теперь могу видеть IP-страницу по умолчанию при использовании веб-браузера на хост-компьютере для доступа к URL-адресу виртуальной машины !!!
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

2

В CentOS 7 firewalld заменил iptables в качестве брандмауэра по умолчанию.

Я должен был использовать

systemctl stop firewalld

приостановить брандмауэр для проверки соединения с хостом на CentOS VM.

Смотрите больше здесь: /programming/24756240/how-can-i-use-iptables-on-centos-7

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.