Qemu
如何從 QEMU 來賓 ping 到外部 URL?
網路執行良好,因為我可以在 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 主機上測試:
- 這個 Buildroot 設置
- debootstrap:使用 debootstrap 創建可啟動的 Debian 映像
完成主機設置後,重新啟動電腦,而不是僅僅註銷並登錄,然後它就可以正常工作了。