Qemu

如何從 QEMU 來賓 ping 到外部 URL?

  • October 20, 2019

網路執行良好,因為我可以在 QEMU 內部進行:

wget example.com

但如果我這樣做:

ping example.com

它只顯示初始標題並掛起:

PING example.com (93.184.216.34): 56 data bytes

我知道ping需要一些額外的權限才能執行,如:https ://stackoverflow.com/questions/37512291/how-is-ping-for-non-root-user-implemented-on-linux-distros

我在主機上嘗試了https://wiki.qemu.org/Documentation/Networking#Enabling_ping_in_the_guest.2C_on_Linux_hosts上的程序:

sudo groupadd unpriv_ping
sudo usermod --append --groups unpriv_ping "$(id -nu)"
GROUP_ID="$(getent group unpriv_ping | cut -f 3 -d :)"
printf "net.ipv4.ping_group_range = ${GROUP_ID} ${GROUP_ID}\n" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

然後我註銷並再次登錄,但沒有幫助。

也沒有:

setcap cap_net_raw+eip qemu-system-x86_64

我完整的 QEMU 命令行是:

x86_64-softmmu/qemu-system-x86_64 \
 -device \
 rtl8139,netdev=net0 \
 -gdb \   
 tcp::45457 \                                                                                                               
 -kernel \   
 /home/ciro/bak/git/linux-kernel-module-cheat/out/linux/default/x86_64/arch/x86/boot/bzImage \
 -m \                                                                                                                                           
 256M \
 -monitor \                                                        
 telnet::45454,server,nowait \
 -netdev \
 user,hostfwd=tcp::45455-:45455,hostfwd=tcp::45456-:22,id=net0 \         
 -no-reboot \
 -smp \
 1 \
 -trace \        
 enable=pr_manager_run,file=/home/ciro/bak/git/linux-kernel-module-cheat/out/run/qemu/x86_64/0/trace.bin \                                         
 -virtfs \                                                                                                                                            
 local,path=/home/ciro/bak/git/linux-kernel-module-cheat/data/9p,mount_tag=host_data,security_model=mapped,id=host_data \
 -virtfs \                                      
 local,path=/home/ciro/bak/git/linux-kernel-module-cheat/out,mount_tag=host_out,security_model=mapped,id=host_out \
 -virtfs \                                                                      
 local,path=/home/ciro/bak/git/linux-kernel-module-cheat/rootfs_overlay,mount_tag=host_rootfs_overlay,security_model=mapped,id=host_rootfs_overlay \
 -serial \                                                                    
 mon:stdio \                                                                    
 -M \                                                                           
 pc \                                          
 -device \                                              
 edu \                              
 -append \                                                                                                                      
 'root=/dev/vda nopat console_msg_format=syslog nokaslr norandmaps panic=-1 printk.devkmsg=on printk.time=y console=ttyS0' \
 -nographic \                                                                
 -drive \                                                                                      
 file=/home/ciro/bak/git/linux-kernel-module-cheat/out/buildroot/build/default/x86_64/images/rootfs.ext2.qcow2,format=qcow2,if=virtio,snapshot \
; 

使用以下圖像在 Ubuntu 18.04 主機上測試:

完成主機設置後,重新啟動電腦,而不是僅僅註銷並登錄,然後它就可以正常工作了。

引用自:https://unix.stackexchange.com/questions/473448