Возможно ли и как перенаправить порт с гостя на хост в qemu / kvm?
Обратите внимание, я имею в виду (вне) от гостя к хосту, а не от хоста к гостю (это широко задокументировано).
Я думаю, что ищу "противоположность" hostfwd / redir .. Как я использую и понимаю -net user,hostfwd=tcp::8022-:22
который соединяет порт 8022 на ХОЗЯИНЕ с ГОСТЕМ - отлично. Теперь мне также нужно "противоположное", и мне нужно, чтобы соединения, сделанные с портом 6633 в ГОСТЕ, выходили на ХОСТ, где какой-то процесс работает в ожидании соединений на нем.
Возможно ли это с помощью некоторого - варианта, который я не могу найти, или это глупый запрос, выдающий мое отсутствие понимания работы в сети - как будто это невозможно?
Минимальная рабочая настройка
Я могу получить доступ как к хосту, так и к внешней сети с помощью этой команды 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.
**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
Это должно быть очень просто. Если вы используете NAT, вам просто нужно правило пересылки, которое отправляло бы пакеты на 192.168.122.1, это IP-адрес хоста в сети по умолчанию libvirt. Если вы используете мостовую установку, убедитесь, что у хост-моста есть IP-адрес, и перенаправьте туда пакеты. Все настройки должны выполняться на гостевой системе.