Назад | Перейти на главную страницу

Как перенаправить порт с гостя на хост в qemu (kvm)

Возможно ли и как перенаправить порт с гостя на хост в 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-адрес, и перенаправьте туда пакеты. Все настройки должны выполняться на гостевой системе.