LXCゲストの外部IPアドレスを構成する方法は?


18

私はUbuntu 12.04のLXC機能を調査していますが、本当に次のようなネットワークをセットアップしたいと思います。

client1:   192.168.56.101/24
lxc-host:  192.168.56.102/24
guest1     192.168.56.201/24
guest2     192.168.56.202/24
guest3     192.166.56.203/24

ゲストがLANに完全にアクセスでき、クライアントから見える「フラットな」ネットワークが必要です。http://libvirt.org/formatdomain.html#elementsNICSBridgeで説明されているように、私はlibvirt / KVMでネットワークをブリッジするのに慣れています。

ホスト上:

# /etc/network/interfaces
auto br0
iface br0 inet static
    address 192.168.56.102
    netmask 255.255.255.0
    broadcast 192.168.56.255
    bridge_ports eth1

最初のゲストのlxc.conf:

# /var/lib/lxc/guest1/config:
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
lxc.network.ipv4=192.168.56.201/24

192.168.56.201は外界には見えないように見えますが、これは私が望んでいるものではありません。私はこれらのことの1つをしなければならないようです:

1)ホストとゲストでルーティングを手動で設定します

2)何か簡単なことをします...事前にホスト上に仮想インターフェースを作成し、ゲストがそれらを使用するように設定しますlxc.network.type=phys。それが実際に機能するかどうかはわかりません。

私はUbuntuに焦点を当てていますが、RHEL / Fedoraの答えも役立ちます。...


1
フォローアップ:br0を無差別モードに設定しましたが、今は望んでいることを行っているようです。これは標準的なやり方だと思いますが、私が読んだ多くのLXCチュートリアルのいずれにも含まれていませんでした。フィードバックがある場合に備えて、この質問をしばらく公開しておきます
...-twblamer

私はほぼ同じことを行いました(手動セットアップをもう少し追加しました):各lxc構成のnetupスクリプト(ホスト上の)vethをブリッジに追加し、各コンテナの手動IPセットアップ、各コンテナの追加スクリプト/インターフェイスを設定しますアップルーティング(ホスト上のip4転送経由)。しかし、私の知る限り、両方のソリューションは、コンテナが独自のIPアドレスをほとんど何にでも設定できることを意味します(また、ホストのプライマリインターフェイスをブリッジに追加するのは少し不便です)。だから私もいくつかのフィードバック/ソリューションに興味があります。
HoverHell

回答:


13

これはほぼ正しいです。ただし、次のような行が欠落しています。

lxc.network.ipv4.gateway = X.X.X.X

DebianでLXCゲストを実行しています。まず、ホストブリッジをセットアップします(簡単な方法)/etc/network/interfaces

auto wan
iface wan inet static
        address 72.X.X.X
        netmask 255.255.255.0
        gateway 72.X.X.1
        bridge_ports wan_phy    # this line is important.
        bridge_stp off
        bridge_fd 2
        bridge_maxwait 20

あなたの場合、あなたはそれを呼び出しましたbr0、そして私はそれを呼び出しましたwan。ブリッジは好きな名前にできます。最初にこれを機能させます。失敗した場合は、調査します(例)brctl

次に、そのブリッジに参加するようにLXC設定がセットアップされます。

lxc.utsname = FOO
lxc.network.type = veth
lxc.network.link = wan                  # remember, this is what I call my bridge
lxc.network.flags = up
lxc.network.name = v-wan                # optional, I believe
lxc.network.ipv4 = 72.X.X.Y/24          # different IP than the host
lxc.network.ipv4.gateway = 72.X.X.1     # same as on the host

HoverHellが指摘しているように、コンテナ内にルートを持つ人はIPアドレスを変更できます。うん。それはブリッジ(別名イーサネットスイッチ)です。それを防ぎたい場合は、ホストでファイアウォールルールを使用できます。少なくとも私の場合、パケットはホストのiptablesを通過する必要があります。


10
みんな、ありがとう。それはちょっと悲しいですが、私はちょうどこれに戻って、グーグルでこれを見つけて、私が元の
質問者である

2
@derobert:これが当時利用可能であったかどうかはわかりませんが、これautoも有効な値でlxc.network.ipv4.gatewayあり、私の理解では、デフォルトでveth-interfaceが接続されるブリッジのIPになります。
0xC0000022L

ブリッジインターフェイスには独自のIPが必要ですか?wan_phyインターネットに面している場合、ブリッジIPはlxcゲストを構成する他のパブリックIPv4アドレスと同じサブネットにある必要があるため、さらに別の有効なパブリックIPv4アドレスである必要があります。しかし、それは非常に無駄に思えます。askubuntu.com/a/884293/394569は、ブリッジアドレスの構成は厳密には必要ないことを示唆しています。
ジョシュ

@joschその例では、wan_phyにはIPがなく、代わりにブリッジにあります。ただし、「ホスト」に外部IPを持たせたくない場合は、IPが必要になるとは思いません。
デロバート

6

私はLXCに完全には触れていませんが、

しかし、私は自分のウェブサイトのいくつかにインターネットサービスを提供するLANに独自の静的IPを持つ複数のコンテナを設定しています...

たぶん、これはあなたがあなたに何を望んでいるかについて助けになるでしょう。

私は複数のコンテナを実行しています

ホストマシン上でホストのファイルを編集し、各コンテナとホストマシンを追加:vi / etc / hosts

lxc host machine:   192.168.1.100
container1:   192.168.1.101
container2:     192.168.1.102
container3:   192.168.56.102
container4:   192.166.56.103

保存後...

繰り返しますが、ホストマシンでは、ネットワークとブリッジを次のように設定します。

# /etc/network/interfaces
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
        **address** 192.168.1.100
        netmask 255.255.255.0
        **network 192.168.1.1**
        **broadcast** 192.168.1.100
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

上記のネットワーク LANのための私のルータのIPが、あります。(内部) アドレスとブロードキャストはホストマシン、内部IPで、後でインターネットアクセス、ウェブサーバー、ftpなどにVHOSTを使用します。

LXCコンテナー1〜4の場合、次のように構成をセットアップします。

LXC CONFIG
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
**lxc.network.ipv4=192.168.1.101**

コンテナ1 IP = 192.168.1.101になりました

LANに独自の静的IPを持たせるために追加のコンテナについて繰り返します。

コンテナ1-4内、

ホストからログイン:

lxc-console -n CONTAINERNAME,

&各コンテナネットワークを静的に設定し、eth0を次のように設定します。

auto eth0
iface eth0 inet static
        address 192.168.1.101
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.101
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

各コンテナーは、LAN上で使用可能な(ローカル)IPを所有しています。PUTTYを使用してテストするために、各ローカルIPをSSHで接続できます!

その後、たとえば、ホストからコンテナIP、ロードバランサ、プロキシなどにインターネット経由で実行する方法を理解する必要があります。

とにかくこのセットアップが役に立つかもしれません。


LXCコンテナー構成でIPやゲートウェイなどを構成する場合、コンテナー内でそれを繰り返す必要はありません。代わりに、ifaceスタンザをmanual(not staticまたはdhcp)に設定します。updowndns-nameserversなどはまだなどのDebianで使用することができます
0xC0000022L

1

私はまだLXCで遊んでいませんが、この記事は役に立つでしょう:イーサネットブリッジを使用したネットワーク構成(方法2を確認してください)。

構成に関するヒントを提供するには(br0が既に正しく構成されていると仮定します):

  1. を使用してvethデバイスのペアを作成する必要があります ip link add type veth
  2. 前のコマンドは、2つの仮想インターフェイスveth0およびveth1を作成しました
  3. 次に、仮想インターフェイスveth0をブリッジに追加します。 brctl addif br0 veth0
  4. lxcシェルで次のように入力します: ns_exec -nm -- /bin/bash
  5. ここで、もう1つの仮想ifをlxcシェルのネットワーク名前空間に設定する必要があります。 ip link set veth1 netns PID_OF_LXC_SHELL
  6. これで、lxcシェルでveth1を目的のIPアドレス(たとえば、192.168.56.201)に構成することで、すべて設定できます。

これをまったくテストしていませんか?あなたはおそらく賞金を得るでしょうが、あなたの答えは私にはまったく役に立たず、私はOPとまったく同じセットアップを持っています。
ジョナスG.ドレンジ

どうすればもっとお手伝いできますか?私の答えには、仕事をしなかった、またはそれらを実行して問題を解決しなかったステップがありましたか?いいえ、私の答えで述べたように、LXCはやるべきことのウィッシュリストに載っていますが、まだ実際のテストを開始していません。
ホイヘンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.