web-dev-qa-db-ja.com

qemu(kvm)でゲストからホストにポートを転送する方法

Qemu/kvmでゲストからホストにポートを転送することは可能ですか?

ゲストからホストへ(アウトから)であり、ホストからゲストへではありません(広く文書化されています)。

私はhostfwd/redirの "反対"を探していると思います。私が使用して理解しているように、ホストのポート8022をゲストに接続する-Net User,hostfwd=tcp::8022-:22は素晴らしいです。ここで「反対」も必要です。ゲストのポート6633への接続をホストに送信する必要があります。ホストでは、いくつかのプロセスがその接続を待機して実行されています。

これは、私が見つけられない--optionで簡単に可能ですか、それとも、ネットワークの理解の欠如を裏切る愚かな要求ですか?

4
vorburger

最小限の作業設定

次の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も機能しますが、私のホストシステムの1つでは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でテスト済み。

これは非常に簡単なはずです。 NATを使用している場合は、パケットを192.168.122.1に送信する転送ルールが必要です。これは、libvirtデフォルトネットワーク上のホストのIPです。ブリッジ設定を使用している場合は、ホストブリッジにIPがあることを確認し、そこにパケットをリダイレクトします。すべての構成はゲストで行う必要があります。

0
dyasny
**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 
0
pawan1491