Linux 上的 VPN - IP 路由问题

Linux 上的 VPN - IP 路由问题

我遇到了以下情况:

一个 ubuntu 服务器 20.04 lts,为简单起见命名为 A 服务器,具有以下网络接口:

  • 回送
  • enp1s0 (wan) 公共 IP/23
  • enp8s0 (局域网) 10.9.96.3/20
  • ppp0 (l2tp) 192.168.42.1

使用这个路由表(故意省略公共路由):

  • 10.9.96.0/20 dev enp8s0 proto 内核范围链接 src 10.9.96.3
  • 192.168.1.0/24 通过 192.168.42.10 dev ppp0
  • 192.168.42.10 dev ppp0 proto 内核范围链接 src 192.168.42.1

有一个远程 vpn 客户端与 ip 192.168.42.10 相连。
此客户端是 MikroTik 路由器,提供远程局域网 192.168.1.0/24。
使用我添加的静态路由(192.168.1.0/24 via 192.168.42.10 dev ppp0),我可以访问 192.168.1.0/24 设备。


另一台 ubuntu 服务器 20.04 lts,为简单起见命名为 B 服务器,具有以下网络接口:

  • 回送
  • enp1s0 (wan) 公共 IP/23
  • enp8s0 (局域网) 10.9.96.4/20

以及以下路由表(故意省略了公共路由):

  • 10.9.96.0/20 dev enp8s0 proto 内核范围链接 src 10.9.96.4

基本上我需要从服务器 B 访问 192.168.1.0/24 设备,但我无法让它工作。
我还尝试
在此服务器内通过 10.9.96.3 dev enp8s0 添加静态路由:192.168.1.0/24,但没有成功,我看到发往 192.168.1.X 的数据包到达了服务器 A,但我猜它们没有被转发到 ppp0 接口(所以我还尝试了一些 iptables 规则)

如何解决这个问题?

两台服务器的防火墙均被禁用。

答案1

笔记:在这个答案中,网络100.64.10.0/23代表公共网络。它不是特别相关,但存在只是为了使这些虚拟节点的网络配置与您在问题中描述的内容相匹配。


您的问题是 192.168.1.0/24 网络上的主机不知道如何到达 10.9.96.0/20 网络。

根据您在问题中向我们展示的内容,microtik 路由器(192.168.42.10/192.168.1.1)上的路由表可能如下所示:

192.168.1.0/24 dev h1-eth0 proto kernel scope link src 192.168.1.1
192.168.42.0/24 dev h1-eth1 proto kernel scope link src 192.168.42.10

服务器A上的路由表如下所示:

default via 100.64.10.1 dev serverA-eth0
10.9.96.0/20 dev serverA-eth1 proto kernel scope link src 10.9.96.3
100.64.10.0/23 dev serverA-eth0 proto kernel scope link src 100.64.10.10
192.168.1.0/24 via 192.168.42.10 dev serverA-eth2
192.168.42.0/24 dev serverA-eth2 proto kernel scope link src 192.168.42.1

在 上serverA,当您 ping 网络上的地址时192.168.1.0/24,您的源地址是192.168.42.1。microtik 路由器有该网络的路由,因此一切都很顺利。

如果serverB你有一个这样的路由表:

default via 100.64.10.1 dev serverB-eth0
10.9.96.0/20 dev serverB-eth1 proto kernel scope link src 10.9.96.4
100.64.10.0/23 dev serverB-eth0 proto kernel scope link src 100.64.10.20
192.168.1.0/24 via 10.9.96.3 dev serverB-eth1

然后,当您尝试连接到192.168.1.0/24网络上的地址时,您的源地址将是10.9.96.4。microtik 路由器不知道如何到达该地址(或者它尝试通过默认网关进行响应,这是不合适的)。

解决方案是向 microtik 路由器添加一条路由,如下所示:

ip route add 10.9.96.0/20 via 192.168.42.1

现在:

  • ServerB 可以 ping microtik 路由器,因为 microtik 路由器有一条返回 serverB 的有效路由
  • ServerB 可以 ping 通其他网络上的主机192.168.1.0/24,因为这些主机使用 microtik 路由器(192.168.1.1)作为其默认网关……并且如上一个要点所述,路由器具有适当的路由。

我使用以下工具构建的模拟网络环境中测试了所有这些迷你网;你可以找到配置这里如果你好奇的话。

相关内容