为什么我的 OpenVPN 客户端不能访问与 OpenVPN 服务器位于同一局域网的机器?

Gre*_*zzo 9 vpn routing openvpn subnet netmask

我已根据此处的说明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
Run Code Online (Sandbox Code Playgroud)

我的客户端配置是

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
Run Code Online (Sandbox Code Playgroud)

连接后,我的客户端获得 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
Run Code Online (Sandbox Code Playgroud)

我的服务器得到 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
Run Code Online (Sandbox Code Playgroud)

但是当我从 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  * * *
Run Code Online (Sandbox Code Playgroud)

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

Gre*_*zzo 6

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

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

解决方法是为所有局域网主机添加静态路由,或者使用 OpenVPN 的“桥接”选项而不是“路由”。我还没有这样做,但我相信这是要走的路。

  • 我对史蒂夫吉布森的评价不是很高(参见 http://www.theregister.co.uk/2001/06/25/steve_gibson_really_is_off/),但这篇文章很好地解释了它:http://www.grc.com /vpn/routing.htm (2认同)