通过 OpenVPN 连接的 GRE 隧道转发接收的 Linux 虚拟机上的流量

通过 OpenVPN 连接的 GRE 隧道转发接收的 Linux 虚拟机上的流量

我正在尝试通过 OpenVPN 网络路由发往公共互联网的流量,该流量将通过网络上的另一个客户端(恰好是 VirtualBox VM)退出 VPN。

为了解释拓扑结构,我将使用客户端 A 作为流量发起者,客户端 E 作为流量的期望出口/假定起点。客户端和服务器都是 Linux 机器。

客户端 A 和 E 都连接到 OpenVPN 服务器,并在服务器创建的子网上拥有本地地址;假设为 10.8.0.0/16,其中服务器有 10.8.0.1,客户端 A、E 有 ...2 和 ...3。客户端可以通过服务器相互访问。OpenVPN 服务器还具有一个在 OpenVPN 连接上运行的到客户端 E 的 GRE 隧道。

目前,抽象的拓扑/流程如下所示:

(A) ={OpenVPN}=> (OpenVPN Server) ={GRE in OpenVPN}=> (E) -> ...

我遇到的问题是,一旦流量到达客户端 E,它就不会通过 E 的默认网关发送至公共互联网。

客户端相关配置如下:

A:

default gateway is the OpenVPN server (10.8.0.1)  

OpenVPN 服务器:

ip rule add from 10.8.0.2 lookup node  

路由表“节点”具有以下路由:

default dev gre5  scope link  
10.8.0.0/16 dev tun0  proto static  scope link  src 10.8.0.1  

埃:

default gateway is the VirtualBox nat network (through which it has a working Internet connection)

net.ipv4.ip_forward = 1  
net.ipv4.conf.all.forwarding = 1  
net.ipv4.conf.default.forwarding = 1  
iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE

The iptables policy for E's filter table is to accept everything.

使用 tcpdump 我可以看到来自 A 的数据包从 E 的 GRE 隧道接口出来,但它们似乎在 E 上丢失。我已经能够验证它们没有通过 E 的任何接口(环回、虚拟隧道或 VBox nat 网络接口;上面的 eth0)转发。

我是否缺少一些与 GRE 隧道有关的额外/特殊配置,或者与之相关的配置?这个问题是否与终端客户端是 VM 有关?
或者,有没有更好的方法将用于外部网络的流量通过 OpenVPN 网络引导到客户端?

如果需要,我很乐意提供进一步的详细信息。

E 的路由表,按照@MariusMatutiae 的要求

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use     Iface
default         10.0.2.2        0.0.0.0         UG    0      0        0 eth0
10.0.2.0        *               255.255.255.0   U     0      0        0 eth0
10.8.0.0        *               255.255.0.0     U     0      0        0 tun0
10.10.5.0       *               255.255.255.0   U     0      0        0 gre5
192.168.56.0    *               255.255.255.0   U     0      0        0 eth1

其中 eth0 连接到 VBox nat 网络,eth1 连接到我用于 ssh 进入 VM 的仅主机网络,tun0 是 OpenVPN 接口,gre5 是 GRE 隧道的接口。

相关内容