如何通过隧道中的另一个网关进行路由

如何通过隧道中的另一个网关进行路由

我使用 openvpn,它可以很好地通过所有连接的网关路由到各自的网络。
所以我的主要的路由器有
eth0192.168.1.1具有IP
tun0设备192.168.94.2
每个外部路由器连接到这个主路由器都会获得192.168.94.0/24范围内的 IP 地址,我通过 tun0 dev 连接两个网络。
我有一般的路由语句:
192.168.0.0/16 via 192.168.94.2 dev tun0
并且一切正常,以及:
iptables -A FORWARD -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
所以私有 IP 范围之间没有 NAT。
但我的其中一个路由器上有另一个本地隧道相对湿度
eth0IP 192.168.10.1(网络192.168.10.0/24
tun0 192.168.94.69
tun1 192.168.95.2(具有连接并可访问网络192.168.11.0/24

是否可以访问主要的192.168.11.0/24通过路由器连接到子网相对湿度路由器?我尝试添加路由:
ip ro add 192.168.11.0/24 via 192.168.94.69 onlink dev tun0
但数据包没有路由。我尝试添加,via 192.168.10.1但也没有成功。

答案1

网关路由不适用于tun接口,因为接口不携带链路层头。

当路由指定网关时via ...,它实际上被解析为鏈接層地址(即,它成为以太网报头中的“目标 MAC”地址),将数据包定向到正确的主机。数据包从不通过其 IP 地址指定网关,而只通过其 MAC 指定网关。

但是由于tun接口没有链路层寻址,因此数据包只能采取一个可能的目的地,并且您的路由行为完全相同192.168.0.0/16 dev tun0(“网关”字段被忽略)。

为了实现您的目标,您有以下几种选择:

  1. 使用 OpenVPN 服务器的iroute选项,该选项告诉 OpenVPN 在操作系统通过 tun0 路由数据包后,根据目标 IP 地址在内部将数据包转发到特定客户端。

    https://community.openvpn.net/openvpn/wiki/RoutedLans更多细节。

  2. 将您的 VPN 切换到tap接口类型,具有链路层寻址 – “tap”接口承载完整的以太网帧,而不仅仅是 IP 数据包。(请注意,Android/iOS 不支持“tap”VPN。)

相关内容