![为什么我的 OpenVPN 客户端无法访问与 OpenVPN 服务器位于同一 LAN 上的机器?](https://linux22.com/image/1347376/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20OpenVPN%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E4%B8%8E%20OpenVPN%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BD%8D%E4%BA%8E%E5%90%8C%E4%B8%80%20LAN%20%E4%B8%8A%E7%9A%84%E6%9C%BA%E5%99%A8%EF%BC%9F.png)
我已根据说明在 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 的设置 -> 高级路由下:
在哪里
- 目标:openvpn tun0 接口
- 网关:运行 openvpn 的服务器(lan ip)
这对我来说很有帮助!