Виртуализация 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-адрес, который я бы попытался исправить, это может быть сложно настроить в зоне, если вы испортите конфигурацию вашей сети, вы можете потерять доступ к машине. Хотя обычно это не рекомендуется, вам может потребоваться запустить брандмауэр в глобальной зоне.

  1. Чтобы гости могли выйти в Интернет, настройте NAT: http://wiki.smartos.org/display/DOC/NAT+using+Etherstubs

  2. Для входящих https/http: я запускаю экземпляр nginx и использую файл для каждой службы / сайта в папках sites-available/sites-enabled. Стандартная конфигурация NGINX с SmartOS является минималистичной и не будет содержать эти папки.

  3. Для входящих служб tcp/udp: вы можете использовать встроенный брандмауэр (см. Man fwadm) в зоне брандмауэра или использовать HAProxy, если вы хотите использовать виртуальные хосты. (Вы можете использовать HAProxy исключительно и исключить NGINX)

Я настроил воспроизводимую суть для этого здесь. Он настроен на github с использованием постоянных ссылок, и я постоянно обновляю его, когда связываюсь с хорошими изменениями, поэтому в ближайшее время он никуда не денется.

Во-первых, схема того, что вы хотите достичь:

                +------------------------------+
                |             Host             |
+----------+    | +--------+        +--------+ |
| Internet +------+ Ext IF +--------+ Int IF | |
+----------+    | | e1000g |        | gw0    | |
                | +--------+        +---+----+ |
                |                       |      |
                |  +--+-----------+     |      |
                |  |Z1|      VNIC1+-----+      |
                |  +--------------+     |      |
                |  +--------------+     |      |
                |  |Z2|      VNIC2+-----+      |
                |  +--------------+     |      |
                |  +--------------+     |      |
                |  |Z3|      VNIC3+-----+      |
                |  +--+-----------+            |
                |                              |
                +------------------------------+

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

  1. Внутренняя сеть должна быть установлена, и глобальная зона должна быть задействована, так как она получила контроль над внешним интерфейсом и ip.
  2. Вы должны решить, использовать Etherstub или нет. Есть плюсы и минусы для обоих вариантов, но они довольно незначительны. В любом случае, глобальной зоне нужен внутренний ip, который действует как шлюз.
  3. NAT с ipnat невероятно прост и о нем можно прочитать здесь.. То же самое можно сказать и о правилах брандмауэра с ipf. Основная предпосылка здесь заключается в том, что внутренняя переадресация портов использует rdr и внешнее сопоставление портов (шлюз сопоставляет исходящий порт с внутреннего устройства с другим внешним портом и отслеживает его состояние, так что возвращаемый пакет переходит на внутренний ip, который должен), достигается с помощью map линий.
  4. Следить за тем, чтобы ваша конфигурация сохранялась при перезагрузке, является последней заботой 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)

Другие вопросы по тегам