eth0
とbr0
の間にブリッジを設定しました。ブリッジは正常に機能しますが、理由や状況が不明な場合は、ブリッジに追加された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)
これは、いくつかの光を当てるかもしれません: 仮想イーサネットデバイス 。あなたに何かを与えるかもしれません このように :確かにあなたは/var/lib/lxc/
の下にlxc.network.type = veth
でいくつかの設定を持っていませんか?
grep -r 'veth' /var/lib/lxc/
将来の読者のために、LXCの構成とブリッジの理解に協力している同僚にこのメールを送りました。
ええと、私は今日のほとんどをLXCでのネットワーキングに夢中になって過ごしましたが、今では状況がはるかに明確になっているので、学んだことを伝えたいと思いました。
最初はいくつかの定義なので、私たちは何を見ているのかを知っています(br0やvirbr0のようなブリッジとeth0のようなインターフェースの違いを本当に理解していませんでした、そしてvethILNaLo
のようなそれらのインターフェースが何であるかを私は間違いなく知りませんでしたにとって)。
ブリッジ
ブリッジはifconfigのインターフェースとして表示されますが、ブリッジは他の2つのネットワークを接続するだけで、それ自体はネットワークインターフェースではありません。 brctl show
を使用してブリッジを表示および変更し、/ etc/networking/interfacesで永続的に構成できます。
ブリッジはスイッチのように考えるのが一番です。
私たちが見る橋の例:
ネットワークインターフェース
インターフェイスは実際には単一のホストに割り当てられます。単一のインターフェイスを複数のホストに割り当てることはできません。ホストは、インターフェースへのネットワークトラフィックを送受信します。選択するインターフェースはルーティングテーブルによって異なります。route
がこれを表示します。
ブリッジングが必要な理由は、eth0がホストOSに物理的に接続されており、コンテナやその他の仮想マシンにも接続できないためです。
表示される物理インターフェイスの例:
その2番目のものについてのいくつかのメモ:vethILNaLo
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からこれらの未使用のブリッジを両方とも削除しました