Виртуализация SmartOS с одним публичным IP-адресом
Является ли это возможным? (название этого вопроса)
погуглить Virtualization with one public IP address
ничего полезного не дает
Что я имею:
- SmartOS на выделенном сервере.
- Выделенный сервер имеет один публичный IP-адрес.
Что я хочу сделать:
- Размещать несколько гостевых ОС на этом сервере
Проблема:
- Доступ к гостю через (сервер, который виртуализирует гостя) IP-адрес.
Это вообще возможно?
Извините, новичок на все это
Исследование
http://www.machine-unix.com/beginning-with-smartos/ Не решает мою проблему - руководство устанавливает внутренний IP
http://blog.bgentil.fr/smartos-use-global-zone-as-gateway-for-guests.html
идеи
- Возможно, возможно сделать перевод на основе хоста, как с прокси nginx?
3 ответа
Да, ты можешь!
Для общей помощи с SmartOS:
Google рассматривает SmartOS как синоним Solaris. Всегда используйте поиск, расположенный на smartos.org; не используйте Google напрямую. #SmartOS на Freenode и список рассылки также являются бесценными ресурсами.
Проблемы безопасности с одной настройкой IP в центре обработки данных:
В SmartOS у вас обычно есть интерфейс администратора (частный /LAN) и общедоступный (открытый /WAN). Я понимаю, что это может быть невозможно в вашем развертывании, но очень важно знать, что на виртуальных хостах KVM будет работать незащищенный VNC на интерфейсе администратора. Вам нужно будет обеспечить это с помощью брандмауэра или изменения конфигурации.
Что вы хотите сделать, так это настроить зону, которая будет действовать как брандмауэр, шлюз, балансировщик нагрузки и т. Д. В этой зоне брандмауэра будет две сетевые карты, одна на интерфейсе администратора, другая на глобальной сети. Вы можете поместить всех своих гостей в виртуальный коммутатор, который будет похож на подключение их к физическому.
Поскольку у вас есть только один IP-адрес, который я бы попытался исправить, это может быть сложно настроить в зоне, если вы испортите конфигурацию вашей сети, вы можете потерять доступ к машине. Хотя обычно это не рекомендуется, вам может потребоваться запустить брандмауэр в глобальной зоне.
Чтобы гости могли выйти в Интернет, настройте NAT: http://wiki.smartos.org/display/DOC/NAT+using+Etherstubs
Для входящих https/http: я запускаю экземпляр nginx и использую файл для каждой службы / сайта в папках sites-available/sites-enabled. Стандартная конфигурация NGINX с SmartOS является минималистичной и не будет содержать эти папки.
Для входящих служб tcp/udp: вы можете использовать встроенный брандмауэр (см. Man fwadm) в зоне брандмауэра или использовать HAProxy, если вы хотите использовать виртуальные хосты. (Вы можете использовать HAProxy исключительно и исключить NGINX)
Я настроил воспроизводимую суть для этого здесь. Он настроен на github с использованием постоянных ссылок, и я постоянно обновляю его, когда связываюсь с хорошими изменениями, поэтому в ближайшее время он никуда не денется.
Во-первых, схема того, что вы хотите достичь:
+------------------------------+
| Host |
+----------+ | +--------+ +--------+ |
| Internet +------+ Ext IF +--------+ Int IF | |
+----------+ | | e1000g | | gw0 | |
| +--------+ +---+----+ |
| | |
| +--+-----------+ | |
| |Z1| VNIC1+-----+ |
| +--------------+ | |
| +--------------+ | |
| |Z2| VNIC2+-----+ |
| +--------------+ | |
| +--------------+ | |
| |Z3| VNIC3+-----+ |
| +--+-----------+ |
| |
+------------------------------+
В общем, вы должны сначала понять, что не существует единого способа настройки внутренней сети в SmartOS, но есть несколько вещей, с которыми должен справиться каждый метод. Вот обзор этих вещей:
- Внутренняя сеть должна быть установлена, и глобальная зона должна быть задействована, так как она получила контроль над внешним интерфейсом и ip.
- Вы должны решить, использовать Etherstub или нет. Есть плюсы и минусы для обоих вариантов, но они довольно незначительны. В любом случае, глобальной зоне нужен внутренний ip, который действует как шлюз.
- NAT с ipnat невероятно прост и о нем можно прочитать здесь.. То же самое можно сказать и о правилах брандмауэра с ipf. Основная предпосылка здесь заключается в том, что внутренняя переадресация портов использует
rdr
и внешнее сопоставление портов (шлюз сопоставляет исходящий порт с внутреннего устройства с другим внешним портом и отслеживает его состояние, так что возвращаемый пакет переходит на внутренний ip, который должен), достигается с помощьюmap
линий. - Следить за тем, чтобы ваша конфигурация сохранялась при перезагрузке, является последней заботой SmartOS. Самый простой и лучший способ - использование SMF для запуска скрипта, который устанавливает ваш брандмауэр и правила nat.
Я в основном согласен с ответом Джеффри.
Однако я написал пост, который вы упомянули для этой конкретной цели (запуск smartos с 1 публичным IP), поэтому здесь мои предложения, если вы применили мою процедуру.
http / https трафик:
- Установите nginx в гостевой зоне или kvm (скажем, ip 10.0.0.2 порт 80)
Добавьте перенаправление портов в /etc/ipf/ipnat.conf (или раздел NAT в /opt/custom/share/svc/smartos_setup.sh).
rdr e1000g0 0/0 port 80 -> 10.0.0.2 port 80 tcp
Добавьте правило брандмауэра в /etc/ipf/ipf.conf (или в раздел FW в /opt/custom/share/svc/smartos_setup.sh).
pass in quick on e1000g0 from any to e1000g0/32 port=80 pass in quick on e1000g0 from any to 10.0.0.2 port=80
Перезагрузите правила ipfilter и ipnat:
$ ipf -Fa -f /etc/ipf/ipf.conf $ ipnat -FC -f /etc/ipf/ipnat.conf
- Подключившись к экземпляру nginx, вы можете настроить nginx в качестве обратного прокси-сервера перед другими веб-серверами на других хостах, см. http://wiki.nginx.org/NginxHttpProxyModule
SSH трафик:
То же, что и выше, с портом 2222, перенаправленным на 10.0.0.2:22, 2223 для 10.0.0.3:22, например:
rdr e1000g0 0/0 port 2222 -> 10.0.0.2 port 22 tcp
rdr e1000g0 0/0 port 2223 -> 10.0.0.3 port 22 tcp
при необходимости убедитесь, что вход в систему root включен в зоне /etc/ssh/sshd_config (PermitRootLogin yes)