通过OpenVPN从外网访问内网服务,但无法ping通内网IP地址?

我在公网服务器上搭建了openvpn-server,在内网的机器192.168.0.106上通过openvpn-client连接上,并且获取到了分配地址:10.8.0.6。
在外网的机器通过openvpn-client连接openvpn-server上,ping 10.8.0.6 是有应答的,说明隧道创建成功了。但是我通过 ping 192.168.0.106 无法应答,这是什么原因?
这是我内网192.168.0.106的路由表信息:
1718701968735.png
我在openvpn-server也配置了 client-to-client 跟 push "192.168.0.0 255.255.255.0"

我想在外网的机器上连接内网的服务该怎么解决这个问题?

阅读 2.9k
3 个回答

有其他解决方案吗?

你可以参考我的配置

’’’
root@opsv:/etc/openvpn/ccd# cat wrt
ifconfig-push 10.10.0.10 255.255.255.0
iroute 192.168.15.0 255.255.255.0
iroute 192.168.104.0 255.255.255.0
iroute 172.29.0.0 255.255.0.0
push "route 172.16.109.0 255.255.255.0"
’’’

这是名字叫做wrt客户端的配置。
第一行ifconfig-push 用来推送ip给这个客户端
第二行iroute 申明 这个客户端有这个网段的路由
最后一行push,给客户端推送一条路由


所以要实现你的需求,你需要配置一下iroute指定客户端所在的网段(iroute 192.168.0.106 255.255.255.255)

这样其他的客户端就能知道192.168.0.106应该发给哪个客户端了。

可以如下尝试:

  1. 在ccd文件夹中,添加客户端对应的路由。比如内网的机器106对应的名称为 test,则需要在ccd下建立test文件,内容为:iroute 192.168.0.0 255.255.255.0,这样openvpn service在接收到请求地址为 192.168.0.0/24时,才知道把数据转给 test.

push "192.168.0.0 255.255.255.0" 的作用是向客户端推送路由,但它并不能决定数据达到service后service如何进行转发,而ccd中的文件作用则是设置数据达到service后的转发。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏