使用 Linux 机器通过 VPN 隧道进行路由

使用 Linux 机器通过 VPN 隧道进行路由

我有两台通过 VPN 隧道连接的 Linux 机器:

VPN Client <-------> VPN Server
10.74.1.10/24         10.74.1.1/24 

每个节点都有 NIC 来访问自己的网络:

---------> VPN Client <-------------------> VPN Server <------
10.37.0.205/24   10.74.1.10/24      10.74.1.1/24    10.74.0.1/24

当然,我在每个网络上都有不同的 Linux 计算机(Linux A、Linux B 等):

Linux A  <----> VPN Client <-----> VPN Server <----> Linux B

VPN Client,我可以 ping 到VPN Server和 类似的计算机Linux B

尽管从Linux A,我可以 ping 到两台VPN Client机器的接口(10.32.0.20510.74.1.10),但结果我无法 ping 通VPN Server地址10.74.1.1或网络 B 上的任何计算机

我尝试在上添加一条新路线Linux A,但收到以下信息:

$ sudo ip route add 10.74.1.1 via 10.74.1.10 dev eth0
RTNETLINK answers: Network is unreachable

$ sudo ip route add 10.74.1.1 via 10.37.0.205 dev eth0
RTNETLINK answers: Network is unreachable

我该如何让它工作?也许配置一下VPN Client

编辑:

路由表如下VPN Client

default via 10.37.0.1 dev eth0 
10.37.0.0/24 dev eth0  proto kernel  scope link  src 10.37.0.205 
10.74.0.0/16 via 10.74.1.9 dev tun0 
10.74.1.0/24 via 10.74.1.9 dev tun0 
10.74.1.9 dev tun0  proto kernel  scope link  src 10.74.1.10 
128.0.0.0/1 via 10.74.1.9 dev tun0 

上的路由表Linux A

default via 10.37.1.1 dev eth0 
10.37.1.0/24 dev eth0  proto kernel  scope link  src 10.37.1.217 

此外,我已在VPN Client

$ sudo sysctl -w net.ipv4.conf.all.forwarding=1

编辑2:

过滤数据包VPN Client

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

答案1

您使用哪种 VPN?

听起来你VPN Client应该对来自 的流量进行 NATLinux A到你的VPN Server& Linux B。并且/或者:你的Linux B没有返回你的 的路由VPN Client

答案2

我一直在努力寻找类似问题的简单解决方案,并发现 sshuttle 至少对于我而言是最简单的临时解决方案。

一台 Linux 机器可以访问 VPN,而通过在另一台机器上运行 sshuttle,我也可以访问该 VPN。

此外,可以使用 cidr 块作为最后一个参数轻松过滤路由。这提高了第二台机器的可用性,因为并非每个呼叫都会转到启用 VPN 的机器。

sshuttle --dns -r [email protected] 10.208.0.0/16

关联:https://github.com/sshuttle/sshuttle

仅需在客户端上安装。客户端只需通过 SSH 访问启用 VPN 的机器即可。

答案3

如果添加路由,则下一跳必须是本地链路。Linux A只能直接到达地址 10.37.1.0/24。但

ip route add 10.74.1.1 via 10.74.1.10 dev eth0

说:将数据包发送到 10.74.1.1 到链路本地主机 10.74.1.10。由于 10.74.1.10 不是链路本地(或:未配置为链路本地),因此您会收到错误消息Network is unreachable

下一跳必须是的本地地址VPN Client

ip route add 10.74.1.1 via 10.37.0.205 dev eth0

相关内容