Qemu/kvmでゲストからホストにポートを転送することは可能ですか?
ゲストからホストへ(アウトから)であり、ホストからゲストへではありません(広く文書化されています)。
私はhostfwd/redirの "反対"を探していると思います。私が使用して理解しているように、ホストのポート8022をゲストに接続する-Net User,hostfwd=tcp::8022-:22
は素晴らしいです。ここで「反対」も必要です。ゲストのポート6633への接続をホストに送信する必要があります。ホストでは、いくつかのプロセスがその接続を待機して実行されています。
これは、私が見つけられない--optionで簡単に可能ですか、それとも、ネットワークの理解の欠如を裏切る愚かな要求ですか?
最小限の作業設定
次の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があることを確認し、そこにパケットをリダイレクトします。すべての構成はゲストで行う必要があります。
**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