นี่เป็นวิธีที่ดีกว่าในการตั้งค่าการส่งต่อพอร์ตโดยใช้ hook script ( แหล่งที่มา )
ใน/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
เพื่อให้ hook script สามารถทำงานได้:
ถัดไปเพื่อ
/usr/sbin/* PUx,
ผนวก
/etc/libvirt/hooks/* PUx,
จากนั้นโหลด apparmor ใหม่:
sudo service apparmor reload
อาจเป็นวิธีการกำหนดค่าอัตโนมัติ$GUEST_IPADDR
โดยใช้ virsh / dumpxml / iface-dumpxml แต่ฉันไม่พบมัน อีกวิธีหนึ่งคือ IP ที่สามารถตั้งค่าแบบคงที่ในรูปแบบ XML เครือข่าย: เอกสาร
เท่าที่ฉันสามารถบอกได้ตัวกรองเครือข่ายสามารถใช้เพื่อ จำกัด สิ่งที่เกิดขึ้นบนเครือข่ายเสมือนเท่านั้นและพวกเขาไม่มีประโยชน์สำหรับการส่งต่อพอร์ต