我有一台运行 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 user
TCP 和 UDP 可以正常工作,但 ICMP 则不行。尝试tcpdump
在主机的接口上运行以查看 ICMP 数据包是否正确转发和/或转换。
我不确定-netdev user
在主机上如何工作,但是如果您希望您的来宾计算机表现得更像网络的适当成员,也许可以tap
在主机上创建一个接口,将其与主机的物理接口桥接(两者都需要root
访问),然后使用-netdev tap
将是一个更好的选择。