通过 OpenVPN 连接到本地机器

通过 OpenVPN 连接到本地机器

我现在已经对这个主题做了相当多的研究,但到目前为止还没有找到可行的解决方案。有很多问题,其中大多数与我的问题不太相符,而且答案很少。所以,我希望在这里得到一些帮助。以下是设置:

我的本地网络使用地址范围10.1.0.0/24其中 10.1.0.1 是路由器,10.1.0.2 是我尝试从网络外部访问的机器。

路由器运行 dd-wrt ​​固件,并配置为 OpenVPN 服务器,其 VPN 地址范围为10.2.0.0/24。在服务器配置中,我尝试通过以下方式将路由推送到我的本地网络:

push "route 10.1.0.0 255.255.255.0"

我可以从工作中的客户端建立有效的 OpenVPN 连接,并且路由得到正确推送:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ds9-ds10.gate.u 0.0.0.0         UG    302    0        0 wlan0
10.1.0.0        10.2.0.1        255.255.255.0   UG    0      0        0 tun0
10.2.0.0        *               255.255.255.0   U     0      0        0 tun0
10.20.4.0       *               255.255.254.0   U     0      0        0 wlan0
10.20.4.0       *               255.255.254.0   U     302    0        0 wlan0

我还可以通过 ssh 进入我的路由器,或者使用它的 Web 界面,使用它的常规 ip 10.1.0.1(只有在推送路由时才有可能)或其 vpn ip 10.2.0.1。

路由器上启用了IP转发:

# cat /proc/sys/net/ipv4/ip_forward 
1

我认为我现在应该能够使用它的 LAN IP 10.1.0.2 通过 ssh 连接到另一台机器(该机器配置为接受来自 10.1.0.0/24 和 10.2.0.0./24 地址的连接),因为现在所有到 10.1.0.0/24 的连接都应该通过 10.2.0.1 进行路由,但我仍然无法建立连接。

我看不到设置中缺少的位,可能是在路由器的某个地方。为什么我连接到 10.1.0.1(本地地址范围)的请求有效,但连接到路由器的机器却无法连接到 10.1.0.2?

编辑:

我不知道@MariusMatutiae 指出的问题。我读过几次关于需要静态路由的文章,但一直不清楚在哪里添加什么,我不得不承认我对细节的了解非常有限。不过,他在回复中的澄清非常有道理。按照他的建议,我修改了路由器上的路由表,现在包括

10.2.0.0        10.2.0.1        255.255.255.0   UG    0      0        0 tun2

得出下表:

root@DD-WRT:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         188-193-191-254 0.0.0.0         UG    0      0        0 vlan2
10.1.0.0        *               255.255.255.0   U     0      0        0 br0
10.2.0.0        10.2.0.1        255.255.255.0   UG    0      0        0 tun2
10.2.0.0        *               255.255.255.0   U     0      0        0 tun2
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
169.254.0.0     *               255.255.0.0     U     0      0        0 br0
188.193.184.0   *               255.255.248.0   U     0      0        0 vlan2

iptables 的 FORWARD 链包含以下行

pkts bytes target     prot opt in     out     source               destination  
   0     0 ACCEPT     0    --  tun2   *       0.0.0.0/0            0.0.0.0/0
   0     0 ACCEPT     0    --  *      tun2    0.0.0.0/0            0.0.0.0/0

高于任何 DROP 或 REJECTtun2作为 OpenVPN 服务器的 tun 设备。我认为应该没问题。

但问题仍未解决。到底出了什么问题?

答案1

您认为该声明

 push "route 10.1.0.0 255.255.255.0"

就路由而言,这是故事的结尾,但事实并非如此。这个语句所做的只是让客户端知道 VPN 服务器后面有一个私有 LAN,即 10.1.0.0/24。但是,VPN 服务器本身并不知道 VPN 网络 10.2.0.0/24 的存在,因为没有人指示它向其表中添加合适的路由。这就是您遇到问题的原因:事实上,您的客户端连接到 LAN 的成员,但从未收到回复,因为路由器不知道如何将其回复路由回 VPN 客户端。

解决这个问题的方法是将此命令添加到路由器,

 route add -net 10.2.0.0/24 gw 10.2.0.1

或者

 route add -net 10.2.0.0/24 dev tun0 

或者(在测试这是您唯一的问题之后)将此语句添加到您的 server.conf 文件中:

 route 10.2.0.0 255.255.255.0

您需要此声明以及声明

 push "route 10.1.0.0 255.255.255.0"

您可能会惊讶于路由器不知道返回 VPN 客户端的路由,因为您认为路由器和 VPN 服务器是同一台机器,但这正是路由器不知道服务器在做什么的原因:一般情况是两者由两台不同的机器托管。在这种情况下,您不是希望更改 VPN 服务器的路由表,因为这意味着 LAN 上的其他 PC 将不知道如何访问 VPN 客户端,而您必须通过更改所有 PC 的所有路由表来解决这个问题,以告诉它们 VPN 的网关是 VPN 服务器,而不是路由器。相反,在这种情况下,您真正​​希望做的是不是改变 VPN 服务器的路由表,并更改路由器的路由表,这样您只需执行一次此操作。

相关内容