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 适配器之一时的 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 并找出桥接。
好吧,我今天大部分时间都在 LXC 中忙于网络,现在事情变得清晰多了,所以我想我应该把我学到的东西传授给大家。
首先是几个定义,这样我们就知道我们在看什么(我并没有真正理解像 br0 或 virbr0 这样的桥和像 eth0 这样的接口之间的区别,而且我绝对不知道这些接口的用途vethILNaLo
是什么)。
桥
网桥在 ifconfig 中显示为接口,但网桥除了连接 2 个其他网络之外什么也不做,它本身并不是一个网络接口。您可以使用 查看和更改网桥brctl show
,并在 /etc/networking/interfaces 中永久配置它们。
最好把桥想象成一个开关。
我们看到的桥梁示例:
- br0
- lxcbr0
- 病毒0
网络接口
接口实际上分配给单个主机,单个接口不能分配给多个主机。主机向接口发送和接收网络流量。它选择的接口取决于路由表,route
将向您展示这一点。
我们需要桥接的原因是 eth0 物理连接到主机操作系统,并且不能也连接到容器或其他虚拟机。
我们看到的物理接口示例:
- 以太网0
- vethILNaLo
关于第二个的一些注释:vethILNaLo
- 这是为每个启动的 LXC 容器创建的物理接口,它附加到容器并在容器内视为 eth0
- 每次您
lxc.network.type=veth
在 LXC 配置文件中定义时,它都会创建另一个物理接口并将其附加到容器中,您可以使用它lxc.network.name = eth0
来设置容器内接口的名称(默认值 eth0、eth1 等通常有效) - 当这个接口被创建时,它没有连接到任何东西,就像它根本没有插入一样
使用网桥将 vethILNaLo 连接到网络
请记住,网桥就像基于软件的交换机。如果将两个接口插入其中,它们的连接方式与交换机连接物理计算机的方式相同。
在/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 是较新的版本,但它们执行完全相同的操作)。这两个网桥(又名“交换机”)还提供 NAT/路由功能。因此,如果您将虚拟机连接到这些网桥,就像将其连接到路由器一样。
由于我们不需要另一个路由器(我们所有的 LXC 容器都将在网络上拥有自己的 IP),我已从构建文档中的主机操作系统中删除了这两个未使用的网桥