Рейтинг:1

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

флаг in

У меня есть хост-сервер с нуля с несколькими гостевыми виртуальными машинами, созданными с помощью QEMU / KVM с использованием виртуальной сети «по умолчанию»: параметр NAT. Доступен только один публичный IP.

Для лучшей иллюстрации:

  • Хост-сервер BM (Ubuntu), IP 89.185.xx.xx

  • Гостевой сервер ВМ (Ubuntu) №1, IP 192.168.122.101

    Гостевой сервер ВМ (Ubuntu) №2, IP 192.168.122.102

    Гостевой сервер ВМ (Ubuntu) №3, IP 192.168.122.103

    ...

Теперь я хотел бы запустить одно и то же приложение, используя разные порты на каждой виртуальной машине, и иметь возможность подключаться к каждому экземпляру извне через один и тот же общедоступный IP-адрес. Например.:

  • 89.185.хх.хх:30334

  • 89.185.хх.хх:30335

  • 89.185.хх.хх:30336

    ...

Аналогичная настройка, например запуск приложения в нескольких контейнерах докеров. Как я могу настроить это, пожалуйста?

djdomi avatar
флаг za
nginx в качестве обратного прокси для любого типа. вот как я его использую
флаг us
Обратный прокси для HTTP/HTTPS и перенаправление портов для других целей.
Рейтинг:3
флаг it

Взято из https://www.systutorials.com/port-forwarding-using-iptables/

для переадресации порта с публичного IP на локальный для ВМ1:

# iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 30334 -j DNAT --to 192.168.122.101:30334
# iptables -I FORWARD 1 -p tcp -d 192.168.122.101 --dport 30334 -j ПРИНЯТЬ 

В этом примере предполагается, что и локальный, и удаленный порт 30334 и имя публичного интерфейса eth0.

Curu avatar
флаг in
Спасибо за ответ! но не могу заставить его работать (заранее должен извиниться, так как у меня нет опыта работы с ИТ, поэтому, возможно, некоторые хромые ошибки упускаются из виду) Сначала я попробовал это с ssh: `$ sudo iptables -A PREROUTING -t nat -i eno2 -p tcp --dport 2222 -j DNAT --to 192.168.122.101:2222` `$ sudo iptables -A FORWARD -p tcp -d 192.168.122.101 --dport 2222 -j ПРИНЯТЬ` (eno2 — сетевой интерфейс на хост-сервере BM, подключенный к общедоступному IP-адресу 89.185.xx.xx)
Curu avatar
флаг in
Я изменил ssh-порт на гостевой виртуальной машине с 192.168.122.101 на 2222, убедился, что ufw неактивен как на хосте, так и на госте, и протестировал ssh-соединение с хост-сервера BM, который работал: `[email protected]:~$ ssh [email protected] -p 2222` Теперь я попытался ssh с моего локального компьютера на виртуальную машину: `curu@desktop:~$ ssh [email protected] -p 2222` но он говорит: ssh: подключиться к хосту 89.185.xx.xx порт 2222: соединение отклонено
Curu avatar
флаг in
проблема решилась выставлением правила переадресации на первое место в iptables: `iptables -I FORWARD 1 -p tcp -d 192.168.122.101 --dport 2222 -j ACCEPT` (я отредактировал исходный ответ)

Ответить или комментировать

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