QEMU 如何 ping 主机网络?

QEMU 如何 ping 主机网络?

我尝试从访客网络 ping 到我的主机网络,但没有成功。

qemu-system-x86_64 -hda debian_squeeze_amd64_standard.qcow2 -netdev user,id=user.0 -device e1000,netdev=user.0

我尝试 ping 一台随机机器:

$ ping 10.0.2.21
Destination Host Unreachable

在来宾中,我只能 ping 通主机 10.0.2.2(DHCP 服务器)。

答案1

QEMU 在 SLIRP 后端支持 ICMP。有必要在内核中为用户允许所谓的 ping 套接字(PF_INET、SOCK_DGRAM、PROT_ICMP)。

很简单

sysctl -w net.ipv4.ping_group_range='0 2147483647'

也可以看看http://lwn.net/Articles/422330/

答案2

从 QEMU wiki 来看,QEMU 在 SLIRP 后端不支持 ICMP。

用户网络 (SLIRP)

这是默认的网络后端,通常是最容易使用的。它不需要根/管理员权限。它有以下限制:

  • 开销很大,所以性能很差
  • ICMP 流量不起作用(因此您无法在来宾内使用 ping)
  • 无法从主机或外部网络直接访问来宾

对于 ICMP 工作,您需要使用 TAP、VDE 或 Socket。

更多信息: QEMU 维基 - 网络还有维基教科书 QEMU 网络部分

还推荐:处理 VLAN 的高级指南

答案3

我发现的最简单、更有效的方法是

总结一下,在主机上:

tunctl -u <username>

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp

ip link set tap0 up
route add -host 192.168.0.20 dev tap0   <-- to be changed by you.

对于客人来说,只需运行它:

kvm -hda ~/fedora.qcow2 -net nic -net tap,ifname=tap0,script=no -usb

或者

qemu -hda ~/fedora.qcow2 -net nic -net tap,ifname=tap0,script=no -usb 

您只需配置一个tap由您的用户拥有的设备,在您的主机和访客之间启用arp proxying和配置。route

作者(和我自己)用它来处理桥接到wlan0Linux 内核不支持的设备的问题。但它在有线连接下也能正常工作。在arp配置中,只需更改wlan0eth0.

访客IP地址必须由您设置,因为DHCP不起作用。

您已经可以 ping 通您的主机了。

答案4

我刚刚通过直接结合我的以下两个答案来实现这一目标:

结合这些,我找到了“主机IP” ip route,然后执行了以下操作:

ping 10.0.2.2

它起作用了。

测试用这个 QEMU + Buildroot 设置在 Ubuntu 19.04 主机上。

相关内容