web-dev-qa-db-ja.com

Amazonec2でlxcコンテナのネットワークをブリッジした

Amazonの上にLXCコンテナーをセットアップしようとしています。私は特にAmazonとVPCに非常に慣れていません。実際、lxcを実験するために初めてVPCを作成しました。

私の目標:私の目標は、Amazonインスタンスにlxcコンテナーを配置し、それらをブリッジタイプのネットワークに配置することです。つまり、物理LANの場合と同じように、他のAmazonインスタンス/ lxcコンテナに到達可能なパブリックIPまたはプライベートIPのいずれかを割り当てることができるはずです。このために、私はブリッジネットワーキングでvirsh(libvirt)を試してきました。これでは、私は自分が望んでいたことを達成することができませんでした。

私が行ったこと:単一のサブネット(パブリック)でVPCを作成しました。その中でdebianインスタンスを起動しました。 LXCをインストールし、NATモードとルートモードを正常に実現できました。しかし、これは私に192.168.122.0(lxcのデフォルト)IPアドレスを与えました。しかし、私はいくつかのiptableルールを使用してコンテナーでインターネットを取得することができました。 libvirtを試した後、bridge-utilsを使用して手動でブリッジを作成しましたが、コンテナーにIPを割り当てることができませんでした。私の仮定では、コンテナはAmazonのDHCPサービスからDHCPリースを取得する必要があります。最後に、別のElastic IPをdebianインスタンスに関連付け、そのネイテッドプライベートIPを記憶しました。その後、単純なブリッジを作成し、ホスト上のブリッジにeth0を追加しました。次に、libvirtを使用して単純なホストブリッジネットワークを作成しました。そして、lxc configで、私が記憶したネイテッドIPをハードコーディングしました。次に、lxcコンテナーを起動しました。コンテナは、ネイテッドIPを取得できます。ホストからSSHで接続できます。しかし、私はそのコンテナでインターネットを取得していません。

/ etc/network/interfaces(Host) auto lo iface loinetループバックautoeth0 iface eth0inetマニュアル

auto br0
iface br0 inet dhcp
    bridge_ports eth0
    bridge_fd 0
    bridge_maxwait 0

virsh net-dumpxml Host-bridge

 <network>
 <name>Host-bridge</name>
 <uuid>7c41e4ce-311c-c78f-5ea3-a03a224e4a3c</uuid>
 <forward mode='bridge'/>
 <bridge name='br0' />
 </network>

lxc設定ファイル

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
#lxc.network.name = eth0
lxc.network.ipv4 = 10.0.0.207/24(natted memorized ip)

コンテナのインターフェイスファイル auto lo iface loinetループバック

auto eth0
iface eth0 inet static
address 10.0.0.207
netmask 255.255.255.0
gateway 10.0.0.1

私の質問

  1. このシナリオではどのVPCを選択する必要がありますか?
  2. どのネットワークモードで仕事が楽になりますか?
  3. 少なくとも、私が達成したことで、どうすればコンテナにインターネットを接続できますか?
  4. Elastic IPがないと、同じサブネット内に他のインスタンスやコンテナに到達可能なプライベートIPを設定できませんか?
3
Medhamsh

Amazonは、VPC内のサーバーの動的IPアドレスをサポートしていません。サーバーの起動時に割り当てられる1つのIPアドレスは、ネットワークとの間で送受信できる唯一のIPアドレスです。 LXCコンテナサーバーをインスタンスに動的に追加し、ブリッジネットワークがそれを機能させることができると仮定するだけでは起こりません。 Amazon IPネットワークは、インスタンス間のルーティング用の特別な目的のネットワークであり、一般的なイーサネットサブネットを模倣していません。1つに期待されるほとんどの機能は機能しません。

このような機能が必要な場合は、GREトンネリング、VDE(仮想分散イーサネット)、OpenVPNなどを使用して、AmazonIPアドレスの上に仮想ネットワークサブネットを構成できる可能性があります。

ただし、Amazonネットワーキングだけでそれを行う場合は、オプションについて説明します。

Elastic IPアドレスは、プライベートIPアドレスが同じままであるように機能しますが、アドレスがにルーティングされた場合にのみ、ElasticIPアドレスに1対1のNATが発生します)インターネットゲートウェイ。

インスタンスのネットワークインターフェイスから送信元と宛先のチェックを削除する可能性もあります。これは通常、ルーターに対して行われます。これを使用すると、1つのインスタンスに複数のサーバーが存在する可能性がありますが、その場合でもAmazonがARPリクエストをサーバーにルーティングするとは思わないので疑わしいようです。

現在、Amazon VPCは、インスタンスごとに複数のインターフェース(最大2)とインスタンスごとに複数のIPアドレス(最大8)をサポートしています。これは、サーバーを追加するたびにインスタンスを構成する場合に使用できるものです。アドレスは、インスタンスの仮想インターフェイスのように通信が許可される追加のアドレスです。 DHCPはサポートされていないため、管理コンソールからサーバーにIPアドレスを追加した後、手動でIPアドレスを構成する必要があります。それらを使用する通常の方法は、「ip addr add」を使用して、同じインターフェイスに複数のIPアドレスを追加することですが、ブリッジを使用してアドレスを異なるインターフェイスに渡すことがうまくいかない理由はわかりません。

3
Nakedible

私にも同じニーズがあり、それを行う方法を見つけたかもしれません。

私の設定は次のとおりです。

追加のeth1カードとHWaddr 02:5f:fc:b3:0b:b9および複数のIP10.2.132.61から `10.2.132.64 '

ブリッジングを使用して同じNICを共有し、各コンテナにそのインターフェイス用に構成されたIPの1つを提供したいと思います。

私の最初の試みは、br0eth1を作成してから、この構成を使用することでした。

lxc.network.type = veth                
lxc.network.hwaddr = 02:5f:fc:b3:0b:b9 
lxc.network.flags = up                 
lxc.network.link = br0

ここでの問題は、コンテナを起動すると、dhcp02:5f:fc:b3:0b:b9(外部ブリッジ)から同じHDaddrを持つインターフェイスに向かうパケットを受信し、次のように文句を言うことです。

 kernel: [16809131.333956] br0: received packet on vethVIAEYB with own address as source address

私が見つけた解決策は、外部インターフェース(ホスト上のbr0eth1)のMACをランダムなものに変更することです。このようにしてコンテナを起動すると、DHCP情報をすぐに取得できます。

だから私はしました

Sudo ifconfig eth1 down
Sudo ifconfig eth1 hw ether 00:80:48:BA:d1:30
Sudo ifconfig br0  hw ether 00:80:48:BA:d1:30
Sudo ifconfig eth1 up

次に、コンテナを再起動するとうまくいきました。

現在、DHCPで動作しています。そのインターフェイスに他の登録済みIPを使用するには、CONTAINER/configファイルでIPを静的に設定することに依存する必要があります。

0
Alessandro