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

cod*_*nja 6 virtualization kvm-virtualization 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 代理一样进行基于主机的翻译?

Jef*_*eff 9

是的你可以!

有关 SmartOS 的一般帮助:

Google 将 SmartOS 视为 Solaris 的同义词。始终使用位于 smartos.org 的搜索;不要直接使用谷歌。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)


bae*_*eus 6

我设置一个可重复的要点这个位置。它是使用永久链接在 github 上设置的,当我接触到良好的更改时,我会保持最新状态,因此它不会很快消失。

首先,您希望完成的图表:

                +------------------------------+
                |             Host             |
+----------+    | +--------+        +--------+ |
| Internet +------+ Ext IF +--------+ Int IF | |
+----------+    | | e1000g |        | gw0    | |
                | +--------+        +---+----+ |
                |                       |      |
                |  +--+-----------+     |      |
                |  |Z1|      VNIC1+-----+      |
                |  +--------------+     |      |
                |  +--------------+     |      |
                |  |Z2|      VNIC2+-----+      |
                |  +--------------+     |      |
                |  +--------------+     |      |
                |  |Z3|      VNIC3+-----+      |
                |  +--+-----------+            |
                |                              |
                +------------------------------+
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

我主要同意杰弗里的回答。

然而,我写了你提到的那个特定目的的帖子(用 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 
    
    Run Code Online (Sandbox Code Playgroud)
  • 在/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
    
    Run Code Online (Sandbox Code Playgroud)
  • 重新加载 ipfilter 和 ipnat 规则:

    $ ipf -Fa -f /etc/ipf/ipf.conf
    $ ipnat -FC -f /etc/ipf/ipnat.conf
    
    Run Code Online (Sandbox Code Playgroud)
  • 一旦可以连接到 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
Run Code Online (Sandbox Code Playgroud)

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