我尝试从访客网络 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'
答案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
作者(和我自己)用它来处理桥接到wlan0
Linux 内核不支持的设备的问题。但它在有线连接下也能正常工作。在arp
配置中,只需更改wlan0
为eth0
.
访客IP地址必须由您设置,因为DHCP
不起作用。
您已经可以 ping 通您的主机了。
答案4
我刚刚通过直接结合我的以下两个答案来实现这一目标:
- 首先,了解如何使用其他工具(例如 )将访客网络连接到主机
wget
,这更容易工作,如下所示:https://serverfault.com/questions/769874/how-to-forward-a-port-from-guest-to-host-in-qemu-kvm/951835#951835 - 然后,
ping
特别是比其他人提到的 TCP IP 工具更难工作wget
,但我也进行了管理,如下所示:如何从 QEMU 来宾 ping 到外部 URL?
结合这些,我找到了“主机IP” ip route
,然后执行了以下操作:
ping 10.0.2.2
它起作用了。
测试用这个 QEMU + Buildroot 设置在 Ubuntu 19.04 主机上。