我正在使用 KVM/qemu 在 Debian 主机内运行 Debian 客户机。系统上还有更多客户机(总共三个)。我设置了辅助 IP 地址,因此我不必担心端口转发等问题。不幸的是,这种设置似乎有其自身的问题。
我建立了桥接网络,主要使用本指南:https://wiki.ubuntu.com/KvmWithBridge。它在原理上是可行的,因为服务器是可访问的并且可以访问互联网,但使用网络很慢。即使服务器不忙,从服务器下载文件的速度也仅为~150 KB/s,而不是服务器能够达到的~10 MB/s(与主机和其他来宾一起测试)。上传似乎没问题,但受到我家上传速度的限制。游戏服务器,尤其是 Minecraft,有很大的延迟。我还用 ping 测试了连接,从我的家用电脑到服务器,反之亦然,数据包丢失率约为 15-20%。
其他客人没有遇到这些问题,所以我怀疑我的设置一定有错误。
ifconfig 的输出显示了很多冲突:
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet <secondaryIP> netmask 255.255.255.248 broadcast <secondaryBroadcast>
inet6 <secondaryIP6> prefixlen 64 scopeid 0x20<link>
ether <secondaryMAC> txqueuelen 1000 (Ethernet)
RX packets 96833 bytes 56268227 (53.6 MiB)
RX errors 0 dropped 558 overruns 0 frame 0
TX packets 89692 bytes 93703188 (89.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 479793
这是重启后不久发生的,但即使在较长的正常运行时间内,比例仍保持在约 1:6。
主机接口的配置(/etc/network/interfaces):
auto br0
iface br0 inet static
address <primaryIP>
netmask 255.255.255.224
gateway <primaryGateway>
bridge_ports enp2s0
bridge_stp off
bridge_maxwait 5
iface enp2s0 inet6 static
address <primaryIP6>
netmask 64
gateway fe80::1
以及访客界面:
auto ens3
iface ens3 inet static
address <secondaryIP>
netmask 255.255.255.248
gateway <secondaryGateway>
两个interfaces.d文件夹中都没有接口定义。
/etc/libvirt/qemu/guest.xml中的接口配置:
<interface type='bridge'>
<mac address='<secondaryMAC>'/>
<source bridge='br0'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
最后是主机上的 ifconfig 的输出:
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet <primaryIP> netmask 255.255.255.224 broadcast <primaryBroadcast>
inet6 <primaryIP6> prefixlen 64 scopeid 0x20<link>
ether <primaryMAC> txqueuelen 1000 (Ethernet)
RX packets 1864843254 bytes 213533425526 (198.8 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4441624847 bytes 564472843883 (525.7 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether <primaryMAC> txqueuelen 1000 (Ethernet)
RX packets 2467024205 bytes 288208293294 (268.4 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5414543354 bytes 732866918235 (682.5 GiB)
TX errors 1 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.1 netmask 255.255.255.0 broadcast 192.168.100.255
ether <anotherMAC_1> txqueuelen 1000 (Ethernet)
RX packets 4426221535 bytes 499401359892 (465.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1847079213 bytes 234714216395 (218.5 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 <anotherIP6_1> prefixlen 64 scopeid 0x20<link>
ether <anotherMAC_2> txqueuelen 1000 (Ethernet)
RX packets 4397127572 bytes 497903595847 (463.7 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1834595176 bytes 223010663369 (207.6 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vnet1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 <anotherIP6_2> prefixlen 64 scopeid 0x20<link>
ether <anotherMAC_3> txqueuelen 1000 (Ethernet)
RX packets 29093977 bytes 63464879814 (59.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 41770457 bytes 13226829212 (12.3 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vnet2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 <notQuiteSecondaryIP6> prefixlen 64 scopeid 0x20<link>
ether <notQuiteSecondaryMAC> txqueuelen 1000 (Ethernet)
RX packets 937466500 bytes 164125096519 (152.8 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 583314253 bytes 47334133493 (44.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
其中主 IP 是主机的 IP,辅助 IP 是仅供我的客户机使用的附加 IP。
vnet 接口的 IP6 似乎基于它们的 MAC 地址,至少对于我的客户来说,这里仅在第一组(fe 而不是 00)中有所不同。
此设置有问题吗?我是否应该检查其他配置是否存在问题?
答案1
我将客户机的网络适配器切换为“virtio”驱动程序,这是我在其他几篇帖子中看到的建议。通过配置文件更改它不起作用(可能是我的错误),但通过 virt-manager 更改它却成功了。
现在的下载速度达到了我预期的 10 MByte/s,并且使用 Minecraft 进行的快速测试也显示出了很大的改善。