我有一个 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 的流量?