带有GRE隧道的Proxmox NAT作为外部接口

最终目标(ASCII图)

WAN->Router->Server->GRE Tunnel->VM network->VM #1, etc.

我应该先解释一些事情。

我有一台运行Proxmox(Debian 8.7 x64)的服务器。 它与互联网的连接是eth0(在GRE协议转发的NAT之后)

GRE接口(gre1)由运行在主机上的自定义守护进程创build和监视,但不会触及防火墙规则或路由。 本机在GRE隧道中的IP为192.168.168.2,远端为192.168.168.1

我有一个networking桥接设置(vmbr0)。 这是相关的configuration。

 auto vmbr0 iface vmbr0 inet static address 10.2.0.1 netmask 255.255.255.0 bridge_ports none bridge_stp off bridge_fd 0 post-up echo 1 > /proc/sys/net/ipv4/ip_forward post-up iptables -t nat -A POSTROUTING -s '10.2.0.0/24' -o gre1 -j MASQUERADE post-down iptables -t nat -D POSTROUTING -s '10.2.0.0/24' -o gre1 -j MASQUERADE 

在GRE隧道另一端的机器上,我已经有iptablesconfiguration为正确的NAT,并且可以通过在主机上使用ping -I gre1来ping 192.168.168.1和外部目的地,但是在一个虚拟机内我可以ping 192.168.168.2和。 1但不在外面的目的地。

我怀疑这个解决scheme是一些路由表foo,因为我之前通过用192.168.168.1replace主机上的默认网关路由并通过192.168.1.1(我的路由器)手动创buildGRE隧道端点的路由, ,但是这也会强制所有通过GRE隧道的主机stream量,这是我不想要的,只有VMstream量。

为了强制所有stream量,包括通过GRE隧道的主机stream量,我做了这个。

 ip route add GRE_TUNNEL_ENDPOINT via 192.168.1.1 # to avoid running the GRE tunnel in itself ip route change default via 192.168.168.1 

也许一些源路由策略是为了?

谢谢