如何在 qemu(kvm)中将端口从客户机转发到主机

如何在 qemu(kvm)中将端口从客户机转发到主机

在 qemu/kvm 中,是否可能以及如何将端口从客户机转发到主机?

请注意,我的意思是从客户到主机,而不是从主机到客户(这是广泛记录的)。

我想我正在寻找 hostfwd/redir 的“对立面”。就像我使用并理解-net user,hostfwd=tcp::8022-:22哪个将 HOST 上的端口 8022 连接到 GUEST - 很棒。现在我也想要“对立面”,并且需要将与 GUEST 中的端口 6633 建立的连接发送到 HOST,其中正在运行某个进程以等待该连接。

我找不到某些 --option 能轻易实现这一点吗,或者这是一个愚蠢的请求,暴露了我缺乏网络理解 - 就像那样是不可能的?

答案1

最低限度的工作设置

我可以使用此 QEMU 命令访问主机和外部网络:

qemu-system-x86_64 \
  -append 'root=/dev/vda console=ttyS0' \
  -device rtl8139,netdev=net0 \
  -drive file=./out/buildroot/build/default/x86_64/images/rootfs.ext2.qcow2,format=qcow2,if=virtio,snapshot \
  -enable-kvm \
  -kernel ./out/linux/default/x86_64/arch/x86/boot/bzImage \
  -machine pc \
  -netdev user,id=net0 \
  -nographic \
  -serial mon:stdio \
;

然后在主机上,在端口 8000 上设置文件服务器:

python -m SimpleHTTPServer 8000

nc -kl 0.0.0.0 8000也可以工作,但在我的一个主机系统上,它只能与 一起工作0.0.0.0,而不能localhost

现在在客:

# Done by init in most non-minimal systems.
ifup -a
ip route

得出:

default via 10.0.2.2 dev eth0
10.0.2.0/24 dev eth0 scope link  src 10.0.2.15

它告诉我们我们需要的端口是10.0.2.2

cd /tmp
wget 10.0.2.2:8000
cat index.html

使用以下图像进行测试:

在 Ubuntu 18.10 主机、QEMU 2.12 上测试。

答案2

这应该非常简单。如果您使用的是 NAT,那么您只需要一条转发规则,将数据包发送到 192.168.122.1,这是 libvirt 默认网络上的主机 IP。如果您使用的是桥接设置,请确保主机桥有一个 IP,并将数据包重定向到那里。所有配置都需要在客户机上完成。

答案3

**Try the below command for forwarding port from guest to host or vice-versa**
 # forwarding guest 8055 port to host 8055 port
    user@host_machine:~$ ssh -L 8055:localhost:8055 guest@IP_ADDRESS
    user@host_machine:~$ telnet localhost 8055  # verify by telnet command

    # forwarding host 8055 port to guest 8055 port
    user@host_Machine:~$ ssh -R 8055:localhost:8055 guest@IP_ADDRESS

    user@Guest_Machine:~$ telnet localhost 8055 

相关内容