我正在跟进这篇关于使用 libvirt 和 KVM 桥接网络的优秀文章,但是我缺乏一些基础知识来完全理解/遵循它。
文章说,
- 任何物理接口都不应该添加到 virbr0 网桥,因为它使用 NAT 来提供连接。
- 当我们创建和启动虚拟机时,虚拟接口将添加到桥中。
最重要的是,
- 将物理以太网接口添加到网桥时,您不能使用主以太网接口。
- 因此我们必须使用一个额外的接口。
我不太清楚物理接口、虚拟接口、主接口和附加接口之间的关系,因此当文章说他正在使用附加接口enp0s29u1u1时,这是一个以太网转USB适配器提供的接口。我完全不知道还有什么附加界面我应该用于我的情况,这是一个普通的 Debian,带有一个以太网卡。
请帮忙。
答案1
“物理接口”是指计算机上的实际网络设备,即可以插入以太网电缆或无线网络设备的设备。
“虚拟接口”是指不与特定物理设备关联的网络接口:so、vlan 接口、网桥、tun/tap 接口等。
您的“主接口”是与您系统的主 IP 地址(和默认路由)关联的网络接口。
在这种情况下,“附加接口”是指除主接口之外的任何物理接口。
这两个说法...
- 任何物理接口都不应该添加到 virbr0 网桥,因为它使用 NAT 来提供连接。
- 当我们创建和启动虚拟机时,虚拟接口将添加到桥中。
...是正确的。该virbr0
网桥与 libvirt“默认”网络关联,并使用 NAT 将虚拟机连接到外界;您不想向此网桥添加物理接口。
当您启动虚拟机并将其添加到网桥时,Libvirt 会创建 tun/tap 设备。
然而,下面的声明...
- 将物理以太网接口添加到网桥时,您无法使用主以太网接口。
……有点简化。你能使用主以太网接口作为网桥的一部分,但该过程比使用辅助接口时稍微复杂一些(并且是意外禁用互联网连接的好方法)。一般来说,您需要:
- 创建桥接设备
- 将您的以太网接口添加到网桥
- 使用之前与主界面关联的 IP 地址配置桥接设备
例如,在我的系统上,eth0
看起来像这样:
# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:9b:a0:2a brd ff:ff:ff:ff:ff:ff
altname enp1s0
inet 192.168.122.64/24 brd 192.168.122.255 scope global dynamic noprefixroute eth0
valid_lft 3570sec preferred_lft 3570sec
inet6 fe80::d6:992e:d74a:c05a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
这是我的系统上唯一的物理接口。我们还需要知道我们的默认路由:
# ip route
default via 192.168.122.1 dev eth0 proto dhcp metric 100
192.168.122.0/24 dev eth0 proto kernel scope link src 192.168.122.64 metric 100
要添加eth0
到桥接器,我首先创建一个桥接设备:
# ip link add br-example type bridge
然后添加eth0
到网桥并从中删除任何现有地址eth0
:
# ip link set eth0 master br-example
# ip addr flush eth0
添加原来的地址eth0
并br-example
恢复默认路由:
# ip addr add 192.168.122.64/24 dev br-example
# ip link set br-example up
# ip route add default via 192.168.122.1
此时,(a) 我有一个网桥br-example
,(b)eth0
是该网桥的成员,并且 (c) 我仍然具有连接(通过网桥)eth0
。按照链接文章中的说明,我可以创建一个与其关联的 libvirt 网络br-example
并开始将虚拟机附加到它;从网络角度来看,这些机器看起来就像物理上连接到本地网络的任何其他设备。
当然,上述过程不会导致持久性更改;这如何因发行版而异,并且您链接到的文章提供了该过程的良好概述。