QEMU 的这个命令不需要 root 权限:
qemu-system-x86_64 -m 3072 -smp 2 -hda Debian9.qcow2 -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22,hostfwd=tcp::9000-:9000
当我添加 443 和 80 端口时,我需要 root 访问权限:
sudo qemu-system-x86_64 -m 3072 -smp 2 -hda Debian9.qcow2 -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22,hostfwd=tcp::9000-:9000,hostfwd=tcp::443-:443,hostfwd=tcp::80-:80
如果没有 root 访问权限,我会收到此错误消息:
qemu-system-x86_64: -netdev user,id=net0,hostfwd=tcp::5555-:22,hostfwd=tcp::9000-:9000,hostfwd=tcp::443-:443,hostfwd=tcp::80-:80: Could not set up host forwarding rule 'tcp::80-:80'
这是否意味着 QEMU 软件中保护了某种 TCP 端口访问?
< 1024 的端口是特权端口,只有根进程(或 Linux 中具有
CAP_NET_BIND_SERVICE
功能的进程)才能将套接字绑定到它们。qemu 中的主机转发通过 qemu 将套接字绑定到主机上的端口来工作;如果 qemu 进程作为普通用户运行而没有额外的上限,它将无法绑定到 80 或 443。
如果您使用的是 Linux,则可以使用 解决此问题
setcap CAP_NET_BIND_SERVICE+ep /path/to/qemu-system-x86_64
,但我不建议这样做。