KVM端口转发给guest(iptables) - 只部分上网?

时间:2013-09-16 17:45:17

标签: iptables kvm

我对KVM很陌生并在这里阅读了很多帖子,但在我的案例中没有一个是有用的。

我在KVM主机上有一个guest虚拟机,并希望将端口80从主机转发到guest虚拟机中的端口80。我用iptables做了这个:

Guest_name=theguest
Guest_ipaddr=192.168.122.43
Host_port=( '80' )
Guest_port=( '80' )
length=$(( ${#Host_port[@]} - 1 ))
if [ "${1}" = "${Guest_name}" ]; then
   if [ "${2}" = "stopped" -o "${2}" = "reconnect" ]; then
       for i in `seq 0 $length`; do
               iptables -t nat -D PREROUTING -p tcp --dport ${Host_port[$i]} -j DNAT --to ${Guest_ipaddr}:${Guest_port[$i]}
               iptables -D FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --state NEW -m tcp --dport ${Guest_port[$i]} -j ACCEPT
       done
   fi
   if [ "${2}" = "start" -o "${2}" = "reconnect" ]; then
       for i in `seq 0 $length`; do
               iptables -t nat -A PREROUTING -p tcp --dport ${Host_port[$i]} -j DNAT --to ${Guest_ipaddr}:${Guest_port[$i]}
               iptables -I FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --state NEW -m tcp --dport ${Guest_port[$i]} -j ACCEPT
       done
   fi
fi

总体而言,这可行,但并非总是如此。对apache的http请求正在运行,因此规则似乎是正确的。如果我对http地址发出wget请求,则没有任何反应。如果我对ftp地址执行wget请求(使用--user = theusername --password = thepassword),则可以正常工作。

最大的问题:apt-get update无效。它所做的就是:

0% [Verbindung mit de.archive.ubuntu.com (141.30.13.20)] [Verbindung mit security.ubuntu.com (91.189.91.13)]

此阶段只有Ctrl-C有用。

KVM xml文件中的网络配置如下:

<interface type='network'>
  <source network="default"/>
  <mac address='themacaddress'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

有人可以帮忙吗?非常感谢提前!

0 个答案:

没有答案