Как правильно сделать переадресацию портов с VirtualBox? - PullRequest
3 голосов
/ 14 октября 2011

У меня проблема с подключением к гостевой ОС в VirtualBox. Моя среда выглядит следующим образом:

  • Хост: MacOSX (Lion)
  • Гость: CentOS (5.7, 2.6.18-274.3.1.el5)
  • VirtualBox: 4.1.4 r74291 - Тип сетевого адаптера: NAT

В гостевой ОС я вижу, что httpd работает правильно, например:

$ ps aux | grep httpd
root      2571  0.0  3.5 258440  8824 ?        Ss   08:20   0:00 /usr/sbin/httpd
apache    2573  0.0  2.2 258440  5780 ?        S    08:20   0:00 /usr/sbin/httpd
apache    2574  0.0  2.0 258440  5184 ?        S    08:20   0:00 /usr/sbin/httpd
apache    2575  0.0  2.0 258440  5180 ?        S    08:20   0:00 /usr/sbin/httpd
apache    2576  0.0  2.0 258440  5180 ?        S    08:20   0:00 /usr/sbin/httpd
apache    2577  0.0  2.0 258440  5180 ?        S    08:20   0:00 /usr/sbin/httpd
apache    2578  0.0  2.0 258440  5180 ?        S    08:20   0:00 /usr/sbin/httpd
apache    2579  0.0  2.0 258440  5180 ?        S    08:20   0:00 /usr/sbin/httpd
apache    2580  0.0  2.0 258440  5180 ?        S    08:20   0:00 /usr/sbin/httpd
$ curl localhost
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
...

В операционной системе хоста я выполнил конфигурацию для переадресации портов следующим образом:

$ VBoxManage showvminfo CentOS_3 | grep "NIC 1"
NIC 1:           MAC: 080027B1FA87, Attachment: NAT, Cable connected: on, Trace: off (file: none), Type: Am79C973, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny
NIC 1 Settings:  MTU: 0, Socket (send: 64, receive: 64), TCP Window (send:64, receive: 64)
NIC 1 Rule(0):   name = http, protocol = tcp, host ip = , host port = 8003, guest ip = , guest port = 80
NIC 1 Rule(1):   name = ssh, protocol = tcp, host ip = , host port = 2203, guest ip = , guest port = 22

По мере поступления этой информации я пытаюсь выполнить переадресацию портов с 8003 до 80 и с 2203 до 22. Фактически, я могу установить ssh-соединение с гостевой ОС с помощью «ssh -p 2203 localhost». Однако когда я пытаюсь увидеть http://localhost:8003,, браузер говорит «Невозможно загрузить веб-страницу, поскольку сервер не отправил данные.»

Когда я пытаюсь "telnet localhost 8003" в операционной системе хоста кажется порт слушает, но есть В журнале доступа гостевой ОС не отображается журнал.

Что я должен сделать, чтобы решить эту проблему? Заранее спасибо!

(дополнение: 14 октября, 15:55)

$ netstat -nl | grep tcp | grep 127.0.0.1 # Host OS
tcp4       0      0  127.0.0.1.8003         127.0.0.1.64698        ESTABLISHED
tcp4       0      0  127.0.0.1.64698        127.0.0.1.8003         ESTABLISHED
tcp4       0      0  127.0.0.1.26164        127.0.0.1.53917        ESTABLISHED
tcp4       0      0  127.0.0.1.53917        127.0.0.1.26164        ESTABLISHED
tcp4       0      0  127.0.0.1.2203         127.0.0.1.53183        ESTABLISHED
tcp4       0      0  127.0.0.1.53183        127.0.0.1.2203         ESTABLISHED

$ netstat -nl | grep tcp # Guest OS
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:952                 0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0      0 :::80                       :::*                        LISTEN
tcp        0      0 :::22                       :::*                        LISTEN
tcp        0      0 :::443                      :::*                        LISTEN

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Кажется, что, как и mkj , у вас установлен брандмауэр.

попробуйте запустить (как root): yum install system-config-firewall-tui

запустите system-config-firewall-tui, выберите настройку и убедитесь, что установлен флажок «WWW (HTTP)».

0 голосов
/ 09 апреля 2015

Хотя старый вопрос, но это может кому-то пригодиться, так как я столкнулся с этой проблемой сегодня.Как уже упоминалось в mkj, проблема заключается в брандмауэре гостевой ОС (в моем случае Centos 6).Это разрешает соединение SSH (порт 22), но блокирует другие.У меня была проблема с доступом к серверу postgresql, работающему в гостевой ОС (на порту 5432) с хоста.Поэтому выполнение следующей команды iptables на гостевой ОС сработало:

 $ sudo iptables -I INPUT -p tcp -m tcp --dport 5432 -j ACCEPT

В вашем случае для сервера httpd, работающего на порту 80, вам, возможно, придется сделать следующее:

 $ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Я никогда не сталкивалсяэта проблема при запуске Ubuntu / Debian в качестве гостевой ОС, поэтому, вероятно, брандмауэр в них не настроен.

...