Назад | Перейти на главную страницу

Виртуализация SmartOS с одним публичным IP-адресом

Является ли это возможным? (заголовок этого вопроса)

Поиск в Google Virtualization with one public IP address не дает ничего полезного

Что у меня есть:

Что я хочу сделать:

Проблема:


Это вообще возможно?

Извини, новичок во всем этом


Исследовательская работа

http://www.machine-unix.com/beginning-with-smartos/#comment-7256 Не решает мою проблему - гид настраивает внутренний IP

http://blog.bgentil.fr/smartos-use-global-zone-as-gateway-for-gests.html

Идеи

Да, ты можешь!

Для общей помощи по 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+-----+      |
                |  +--+-----------+            |
                |                              |
                +------------------------------+

В общем, вы должны сначала понять, что нет один способ настроить внутреннюю сеть nat'd на 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#proxy_pass

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 да)