Як підключитися до гостя VM з хост-системи?


15

У мене налаштування веб-сервера VM, і я встановив і запустив Apache. VM має з'єднаний мережевий інтерфейс і може здійснювати пінг з хоста за допомогою 192.168.0.2.

Однак, якщо я введу ту саму IP-адресу в браузер на хост-машині, я очікував побачити сторінку apache за замовчуванням, згенеровану на 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

Приблизний малюнок того, що я думаю, виглядатиме мережева активність / зв’язок.

                               введіть тут опис зображення


Якщо ви бачите лише :::80, Apache прослуховує лише IPv6-з'єднання. Ви спробували перевірити свої Listenдирективи?
Лекенштейн

Спробуйте додати -pпрапор, щоб netstatпереконатися, що Apache насправді слухає на порту 80, а не якийсь інший сервіс. Ви можете бігти curl localhostвід гостя? Що grep -C3 -rni Listen /etc/httpd/показує?
Лекенштейн

Робіть мені послугу, якщо ці вказівки спрацюють, напишіть це як відповідь, оскільки у вас буде доступ до знімків екрана. Це питання викликає неабияку суму, я не вважаю, що його рішення було точно зафіксовано.
slm

Відповіді:


14

Випуск №1 - типи мереж VM

Існує 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 слухає, але іноді він неправильно налаштований так, що він прослуховує лише 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 від хоста, але я не можу потрапити на ту саму IP-адресу від веб-браузера на хості, навіть незважаючи на те, що в VM встановлений і запущений апарат, я повинен бачити it worked!сторінка апач.
oshirowanen

@oshirowanen - дякую за те, що не засмучуємось, коли ми намагаємось вирішити проблему 8-). Переконайтесь, що Apache працює на CentOS,, /etc/init.d/httpd statusповинен показувати, що працює.
slm

1
Я зупинив брандмауер на VM, і тепер я бачу IP-сторінку за замовчуванням при використанні веб-браузера на хост-машині для доступу до URL-адреси VM !!!
oshirowanen

1
@oshirowanen - WOOHOO! ОК , так що весь питання було тільки брандмауер, я додати команду , щоб додати правило в ваш брандмауер, ви можете також зробити його постійним ж / цю команду /sbin/service iptables save.
slm

Так! Я зробив мінімальну установку CentOS, і я не повинен був вважати, що брандмауер був відключений за замовчуванням ... Якщо чесно, брандмауер навіть не прийшов мені в голову. Дякуємо, що витратили свій час на допомогу.
oshirowanen

2

Ваша установка Apache, ймовірно, налаштована на прослуховування лише у localhost. Ви можете перевірити це, запустивши свого гостя:

$ 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.