为什么我的 OpenVPN 客户端无法访问与 OpenVPN 服务器位于同一 LAN 上的机器?

为什么我的 OpenVPN 客户端无法访问与 OpenVPN 服务器位于同一 LAN 上的机器?

我已根据说明在 Linux 服务器和 Windows 客户端上配置了 OpenVPN这里。我的客户端可以访问服务器,但无法进一步访问 LAN。

我的服务器是 10.23.29.64/24,我的 OpenVPN 子网是 10.23.30.0/24,我的客户端是 10.0.0.71/24,因此没有重叠。

我的服务器配置文件是:

port 53
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.23.30.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.23.29.0 255.255.255.0"
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3

我的客户端配置是

client
dev tun
proto udp
remote HOSTNAME_REMOVED 53
resolv-retry infinite    
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo
verb 3

连接后,我的客户端获得 10.23.30.6/30 并添加了 4 条路由:

   10.23.29.0    255.255.255.0       10.23.30.5      10.23.30.6       1
   10.23.30.1  255.255.255.255       10.23.30.5      10.23.30.6       1
   10.23.30.4  255.255.255.252       10.23.30.6      10.23.30.6       30
   10.23.30.6  255.255.255.255        127.0.0.1       127.0.0.1       30

我的服务器获取 10.23.30.1/32(也许这就是问题所在?)

我的客户端可以 ping 10.23.30.1 和 10.23.29.64 上的服务器,但无法再进一步访问。我还需要做什么才能让此客户端访问我的 LAN 的其余部分?

更新:

我在路由器上添加了一条静态路由,因此它的路由表如下所示

{admin}=>ip rtlist
Label             Destination          Gateway  Interface     Mtc Admin  Oper
                 10.0.0.138/32       127.0.0.1  loop          0   UP     [UP]
                 10.0.0.255/32       127.0.0.1  loop          0   UP     [UP]
               10.23.29.254/32       127.0.0.1  loop          0   UP     [UP]
               10.23.29.255/32       127.0.0.1  loop          0   UP     [UP]
             87.115.131.206/32       127.0.0.1  loop          0   UP     [UP]
                  127.0.0.1/32       127.0.0.1  loop          0   UP     [UP]
            255.255.255.255/32       127.0.0.1  loop          0   UP     [UP]
            195.166.128.189/32  87.115.131.206  Internet      0   UP     UP
                212.159.6.9/32                  Internet      10  UP     UP
               212.159.6.10/32                  Internet      10  UP     UP
                   10.0.0.0/24      10.0.0.138  LocalNetwork  0   UP     [UP]
                 10.23.29.0/24    10.23.29.254  LocalNetwork  0   UP     [UP]
                 10.23.30.0/24     10.23.29.10  LocalNetwork  0   UP     [UP]
                    0.0.0.0/0                   Internet      10  UP     UP

但是当我从 10.23.29.10 到 10.23.30.1 进行跟踪路由时,我得到了:

traceroute to 10.23.30.1 (10.23.30.1), 30 hops max, 60 byte packets
 1  dsldevice.lan (10.23.29.254)  2073.983 ms  2073.481 ms  74.545 ms
 2  * * *

并且全是星星,直到它放弃。这让我相信 traceroute 数据包没有像路由表所说的那样被转发到 10.23.29.10。

答案1

我终于找到了问题所在。我使用 OpenVPN 的“路由”选项,该选项为所有 OpenVPN 连接创建一个新子网。我的客户端从这个子网中分配了一个 IP 地址,我的服务器也是如此,因此它们可以通过这个网络相互通信。在我的服务器上启用 IPv4 转发后,我还能够将数据包发送到我的 LAN,并且显然能够通过其 LAN IP 地址与服务器通信。

当客户端尝试与 LAN 上的其他计算机通信时,来自客户端的数据包会到达我的 LAN 主机(我没有验证这一点,但我很确定它们确实到达了),但这些数据包的源地址是来自 OpenVPN 网络的地址。LAN 主机知道这不在他们的 LAN 上,在这种情况下他们唯一知道要做的事情就是将它们发送到默认网关,也就是我的路由器。我怀疑它对他们没有任何作用,因为将数据包发送到互联网上的私有 IP 范围是没有意义的。

解决方案是向所有 LAN 主机添加静态路由,或者使用 OpenVPN 的“桥接”选项而不是“路由”。我还没有这样做,但我确信这是可行的方法。

答案2

我认为您不必向所有 LAN 主机添加静态路由。您只需在该 LAN 上的网关中添加静态路由,将所有 openvpn-network 地址指向 openvpn 服务器的“lan-ip 地址”。

答案3

我的配置存在同样的问题,但现已修复:

由于您使用的是 OpenVPN Road warrior 设置,因此数据包被标记为已路由但已进行 NAT。您应该配置出站 NAT 选项,以便将任何源端口从 LAN 接口上的 OpenVPN 虚拟 IP 地址转换为具有 WAN NAT 地址的任何目标端口。

在 pfSense 中,您应该将自动出站 NAT 规则禁用为手动出站 NAT 规则,然后为 OpenVPN 内部网络添加一条新规则。

答案4

这里遇到了同样的问题(使用本指南进行设置:https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04

Anony 关于静态路由的回答是关键。在 dd-wrt ​​的设置 -> 高级路由下:

dd-wrt ​​静态路由设置

在哪里

  • 目标:openvpn tun0 接口
  • 网关:运行 openvpn 的服务器(lan ip)

这对我来说很有帮助!

相关内容