web-dev-qa-db-ja.com

追加のブリッジインターフェイスは自動的に追加されます

eth0br0の間にブリッジを設定しました。ブリッジは正常に機能しますが、理由や状況が不明な場合は、ブリッジに追加されたvethXXXXXXインターフェイスからこれらを削除し続けることがあります。この場合、LXCインスタンスはインターネットと通信できません。

brctl delif br0 vethNbUtXk && brctl delif br0 vethYqTf0Fを実行すると、すべてが元気になります。

これらの奇妙に見えるインターフェースがどこから来ているのでしょうか?

root@ubuntuserver:/var/lib/lxc# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.080027ca5f7a       no              eth0
                                                        vethNbUtXk
                                                        vethYqTf0F
lxcbr0          8000.000000000000       no
virbr0          8000.000000000000       yes

これらの奇妙なvethXXXXXXアダプターの1つが作成されたときのifconfigの例

vethPBkvAC Link encap:Ethernet  HWaddr fe:14:5c:cb:62:d6
          inet6 addr: fe80::fc14:5cff:fecb:62d6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3194 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3214 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:309019 (309.0 KB)  TX bytes:311213 (311.2 KB)
4
David Parks

これは、いくつかの光を当てるかもしれません: 仮想イーサネットデバイス 。あなたに何かを与えるかもしれません このように :確かにあなたは/var/lib/lxc/の下にlxc.network.type = vethでいくつかの設定を持っていませんか?

grep -r 'veth' /var/lib/lxc/
2
Zimzalabim

将来の読者のために、LXCの構成とブリッジの理解に協力している同僚にこのメールを送りました。


ええと、私は今日のほとんどをLXCでのネットワーキングに夢中になって過ごしましたが、今では状況がはるかに明確になっているので、学んだことを伝えたいと思いました。

最初はいくつかの定義なので、私たちは何を見ているのかを知っています(br0やvirbr0のようなブリッジとeth0のようなインターフェースの違いを本当に理解していませんでした、そしてvethILNaLoのようなそれらのインターフェースが何であるかを私は間違いなく知りませんでしたにとって)。

ブリッジ

ブリッジはifconfigのインターフェースとして表示されますが、ブリッジは他の2つのネットワークを接続するだけで、それ自体はネットワークインターフェースではありません。 brctl showを使用してブリッジを表示および変更し、/ etc/networking/interfacesで永続的に構成できます。

ブリッジはスイッチのように考えるのが一番です。

私たちが見る橋の例:

  • br0
  • lxcbr0
  • virbr0

ネットワークインターフェース

インターフェイスは実際には単一のホストに割り当てられます。単一のインターフェイスを複数のホストに割り当てることはできません。ホストは、インターフェースへのネットワークトラフィックを送受信します。選択するインターフェースはルーティングテーブルによって異なります。routeがこれを表示します。

ブリッジングが必要な理由は、eth0がホストOSに物理的に接続されており、コンテナやその他の仮想マシンにも接続できないためです。

表示される物理インターフェイスの例:

  • eth0
  • vethILNaLo

その2番目のものについてのいくつかのメモ:vethILNaLo

  • これは、開始されたLXCコンテナーごとに作成される物理インターフェースであり、コンテナーに接続され、コンテナー内でeth0として表示されます。
  • LXC設定ファイルでlxc.network.type=vethを定義するたびに、これらの物理インターフェースの別の1つが作成され、コンテナーにアタッチされます。lxc.network.name = eth0を使用して、コンテナー内のインターフェースの名前を設定できます(デフォルト) eth0、eth1などの一般的に機能します)
  • このインターフェースが作成されたとき、何にも接続されておらず、まったく接続されていないようです

ブリッジを使用してvethILNaLoをネットワークに接続する

ブリッジはソフトウェアベースのスイッチのようなものであることを忘れないでください。 2つのインターフェースを接続すると、スイッチが物理コンピューターを接続するのと同じ方法で接続されます。

/etc/network/interfacesでは、br0を定義して作成し、基本的にスイッチを定義しました。その同じファイルで、eth0を「スイッチ」br0にも接続しました。

iface br0 inet static
        bridge_ports eth0

LXC構成ファイルで、コンテナーの物理インターフェースを同じスイッチに接続しました。

lxc.network.type=veth
lxc.network.link=br0

/etc/network/interfacesは、コンピューターの起動時に設定されます(つまり、ホストeth0インターフェイスは常に「スイッチ」に接続されている必要があります)。LXCは、LXCコンテナーの物理ポートを作成し、それに接続します「スイッチ」はbr0という名前です(ブリッジとスイッチの違いは非常に小さいため、この目的のためにそれらを同じと考えてもかまいません。スイッチはブリッジよりも少しスマートです)。

lxcbr0とvirbr0とは何ですか?

lxcbr0とvirbr0はどちらもLXCによって自動的に追加され、どちらも同じものです(virbr0は下位互換性のために保持されている古いバージョンであり、lxcbr0は新しいですが、まったく同じことを行います)。これらの2つのブリッジ(別名「スイッチ」)は、NAT /ルーティング機能も提供します。したがって、仮想マシンをこれらのブリッジに接続すると、ルーターに接続するようなものになります。

別のルーターは必要ないため(すべてのLXCコンテナーはネットワーク上に独自のIPを持ちます)、ビルドドキュメントのホストOSからこれらの未使用のブリッジを両方とも削除しました

8
David Parks