LXC コンテナのパブリック IP アドレス

LXC コンテナのパブリック IP アドレス

わかりました。LXC コンテナーでネットワークを実行する方法を知りたいのです。他の Web サイトから得られる漠然とした情報ではなく、それらを機能させるための真の初心者向けガイドです。ほとんどの例は基本的にユーザーがテストできるように設定されているので、たとえば Web サーバーのようなサービスを実行したいと考えています。

私は Ubuntu 12.04 LTS を実行しており、LXC をインストールして、コンテナーを作成、起動、停止できます。私のサーバーには明らかにパブリック IP があるため、コンテナーを設定してパブリック IP を持つようにする方法を知りたいです。現在のコンテナーからのブリッジがすでに配置されているようなので、コンテナーが動作するためのパブリック DHCP 範囲をコンテナーに与えるか、コンテナーに静的 IP アドレスを手動で割り当てる必要があるようです。

コンテナに IP を静的に割り当てたい場合は、どうすればよいですか? ホスト上のブリッジ構成に変更を加える必要はありますか? 実際には MACVLAN オプションを使用して行う方がよいのでしょうか?

ご協力いただければ幸いです。

答え1

私のアプローチでは、サーバーに 1 つの NIC があり、その NIC をホストと LXC ゲスト間で共有する必要があることを前提としています。これにはブリッジの使用が含まれます。ブリッジは を所有および管理します。ホストはではなく でeth0独自のネットワークを構成するようになりました。LXC ゲストはブリッジに接続するように構成されます。br0eth0

  1. ホスト上で、sudo apt-get install bridge-utils.

  2. ホスト上で、eth0ブリッジに置き換えます:

    これは危険です。これを間違えると、サーバーからロックアウトされる可能性があります。問題が発生した場合にこの変更を元に戻せるように、ローカル ログインが有効になっており、ローカル コンソール アクセスが機能していることを確認してください。

    /etc/network/interfaces

    1. auto eth0と置換するauto br0
    2. 交換する:

      iface eth0 inet dhcp
      

      と:

      iface br0 inet dhcp
          bridge_ports eth0
      

      静的ネットワーク構成の場合は、以下を置き換えます。

      iface eth0 inet static
          address ...
          netmask ...
          gateway ...
          etc.
      

      と:

      iface br0 inet static
          bridge_ports eth0
          address ...
          netmask ...
          gateway ...
          etc.
      

      単にeth0for を変更しbr0て行を追加するだけですbridge_ports eth0

    3. ホストを再起動します。ローカルで実行している場合は、sudo ifdown eth0開始前とsudo ifup br0開始後に実行してもかまいません。ブリッジが起動するまでに少し時間がかかる場合があることに注意してください。再起動後、すべてが失われたと判断する前に 5 分待ってください。

  3. 指定された名前の LXC コンテナをパブリック IP に移動するには:

    1. コンテナを停止します。
    2. ホスト上で、 を編集して に変更します。/var/lib/lxc/container_name/configlxc.network.linkbr0
    3. ホスト上で、通常どおりパブリック IP を編集して構成します (必要に応じて DHCP または静的構成)。インターフェースは、コンテナーの観点から引き続き呼び出されることに注意してください。/var/lib/lxc/container_name/rootfs/etc/network/interfaceseth0
    4. コンテナを再起動します。
  4. 新しい LXC コンテナのデフォルトを変更するには、/etc/lxc/default.confホスト上で を編集し、lxc.network.linkに変更しますbr0

  5. LXC が提供する NAT ブリッジがまったく必要ない場合 (つまり、すべてのコンテナが代わりに新しいブリッジを使用する場合)、ホスト上で を編集してに/etc/default/lxc変更し、ホスト上で を実行します。USE_LXC_BRIDGE"false"sudo service lxc restart

答え2

Robie さん、この回答を投稿していただき、本当にありがとうございます。私はこれを解決しようと必死に努力してきましたが、これが唯一うまくいった方法でした。

他の管理者への指示を明確にするために、私が理解したいくつかの点について言及する必要があると思いました。

私のホストでは、ゲストの eth0 に複数の静的 IP エイリアスが割り当てられていました。たとえば、次のようになります。

iface eth0:1 inet static
  address 5.5.5.5
  netmask 255.255.255.5
  gateway 5.5.5.1
etc.

ここで、br0 を同じ方法で設定するのではなく、上記の Robie のようにエイリアスのない 1 つの IP だけを設定します。

たとえば、5.5.5.5 をコンテナ debian8 に割り当てるとします。

編集し/var/lib/lxc/debian8/etc/network/interfacesて追加:

iface eth0 inet static 
      address 5.5.5.5
      netmask 255.255.255.5
      gateway 5.5.5.1
    etc.

次に、次のコマンドを発行します。route add default gw <gateway-ip, in my case 5.5.5.1>

その後、コンテナを再起動すると、すべてが動作するはずです! :)

答え3

私も同じ問題を抱えていましたが、この解決策(手っ取り早い方法)を見つけました。

server: eth0 = 10.1.0.77/24
server: lxdbr0 (lxd bridge) = 10.255.255.77/24

container: eth0 = 10.255.255.100/24 (same network as lxdbr0)
container: eth0:0 = 194.99.99.99/28  (public ip address on eth0 alias)

サーバー上:route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0

また、必要に応じて上流ルーターにルートを追加します。

おそらく、最善の解決策ではありませんが、大きな労力は必要ありません。乾杯。

関連情報