自动添加额外的桥接接口

自动添加额外的桥接接口

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),我已从构建文档中的主机操作系统中删除了这两个未使用的网桥

答案2

这可能会带来一些启示:虚拟以太网设备。可能会给你一些东西像这样: 确定你没有在/var/lib/lxc/with下进行一些配置lxc.network.type = veth吗?

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

相关内容