Ось кращий спосіб налаштування переадресації портів, використовуючи сценарій гака ( джерело ).
В /etc/libvirt/hooks/qemu
:
#!/bin/sh
GUEST_NAME=
HOST_PORT=
GUEST_IPADDR=
GUEST_PORT=
if [ "$1" = "$GUEST_NAME" ]; then
if [ "$2" = start ]; then
iptables -t nat -A PREROUTING -p tcp --dport "$HOST_PORT" \
-j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
iptables -I FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
--state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
elif [ "$2" = stopped ]; then
iptables -t nat -D PREROUTING -p tcp --dport "$HOST_PORT" \
-j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
iptables -D FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
--state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
fi
fi
Ви повинні встановити чотири змінні вгорі, щоб відповідати вашим налаштуванням libvirt.
Вам потрібно буде перезапустити libvirt-bin, що в ubuntu виконується за допомогою:
sudo sh -c 'service libvirt-bin stop; service libvirt-bin start'
тоді вам потрібно буде перезапустити гостя. У Ubuntu вам потрібно буде налаштувати, /etc/apparmor.d/usr.sbin.libvirtd
щоб дозволити виконання сценарію гака:
Поруч з
/usr/sbin/* PUx,
додавати
/etc/libvirt/hooks/* PUx,
Потім перезавантажте apparmor:
sudo service apparmor reload
Напевно, існує спосіб автоконфігурування $GUEST_IPADDR
за допомогою virsh / dumpxml / iface-dumpxml, але я не знайшов його. В якості альтернативи, IP може бути встановлений статично в мережі xml: документація .
Наскільки я можу сказати, мережеві фільтри можна використовувати лише для обмеження того, що відбувається у віртуальній мережі, і вони не корисні для переадресації портів.