QEMU 如何ping 主机网络?

Mai*_*oID 12 linux networking qemu

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

qemu-system-x86_64 -hda debian_squeeze_amd64_standard.qcow2 -netdev user,id=user.0 -device e1000,netdev=user.0
Run Code Online (Sandbox Code Playgroud)

我尝试 ping 一个随机机器:

$ ping 10.0.2.21
Destination Host Unreachable
Run Code Online (Sandbox Code Playgroud)

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

小智 12

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

很简单

sysctl -w net.ipv4.ping_group_range='0 2147483647'
Run Code Online (Sandbox Code Playgroud)

另见http://lwn.net/Articles/422330/


Vic*_*lio 8

从 QEMU wiki,QEMU 不支持 SLIRP 后端的 ICMP。

用户网络 (SLIRP)

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

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

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

更多信息: QEMU Wiki - 网络以及维基教科书 QEMU 网络部分

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


Lui*_*uis 5

我为自己找到的最简单、更有效的方法就是这个

总结一下,在主机上:

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.
Run Code Online (Sandbox Code Playgroud)

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

kvm -hda ~/fedora.qcow2 -net nic -net tap,ifname=tap0,script=no -usb
Run Code Online (Sandbox Code Playgroud)

或者

qemu -hda ~/fedora.qcow2 -net nic -net tap,ifname=tap0,script=no -usb 
Run Code Online (Sandbox Code Playgroud)

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

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

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

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