具有一个公共 IP 地址的 SmartOS 虚拟化

具有一个公共 IP 地址的 SmartOS 虚拟化

有可能吗?(问题标题)

谷歌搜索Virtualization with one public IP address没有找到有用的信息

我拥有的:

  • 专用服务器上的 SmartOS。
  • 专用服务器有一个公共 IP 地址。

我想做的事:

  • 从该服务器托管多个客户操作系统

问题:

  • 通过(虚拟化客户的服务器)的IP地址访问客户机。

这可能吗?

抱歉,我是新手


研究

http://www.machine-unix.com/beginning-with-smartos/#comment-7256 无法解决我的问题 - 该指南设置了一个内部 IP

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

想法

  • 也许可以像使用 nginx 代理那样进行基于主机的翻译?

答案1

是的你可以!

有关 SmartOS 的一般帮助:

Google 将 SmartOS 视为 Solaris 的同义词。请始终使用位于 smartos.org 的搜索;不要直接使用 Google。Freenode 上的 #SmartOS 和邮件列表也是非常宝贵的资源。

数据中心单 IP 设置的安全问题:

在 SmartOS 中,您通常有一个管理界面(私有/LAN)和一个公共界面(公共/WAN)。我知道在您的部署中这可能无法实现,但了解 KVM 虚拟主机将在管理界面上运行不受保护的 VNC 非常重要。您需要使用防火墙或配置更改来确保安全。

您需要做的是设置一个区域,该区域将充当防火墙、网关、负载平衡器等。该防火墙区域将有两个网卡,一个在管理界面上,一个在 WAN 上。您可以将所有来宾放在虚拟交换机上,就像将它们连接到物理交换机一样。

由于您只有一个 IP(我会尝试纠正),因此在区域中设置起来可能很棘手,如果您弄乱了网络配置,您可能会失去对机器的访问权限。虽然通常不建议这样做,但您可能需要在全局区域中运行防火墙。

  1. 为了让客人能够访问互联网,请设置 NAT: http://wiki.smartos.org/display/DOC/NAT+using+Etherstubs

  2. 对于传入的 https/http:我运行一个 nginx 实例,并在 sites-available/sites-enabled 文件夹中为每个服务/网站使用一个文件。带有 SmartOS 的 NGINX 的默认配置非常简单,不会包含这些文件夹。

  3. 对于传入的 tcp/udp 服务:您可以在防火墙区域中使用内置防火墙(请参阅 man fwadm),或者如果您想使用虚拟主机,则可以使用 HAProxy。(您可以专门使用 HAProxy 并消除 NGINX)

答案2

我已经为此设置了一个可重现的要点这里。它是使用永久链接在 GitHub 上设置的,当有好的变化时我会及时更新,所以它不会很快消失。

首先,您要实现的目标的图表如下:

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

一般来说,你必须首先明白,没有在 SmartOS 上设置 nat'd 内部网络的方法有很多,但每种方法都必须解决一些问题。以下是这些问题的概述:

  1. 必须建立内部网络,并且必须涉及全局区域,因为它可以控制外部接口和 IP。
  2. 你必须决定使用以太网存根或者不。两种选择都有利弊,但利弊相当小。无论哪种方式,全局区域都需要一个充当网关的内部 IP。
  3. 使用 ipnat 进行 NAT 非常简单,可以阅读这里.. 防火墙规则与 ipf 相同。这里的基本前提是内部端口转发使用rdr和外部端口映射(网关将内部设备的出站端口映射到不同的外部端口并跟踪其状态,以便返回数据包到达其应到达的内部 ip)是通过map线路实现的。
  4. 确保您的配置在重启后仍然有效是 SmartOS 的最后一个关注点。最简单的方法也是最好的方法,即使用 SMF 运行设置防火墙和 nat 规则的脚本。

答案3

我基本同意 Jeffrey 的回答。

然而我写了您提到的帖子为了这个特定目的(使用 1 个公共 IP 运行 smartos),所以如果您应用了我的程序,这里是我的建议。

http/https 流量:

  • 在区域或 kvm 客户机中安装 nginx(假设 ip 10.0.0.2 端口 80)
  • 在 /etc/ipf/ipnat.conf(或 /opt/custom/share/svc/smartos_setup.sh 中的 NAT 部分)中添加端口重定向

    rdr e1000g0 0/0 port 80 -> 10.0.0.2 port 80 tcp 
    
  • 在 /etc/ipf/ipf.conf 中添加防火墙规则(或 /opt/custom/share/svc/smartos_setup.sh 中的 FW 部分)

    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 配置为其他主机上其他 Web 服务器前面的反向代理,请参阅: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

如果需要,请确保在区域 /etc/ssh/sshd_config 上启用了 root 登录(PermitRootLogin yes)

相关内容