Ecco un modo migliore per impostare il port forwarding, usando uno script hook ( sorgente ).
In /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
Dovresti impostare le quattro variabili in alto per adattarle alla tua configurazione di libvirt.
Dovrai riavviare libvirt-bin, che su Ubuntu è fatto con:
sudo sh -c 'service libvirt-bin stop; service libvirt-bin start'
quindi dovrai riavviare il guest. Su Ubuntu, dovrai regolare /etc/apparmor.d/usr.sbin.libvirtd
per consentire l'esecuzione dello script hook:
Accanto a
/usr/sbin/* PUx,
aggiungere
/etc/libvirt/hooks/* PUx,
Quindi ricaricare apparmor:
sudo service apparmor reload
C'è probabilmente un modo per autoconfigurare $GUEST_IPADDR
usando virsh / dumpxml / iface-dumpxml, ma non l'ho trovato. In alternativa, l'IP può essere impostato staticamente nella rete xml: documentazione .
Per quanto ne so, i filtri di rete possono essere utilizzati solo per limitare ciò che accade sulla rete virtuale e non sono utili per il port forwarding.