web-dev-qa-db-ja.com

1つのパブリックIPアドレスを使用したSmartOS仮想化

出来ますか? (この質問のタイトル)

グーグルVirtualization with one public IP address何も役に立たない

私が持っているもの:

  • 専用サーバー上のSmartOS。
  • 専用サーバーには1つのパブリックIPアドレスがあります。

やりたいこと:

  • そのサーバーから複数のゲストOSをホストする

問題:

  • (ゲストを仮想化するサーバー)の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プロキシのようにホストベースの翻訳を行うことは可能ですか?
4
code ninja

はい、できます!

SmartOSの一般的なヘルプ:

GoogleはSmartOSをSolarisの同義語として扱います。常にsmartos.orgにある検索を使用してください。 Googleを直接使用しないでください。 Freenodeの#SmartOSとメーリングリストも貴重なリソースです。

データセンターでの単一のIPセットアップに関するセキュリティの懸念:

SmartOSには通常、管理インターフェイス(プライベート/ LAN)とパブリックインターフェイス(パブリック/ WAN)があります。展開ではこれが不可能な場合があることは承知していますが、KVM仮想ホストは管理インターフェイスで保護されていないVNCを実行することを知っておくことが非常に重要です。ファイアウォールを使用して、これを保護する必要があります。構成の変更。

ファイアウォール、ゲートウェイ、ロードバランサーなどとして機能するゾーンを設定します。そのファイアウォールゾーンには、管理インターフェイスとWANに1つずつ、合計2つのNICがあります。すべてのゲストを、物理スイッチに接続するような仮想スイッチに配置できます。

IPは1つしかないので、修正しようとします。これをゾーンに設定するのは難しい場合があります。ネットワーク構成を台無しにすると、マシンにアクセスできなくなる可能性があります。通常はお勧めしませんが、グローバルゾーンでファイアウォールを実行する必要がある場合があります。

  1. ゲストがインターネットにアクセスできるようにするには、NATを設定します:http://wiki.smartos.org/display/DOC/ NAT + using + Etherstubs

  2. 着信https/httpの場合:nginxインスタンスを実行し、sites-available/sites-enabledフォルダー内の各サービス/ Webサイトのファイルを使用します。 SmartOSを使用したNGINXのデフォルト構成は最小限であり、これらのフォルダーは含まれません。

  3. 着信tcp/udpサービスの場合:ファイアウォールゾーンで組み込みのファイアウォール(man fwadmを参照)を使用するか、必要に応じてHAProxyを使用できます仮想ホスト。 (HAProxyを排他的に使用し、NGINXを排除することができます)

8
Jeff

このために再現可能な要点を設定しました ここ 。パーマリンクを使用してgithubでセットアップされ、適切な変更が加えられたときに最新の状態に保つので、すぐにどこにも行くことはないはずです。

まず、達成したいことの図:

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

一般に、SmartOSでNATされた内部ネットワークをセットアップする方法は1つないことを最初に理解する必要がありますが、すべてのことがいくつかあります。メソッドは取り組む必要があります。これらの概要は次のとおりです。

  1. 内部ネットワークが確立されている必要があり、グローバルゾーンが関与している必要があります。これは、外部インターフェイスとIPを制御できるためです。
  2. エーテルスタブを使用するかどうかを決定する必要があります。両方の選択肢には賛否両論がありますが、それらはかなりマイナーです。いずれにせよ、グローバルゾーンにはゲートウェイとして機能する内部IPが必要です。
  3. Ipnatを使用したNATは非常に単純で、次のように読むことができます ここ ..ipfを使用したファイアウォールルールについても同じことが言えます。ここでの基本的な前提は、内部ポート転送がrdrと外部ポートマッピングを使用することです(ゲートウェイは、内部デバイスから別の外部ポートにアウトバウンドポートをマップし、その状態を追跡するため、リターンパケットは必要な内部IP)は、map行で実現されます。
  4. SmartOSの最後の懸念事項は、再起動後も構成が永続的であることを確認することです。最も簡単な方法は、SMFを使用して、ファイアウォールとNATルールを設定するスクリプトを実行することです。
5
baetheus

私はジェフリーの答えにほとんど同意します。

しかし、私はその特定の目的(1つのパブリックIPでsmartosを実行する)のために あなたが言及した投稿 を書いたので、私の手順を適用した場合の私の提案をここに示します。

http/httpsトラフィック:

  • ゾーンまたはkvmゲストにnginxをインストールします(たとえば、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(または/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インスタンスに接続できるようになったら、他のホスト上の他のWebサーバーの前でリバースプロキシになるようにnginxを構成できます。以下を参照してください。 http://wiki.nginx.org/NginxHttpProxyModule#proxy_pass

sshトラフィック:

上記と同じですが、ポート2222が10.0.0.2:22にリダイレクトされ、10.0.0.3:22の場合は2223にリダイレクトされます。

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)

4
bgentil