追加ブリッジインターフェイスを自動的に追加

追加ブリッジインターフェイスを自動的に追加

eth0vethXXXXXXとvethXXXXXXの間にブリッジを作成し、ブリッジはうまく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)

答え1

将来の読者のために、私はLXCを構築し、ブリッジングを理解するために私と協力しているいくつかの同僚にこのEメールを書きました。


まあ、私は今日のほとんどの時間LXCでネットワーキングするのに忙しく、状況がはるかに明確になったので、私が学んだことを伝える必要があると思いました。

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

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

ブリッジをスイッチとして考えるのが最善です。

私たちが見た橋の例:

  • br0
  • lxcbr0
  • ウイルス0

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

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

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

私たちが見た物理インターフェイスの例:

  • イーサネット0
  • vethILNaLo

2番目の項目に関する注意事項:vethILNaLo

  • これは、起動されるLXCコンテナごとに作成された物理インターフェイスです。コンテナに接続され、コンテナ内でeth0と見なされます。
  • LXC 構成ファイルでそれを定義するたびに、別の物理インターフェースが作成され、コンテナーに接続されます。これは、コンテナ内のインターフェイス名を設定するためにlxc.network.type=veth使用できます(デフォルトはeth0、eth1などは通常機能します)。lxc.network.name = eth0
  • このインターフェイスが作成されると、何も接続されず、まったく接続されていないように見えます。

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

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

br0を定義して作成するときに、デフォルト/etc/network/interfacesでスイッチを定義しました。同じファイル内の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によって自動的に追加され、同じです。この2つのブリッジ(「スイッチ」とも呼ばれる)は、NAT /ルーティング機能も提供します。したがって、仮想マシンをこれらのブリッジに接続すると、ルータに接続するのと同じです。

他のルータが必要ないため(すべてのLXCコンテナはネットワークに独自のIPを持つため)、ビルドドキュメントのホストOSで未使用の2つのブリッジを削除しました。

答え2

これは少し悟りをもたらすことができます:仮想イーサネットデバイス。あなたに何かを与えるかもしれません。このように/var/lib/lxc/:で何も設定していませんかlxc.network.type = veth

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

関連情報