eth0
vethXXXXXXと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/