Proxmox NAT 使用 GRE 隧道作为外部接口

Proxmox NAT 使用 GRE 隧道作为外部接口

最终目标(ASCII 图)

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

我应该先解释一些事情。

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

GRE 接口 (gre1) 由主机上运行的自定义守护程序创建和监控,但除此之外不涉及防火墙规则或路由。GRE 隧道中此机器的 IP 为 192.168.168.2,远程端点为 192.168.168.1

我有一个网桥设置 (vmbr0)。以下是相关配置。

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 隧道的另一端的机器上,我已经将 iptables 正确配置为 NAT,并且可以通过在主机上使用 ping -I gre1 来 ping 192.168.168.1 和外部目的地,但是在 VM 内部,我可以 ping 192.168.168.2 和 .1,但不能 ping 外部目的地。

我怀疑这个问题的解决方案是一些路由表 foo,因为我之前确实通过用 192.168.168.1 替换主机上的默认网关路由并通过 192.168.1.1(我的路由器)手动为 GRE 隧道端点创建路由来使它工作,但是这也强制所有主机流量通过 GRE 隧道,这是我所不想要的,只有 VM 流量。

为了强制所有流量(包括主机流量)通过 GRE 隧道,我这样做了。

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

也许有一些源路由策略是合适的?

谢谢

相关内容