web-dev-qa-db-ja.com

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

わかりました。だから、LXCコンテナでのネットワーキングの方法を知りたいです。他のウェブサイトから得られる曖昧な情報だけでなく、それらを機能させるための本当の初心者向けガイドです。ほとんどの例は基本的にテストする人々のために設定されているので、たとえば、Webサーバー。

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

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

助けていただければ幸いです。

26
user132151

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

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

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

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

    /etc/network/interfacesで:

    1. auto eth0auto 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.
      

      eth0br0を変更し、bridge_ports eth0行を追加するだけです。

    3. ホストを再起動します。これをローカルで実行している場合は、開始する前にSudo ifdown eth0を実行し、その後Sudo ifup br0も実行します。ブリッジが立ち上がるまでに少し時間がかかる場合があるため、すべてが失われたとみなす前に、再起動後5分でブリッジを設定してください。

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

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

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

23
Robie Basak

私は同じ問題を抱えていて、この解決策を持っています(迅速で汚い)。

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

また、必要に応じて、アップストリームルータにルートを追加します。

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

1
andrea

ロビー、この回答を投稿してくれてありがとう、私はこれを成功させるために私の髪を風袋引きしており、これがうまくいった唯一の方法です!

他の管理者への指示を明確にするために、私が見つけ出したいくつかのことを言及すべきだと思いました。

私のホストには、ゲストの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のようなエイリアスのないIPが1つだけ必要です。

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>

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

1
Gregory Wolf