Ubuntu
使用 libvirt 0.8.3 在 Ubuntu 上使用 KVM 從主機到訪客的埠轉發
主機有一個可用的外部 IP,所以我用 NAT 設置我的 KVM 來賓。
如何設置埠轉發以將外部的一些請求轉發給客人?
我找不到任何關於此的文件。最接近的答案可能是這個答案,但後來也提到在 libvirt 0.8.3 中有更簡單的方法可以做到這一點。有誰知道更目前的方法來做到這一點?
這是使用掛鉤腳本( source )設置埠轉發的更好方法。
在
/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 進行自動配置,但我還沒有找到。或者,可以在網路 xml:文件中靜態設置 IP 。據我所知,網路過濾器只能用於限制虛擬網路上發生的事情,它們對埠轉發沒有用處。