为什么通过 libvirt hook 进行端口转发会劫持外部 NAT 流量?

为什么通过 libvirt hook 进行端口转发会劫持外部 NAT 流量?

我有一个 Ubuntu 盒子,既充当 NAT 网关又托管 KVM 虚拟机。我按照指南使用 libvirt qemu 挂钩将端口转发到其中一个 KVM 虚拟机,但这似乎也劫持了从任何 NAT 盒子到这些端口的传出连接。

eno0 = 192.168.70.1 = NAT 网关上的内部接口

eno1 = 10.240.45.45 = NAT 网关上的外部接口

virbr0 = 192.168.122.1 = KVM 虚拟机的桥接器

KVM 访客 IP = 192.168.122.81

/etc/libvirt/hooks/qemu:

if [ "${1}" = "myvm" ]; then

   GUEST_IP=192.168.122.81

   if [ "${2}" = "stopped" ] || [ "${2}" = "reconnect" ]; then
        /sbin/iptables -D FORWARD -o virbr0 -d  $GUEST_IP -j ACCEPT
        /sbin/iptables -t nat -D PREROUTING -p tcp -d 10.240.45.45 --dport 443 -j DNAT --to $GUEST_IP:443
   fi
   if [ "${2}" = "start" ] || [ "${2}" = "reconnect" ]; then
        /sbin/iptables -I FORWARD -o virbr0 -d  $GUEST_IP -j ACCEPT
        /sbin/iptables -t nat -A PREROUTING -p tcp -d 10.240.45.45 --dport 443 -j DNAT --to $GUEST_IP:443
   fi
fi

这确实可以正确转发来自指向 10.240.45.45 的任何外部主机的流量。但是,如果我尝试访问任何 HTTPS 页面(包括https://google.com)从 NAT 后面的系统,它会被劫持并重定向到虚拟机,而不是转到外部主机。

为什么它忽略 -d 参数以及如何使其仅转发用于 10.240.45.45 的流量?

相关内容