web-dev-qa-db-ja.com

コンテナーのLXC外部IP構成

専用サーバーを借りて、KVMの代わりにLXCを使いたいです。コンテナごとにIPを購入したい。今のところ私は2つの外部IPを持っています:

  • 193.X.X.30/32
  • 213.X.X.31/32

NATではなくルーティングソリューションを好みます。

私の最後の試みはこのようなものです:

              -------------------
              |     INTERNET    |
              -------------------
                       |
                       V
----------------------------------------------
|  -------------------      -------  [Host]  |
|  | br0: 193.X.X.30 | <--- | em1 |          |
|  -------------------      -------          |
|           |                                |
|           V                                |
|  -------------------                       |
|  |    vethXXXX     |                       |
|  -------------------                       |
|           |                                |
|           V                                |
|  --------------------------------------    |
|  |  --------------------  [CONTAINER] |    |
|  |  | eth0: 213.X.X.31 |              |    |
|  |  --------------------              |    |
|  |                                    |    |
|  --------------------------------------    |
----------------------------------------------

ホストのネットワーク構成:

auto br0
iface br0 inet static
  bridge_ports    em1
  bridge_fd       0
  address         193.X.X.30
  netmask         255.255.255.0
  gateway         193.X.X.1
  dns-nameservers 8.8.8.8 8.8.4.4

私のコンテナ構成:

lxc.network.type = veth
lxc.network.link = br0
lxc.network.ipv4 = 213.X.X.31/24
lxc.network.ipv4.gateway = 213.X.X.1

私のコンテナネットワーク構成:

auto eth0
iface eth0 inet static
   address   213.X.X.31
   netmask   255.255.255.0
   gateway   213.X.X.1

   dns-nameservers 8.8.8.8
   dns-nameservers 8.8.4.4

コンテナを直接接続することに成功しませんでした。コンテナがWeb /メール/ DNSなどのサービスを正常にホストするための適切な構成/トポロジは何である必要がありますか。

2
Fırat KÜÇÜK

これが正しい方法または最善の解決策であるかどうかはわかりませんが、NATがなくても機能します。ネットワークトポロジは同じです。コンテナごとに1つの物理NIC(em1)と複数のIPがあります。後でサブネットを購入できるかもしれませんが、今のところ4〜5個のIPを購入します。

              -------------------
              |     INTERNET    |
              -------------------
                       |
                       V
----------------------------------------------
|  -------------------      -------  [Host]  |
|  | br0: 193.X.X.30 | <--- | em1 |          |
|  -------------------      -------          |
|           |                                |
|           V                                |
|  -------------------                       |
|  | vethMyContainer |                       |
|  -------------------                       |
|           |                                |
|           V                                |
|  --------------------------------------    |
|  |  --------------------  [CONTAINER] |    |
|  |  | eth0: 213.X.X.31 |              |    |
|  |  --------------------              |    |
|  |                                    |    |
|  --------------------------------------    |
----------------------------------------------

これは、ホスト(/ etc/network/interfaces)での私のネットワーク構成です。

auto lo
iface lo inet loopback    

auto br0
iface br0 inet static
  bridge_ports    em1
  bridge_fd       0
  address         193.X.X.30
  netmask         255.255.255.0
  gateway         193.X.X.1
  dns-nameservers 8.8.8.8 8.8.4.4

コンテナーの構成ファイル(/ var/lib/lxc/my-container/config):

lxc.include                      = /usr/share/lxc/config/ubuntu.common.conf
lxc.rootfs                       = /var/lib/lxc/my-container/rootfs
lxc.utsname                      = my-container
lxc.Arch                         = AMD64
lxc.network.type                 = veth
lxc.network.veth.pair            = vethMyContainer
lxc.network.link                 = br0
lxc.network.ipv4                 = 213.X.X.31/32
lxc.network.ipv4.gateway         = 193.X.X.1
lxc.network.script.up            = /var/lib/lxc/my-container/script-up.sh
lxc.network.flags                = up
lxc.network.hwaddr               = 00:16:3e:aa:bb:cc
lxc.cgroup.memory.limit_in_bytes = 2048M

Vethデバイスに名前を付ける必要があります。スクリプトファイルで名前を使用するためです。パッケージは、br0からvethデバイスに自動的にルーティングすることはできません。そのため、ルーティングルールを追加すると、ARPテーブルが自動的に更新されませんでした。そこで、静的ARPレコードを追加しました。

スクリプトファイル(/var/lib/lxc/my-container/script-up.sh):

#!/bin/bash

route del 213.X.X.31 br0
route add 213.X.X.31 br0

コンテナのネットワーク構成:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

したがって、NATを使用せずにコンテナに直接pingを実行できます。 arpコマンドとrouteコマンドを使用しない方法を見つけたら、回答を更新します。

1
Fırat KÜÇÜK