1

Я хочу поддерживать подключение к гостю на привилегированных портах, таких как порт 80, при использовании Vagrant с VirtualBox, но, похоже, это не работает. Каков наилучший вариант, как справиться с этим?

Я использую Vagrant с Virtualbox на моем Mac и у меня есть гость CentOS 7. Внутри гостя я экспериментирую с Docker, и у меня работает несколько разных контейнеров.

В моем Vagrantfile я установил минимальные правила переадресации портов, и они правильно создаются в VirtualBox vagrant.

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  config.vm.network "forwarded_port", guest: 8080, host: 8080
  config.vm.network "forwarded_port", guest: 80, host: 8081
  config.vm.network "forwarded_port", guest: 3306, host: 3306

Из Virtualbox все настроено как и ожидалось (сеть Nat, правила пересылки)

Конфигурация сети VirtualBox

Правила переадресации портов

Когда я запускаю lsof на macOS, я вижу это, которое выглядит и работает как ожидалось:

VBoxHeadl 1265 david   15u  IPv4 0x54ccbd2a67321437      0t0  TCP localhost:2222 (LISTEN)
VBoxHeadl 1265 david   16u  IPv4 0x54ccbd2a602a3b3f      0t0  TCP *:3306 (LISTEN)
VBoxHeadl 1265 david   17u  IPv4 0x54ccbd2a672ad627      0t0  TCP *:8080 (LISTEN)
VBoxHeadl 1265 david   18u  IPv4 0x54ccbd2a6539fd2f      0t0  TCP *:8081 (LISTEN)

Эта проблема

Если я пытаюсь переадресовать привилегированный порт (в данном случае:80), переадресация портов не работает. Процесс прослушивания OSX отсутствует:80.

Внутри виртуальной машины я могу видеть страницу на работающем веб-сервере, и на самом деле ничто не должно отличаться от гостевой виртуальной машины.

Руководство Virtualbox говорит, что это не должно работать?

В разделе «Руководство по виртуальным коробкам NAT» есть раздел, озаглавленный 6.3.3.Ограничения NAT

Переадресация портов хоста <1024 невозможна: на хостах на основе Unix (например, Linux, Solaris, Mac OS X) невозможно привязать порты ниже 1024 из приложений, которые не запускаются пользователем root. В результате, если вы попытаетесь настроить такую переадресацию портов, ВМ откажется запускаться.

Таким образом, возможно, это говорит о том, что это не должно работать, однако неверно, что виртуальная машина не запустится. В моем случае он работает нормально, что заставляет меня задаться вопросом, говорит ли руководство о запуске операционной системы для виртуальной машины или гостевой ОС.

Это причина того, что Virtualbox с NAT и переадресация портов не запускает прослушиватель для порта 80?

Кажется, в Vagrant появилось сообщение, которого я раньше не видел:

==> default: You are trying to forward to privileged ports (ports <= 1024). Most
==> default: operating systems restrict this to only privileged process (typically
==> default: processes running as an administrative user). This is a warning in case
==> default: the port forwarding doesn't work. If any problems occur, please try a
==> default: port higher than 1024.

Так что это, похоже, устраняет любую путаницу.


Заключение

Частная сеть или мостовая сеть являются жизнеспособными решениями, позволяющими мне использовать обычные гостевые порты, даже если они привилегированы (<1024) на хосте.

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

Вот необходимая конфигурация Vagrantfile:

# Create a private network, which allows host-only access to the machine   
# using a specific IP.   
config.vm.network "private_network", ip: "192.168.20.20"

Это также облегчает добавление одной или нескольких записей в файл Mac /etc /hosts для гостя, обеспечивая удобство.

1 ответ1

1

Я думаю, что лучший вариант зависит от всех вещей, которые вы пытаетесь сделать. Для серверных сред, содержащих VirtualBox, я склонен запускать все свои виртуальные машины с мостовым адаптером, чтобы у всех них были IP-адреса в локальной сети. В этом случае нет проблем с привилегированными портами. Кроме того, миграция виртуальных машин на новый компьютер достаточно проста, поскольку все виртуальные машины в кластере уже доступны всем другим виртуальным машинам в кластере.

Иногда я запускаю удаленный туннель через ssh , но это происходит реже. В тех случаях, когда это полезно, это временно выставить виртуальную машину на моем компьютере для внешнего мира на общедоступном веб-сервере без необходимости подключать мой компьютер непосредственно к Интернету.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .