最终目标(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
也许一些源路由策略是为了?
谢谢