Проблема:
Я планирую установить несколько виртуализированных гостевых машин centos, rhel или ubuntu на одном хост-сервере centos (скорее всего, с использованием KVM). Каждая гостевая виртуальная машина запускает экземпляр веб-приложения + некоторые другие службы / протоколы, и каждая гостевая виртуальная машина должна быть доступна извне хоста на любом открытом порту, как если бы каждая из них была отдельным блоком с DNS.
Я (очевидно) слаб в сетевых технологиях / конфигурации, поэтому я просто пытаюсь найти первые грани этой проблемы, т.е. основные подходы, которые мне нужно изучить, чтобы закрепиться на этом. Сетевой конфиг "псевдокод", если хотите. :)
Пример:
Допустим, мне принадлежит домен foo.com.
У меня есть физическая машина с CentOS, DNS-имя guest.foo.com.
На этом физическом хосте у меня работают три виртуальные машины. Я хочу, чтобы гостевые виртуальные машины были доступны как 1.gests.foo.com, 2.gests.foo.com и 3.gests.foo.com. На гостевых виртуальных машинах работают дистрибутивы centos, rhel и ubuntu.
Каждая виртуальная машина должна отвечать на любой (локально открытый) порт, а не только на http-трафик, но также на ssh-соединения и операции git: protocol.
С чего начать, какой подход самый элегантный? Что примерно нужно настроить как минимум для хозяина, так и для гостей?
Примечание:
Я буду обновлять текст вопроса и комментарии по мере того, как узнаю больше.
Если у вас нет хотя бы одного общедоступного IP-адреса на виртуальную машину, вы не можете заставить их отвечать на «любом» открытом порте (это означает, что вам понадобятся запросы NAT, поступающие на определенные порты на общедоступном IP-адресе хост-системы на внутренний IP-адрес виртуальной машины). Допустим, у вас есть только 1 общедоступный IP-адрес, например. 2.3.4.5 и это настроено на хосте. Теперь вы можете перенаправлять запросы, поступающие на порт 80, на 1 виртуальную машину и запросы, поступающие на порт 443, на другую виртуальную машину, а запросы, поступающие на любой другой порт, на любую виртуальную машину по вашему выбору, но в целом вы будете распределять 65530 используемых портов на IP и маршрутизация их на ваши виртуальные машины, поэтому любая конкретная виртуальная машина не может прослушивать порт, который прослушивает другая виртуальная машина.
И если у вас есть несколько общедоступных IP-адресов (по крайней мере, 1 на каждую виртуальную машину), вы можете просто создать записи DNS для IP-адресов виртуальных машин.
При настройке нескольких IP-адресов у вас должна быть небольшая общедоступная подсеть, например, 2.3.4.0/28. Эта сеть содержит следующие используемые IP-адреса:
2.3.4.0 - это сетевой IP-адрес, который нельзя использовать, а 2.3.4.7 - широковещательный IP-адрес сети. Теперь в этом подходе обычно первый IP (2.3.4.1) используется в качестве шлюза для остальной вашей подсети, т.е. ваш интернет-провайдер или центр обработки данных устанавливает маршрут для 2.3.4.0/8 с 2.3.4.1 в качестве следующего перехода в своем брандмауэре / маршрутизаторе. Теперь все запросы, поступающие из Интернета на любой IP-адрес в 2.3.4.0/8, поступают на машину с IP 2.3.4.1. Поэтому логичным было бы иметь этот IP-адрес на вашем хост-компьютере.
Теперь вы можете использовать два подхода:
Подключите сетевые интерфейсы виртуальных машин к интерфейсу хост-машин с IP 2.3.4.1 и дайте виртуальным машинам IP-адреса 2.3.4.2, 3 и 4 на их мостовых интерфейсах.
Имейте сеть только для хоста на виртуальных машинах, например. 192.168.10.0/24 с IP 192.168.10.1 на виртуальном интерфейсе хоста и 192.168.10.2-4 на интерфейсах виртуальной машины. И тогда вы можете просто запросы NAT, поступающие с 2.3.4.X на 192.168.10.X.
В обоих случаях вам понадобятся следующие записи DNS:
1.gests.foo.com 2.3.4.2 2.gests.foo.com 2.3.4.3 3.gests.foo.com 2.3.4.4 и т. Д.
Надеюсь, это проливает свет на проблему.
Имена хостов могут указывать куда угодно. Это уникальные глобальные IP-адреса для каждой виртуальной машины, которая вам нужна. (Убедитесь, что они у вас действительно есть; их может быть очень сложно получить в некоторых частях мира.) Каждой виртуальной машине потребуется свой собственный IP-адрес, и если вы хотите получить к ним доступ из Интернета, они должны быть глобальными.
Самый простой способ сделать это - использовать для виртуальных машин мостовую сеть. Как вы это настраиваете, в основном зависит от внешних факторов, например, от того, устанавливаете ли вы панель управления виртуальной машиной, но это как предоставит вам основные шаги по настройке моста на вашем локальном компьютере, чтобы вы могли начать тестирование и лучше понять, как все работает.