Hier ist eine bessere Möglichkeit, die Portweiterleitung mithilfe eines Hook-Skripts ( Quelle ) einzurichten .
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
Sie sollten die vier Variablen oben einstellen, damit sie zu Ihrem libvirt-Setup passen.
Du musst libvirt-bin neu starten, was auf Ubuntu erledigt ist mit:
sudo sh -c 'service libvirt-bin stop; service libvirt-bin start'
Dann müssen Sie den Gast neu starten. Unter Ubuntu müssen Sie die Einstellungen anpassen /etc/apparmor.d/usr.sbin.libvirtd
, damit das Hook-Skript ausgeführt werden kann:
Neben an
/usr/sbin/* PUx,
anhängen
/etc/libvirt/hooks/* PUx,
Dann lade apparmor neu:
sudo service apparmor reload
Es gibt wahrscheinlich eine Möglichkeit zur $GUEST_IPADDR
automatischen Konfiguration mit virsh / dumpxml / iface-dumpxml, aber ich habe es nicht gefunden. : Alternativ kann die IP statisch im Netzwerk xml eingestellt werden Dokumentation .
Soweit ich weiß, können Netzwerkfilter nur dazu verwendet werden, die Vorgänge im virtuellen Netzwerk einzuschränken, und sie sind für die Portweiterleitung nicht hilfreich.