QEMU의 hostfwd 옵션에 때때로 루트 액세스가 필요하고 때로는 필요하지 않은 이유

QEMU의 hostfwd 옵션에 때때로 루트 액세스가 필요하고 때로는 필요하지 않은 이유

이 QEMU 명령에는 루트 액세스가 필요하지 않습니다.

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을 추가하려면 루트 액세스가 필요합니다.

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

루트 액세스가 없으면 다음 오류 메시지가 나타납니다.

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 포트 액세스가 보호된다는 의미입니까?

답변1

포트 < 1024는특권, 루트 프로세스만(또는CAP_NET_BIND_SERVICE 능력Linux에서는 소켓을 바인딩할 수 있습니다.

qemu의 호스트 전달은 qemu가 호스트의 포트에 소켓을 바인딩하여 작동합니다. qemu 프로세스가 추가 제한 없이 일반 사용자로 실행 중인 경우 80 또는 443에 바인딩할 수 없습니다.

Linux를 사용하는 경우 다음을 setcap CAP_NET_BIND_SERVICE+ep /path/to/qemu-system-x86_64사용하여 이 문제를 해결할 수 있습니다.아니요추천하다.

관련 정보