在 Debian Buster 主机上为 OpenBSD 6.7 guest 虚拟机配置 QEMU 网络

在 Debian Buster 主机上为 OpenBSD 6.7 guest 虚拟机配置 QEMU 网络

我有一台运行 Debian 10 的主机,并使用 QEMU 来运行 OpenBSD 6.7 guest (amd64)。我当前对 QEMU 的调用如下:

$ qemu-system-x86_64 -m 512 -drive if=virtio,file=my_image.qcow2 -enable-kvm -netdev user,id=mynet0,hostfwd=tcp:127.0.0.1:7922-:22 -device virtio-net,netdev=mynet0

在来宾计算机上,我可以很好地访问远程 Subversion 服务器以及 OpenBSD 软件包存储库,但每当我尝试 ping 远程主机时,它就会无限期地挂起,直到我杀死它:

$ ping google.com
^C
--- google.com ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss

此外,我有一项作业涉及通常的 C 套接字编程(在客户机上)。每当我打电话给 时connect,我都会Network is unreachable回来。

这是我在上配置的接口客机:

$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 32768
    index 3 priority 0 llprio 3
    groups: lo
    inet6 ::1 prefixlen 128
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
    inet 127.0.0.1 netmask 0xff000000
vio0: flags=808843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,AUTOCONF4> mtu 1500
    lladdr 52:54:00:12:34:56
    index 1 priority 0 llprio 3
    groups: egress
    media: Ethernet autoselect
    status: active
    inet 10.0.2.15 netmask 0xffffff00 broadcast 10.0.2.255
enc0: flags=0<>
    index 2 priority 0 llprio 3
    groups: enc
    status: active
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33136
    index 4 priority 0 llprio 3
    groups: pflog

和我的路线(也在客机):

$ route show
Routing tables

Internet:
Destination        Gateway            Flags   Refs      Use   Mtu  Prio Iface
default            10.0.2.2           UGS        5        9     -     8 vio0 
base-address.mcast localhost          URS        0        0 32768     8 lo0  
10.0.2/24          10.0.2.15          UCn        2        0     -     4 vio0 
10.0.2.2           52:55:0a:00:02:02  UHLch      3        5     -     3 vio0 
10.0.2.3           52:55:0a:00:02:03  UHLc       0        8     -     3 vio0 
10.0.2.15          52:54:00:12:34:56  UHLl       0        8     -     1 vio0 
10.0.2.255         10.0.2.15          UHb        0        0     -     1 vio0 
127/8              localhost          UGRS       0        0 32768     8 lo0  
localhost          localhost          UHhl       1        2 32768     1 lo0  

Internet6:
Destination        Gateway            Flags   Refs      Use   Mtu  Prio Iface
::/96              localhost          UGRS       0        0 32768     8 lo0  
localhost          localhost          UHhl      10       20 32768     1 lo0  
::ffff:0.0.0.0/96  localhost          UGRS       0        0 32768     8 lo0  
2002::/24          localhost          UGRS       0        0 32768     8 lo0  
2002:7f00::/24     localhost          UGRS       0        0 32768     8 lo0  
2002:e000::/20     localhost          UGRS       0        0 32768     8 lo0  
2002:ff00::/24     localhost          UGRS       0        0 32768     8 lo0  
fe80::/10          localhost          UGRS       0        0 32768     8 lo0  
fec0::/10          localhost          UGRS       0        0 32768     8 lo0  
fe80::1%lo0        fe80::1%lo0        UHl        0        0 32768     1 lo0  
ff01::/16          localhost          UGRS       1        1 32768     8 lo0  
ff01::%lo0/32      fe80::1%lo0        Um         0        1 32768     4 lo0  
ff02::/16          localhost          UGRS       1        1 32768     8 lo0  
ff02::%lo0/32      fe80::1%lo0        Um         0        1 32768     4 lo0

这让我相信我的 QEMU 设置在某种程度上配置错误。

如何修复网络配置以允许访客计算机(正确)与外界通信?

答案1

我猜测-netdev userTCP 和 UDP 可以正常工作,但 ICMP 则不行。尝试tcpdump在主机的接口上运行以查看 ICMP 数据包是否正确转发和/或转换。

我不确定-netdev user在主机上如何工作,但是如果您希望您的来宾计算机表现得更像网络的适当成员,也许可以tap在主机上创建一个接口,将其与主机的物理接口桥接(两者都需要root访问),然后使用-netdev tap将是一个更好的选择。

相关内容