Berikut adalah cara yang lebih baik untuk mengatur penerusan port, menggunakan skrip kait ( sumber ).
Dalam /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
Anda harus mengatur empat variabel di bagian atas agar sesuai dengan pengaturan libvirt Anda.
Anda perlu me-restart libvirt-bin, yang di ubuntu dilakukan dengan:
sudo sh -c 'service libvirt-bin stop; service libvirt-bin start'
maka Anda perlu me-restart tamu. Di Ubuntu, Anda perlu menyesuaikan /etc/apparmor.d/usr.sbin.libvirtd
untuk memungkinkan skrip kait dijalankan:
Di samping
/usr/sbin/* PUx,
menambahkan
/etc/libvirt/hooks/* PUx,
Kemudian muat ulang apparmor:
sudo service apparmor reload
Mungkin ada cara untuk melakukan konfigurasi otomatis $GUEST_IPADDR
menggunakan virsh / dumpxml / iface-dumpxml, tapi saya belum menemukannya. Atau, IP dapat diatur secara statis di jaringan xml: dokumentasi .
Sejauh yang saya tahu, filter jaringan hanya dapat digunakan untuk membatasi apa yang terjadi pada jaringan virtual, dan mereka tidak berguna untuk penerusan porta.