Ubuntu

使用 libvirt 0.8.3 在 Ubuntu 上使用 KVM 從主機到訪客的埠轉發

  • May 28, 2016

主機有一個可用的外部 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 。

據我所知,網路過濾器只能用於限制虛擬網路上發生的事情,它們對埠轉發沒有用處。

引用自:https://serverfault.com/questions/233760