我已经在 Windows 2012 Server 和 Debian Linux 计算机之间设置了 OpenVPN 连接。Windows 计算机是服务器,Linux 计算机作为客户端运行 openvpn。我可以在 VPN 网络内 ping 通并相互连接,没有任何问题。
我的问题是我无法从服务器计算机访问客户端的网络。例如,从 10.10.0.2 和 .1 执行 Ping 操作没有问题。从服务器到 192.168.1.X 执行 Ping 操作不起作用。
设置:
OpenVPN服务器(Windows 2012服务器)IP:172.16.1.10/24 VPN IP:10.10.0.1
OpenVPN 客户端(Debian V6 Linux) IP:192.168.1.5/24 VPN IP:10.10.0.2
我尝试在 Windows 中添加路由,但仍然没有流量被路由到 VPN 网络。例如路由添加 192.168.1.0 掩码 255.255.255.0 10.10.0.2
我需要在 Windows/Linux 中做哪些配置才能访问客户端的内部网络?
更新日期:2015/04/23:
将路由和 iroute 添加到 OpenVPN 服务器配置后,我可以从 Windows 服务器访问 eth0 接口(192.168.1.5)。
添加到server.ovpn:
client-config-dir ccd
route 192.168.1.0 255.255.255.0
在 ccd 文件夹中,创建一个简单的文本文件“client”,其内容如下:
iroute 192.168.1.0 255.255.255.0
可以访问网络中的其他客户端但只需向每个客户端添加静态路由(例如路由添加 10.10.0.0 掩码 255.255.255.0 192.168.1.5)
如何在不需要添加静态路由或更改本地网络中的客户端的情况下完成相同操作?
答案1
听起来您已经成功设置了远程访问 vpn。 http://en.wikipedia.org/wiki/Virtual_private_network
问:我需要在Windows/Linux中做什么配置才能访问客户端的内部网络?
答:您需要使用站点到站点的 VPN 隧道。
https://openvpn.net/vpn-server-resources/site-to-site-routing-explained-in-detail/
答案2
回复:OP问题的第二部分(因为他已经解决了第一部分):
您可以在客户端子网路由器的静态路由表中添加静态路由10.10.0.0/24 -> 192.168.1.5
。此过程取决于您的特定路由器。
这种方法之所以有效,是因为目前客户端子网上的设备不知道,10.10.0.0/24
所以它们会将此类数据包转发到路由器(可能在192.168.1.1
)。任何设备(例如)的默认路由指令0.0.0.0 (default) -> 192.168.1.1
都负责此操作。除非您将上述静态路由添加到客户端子网路由器,否则它也不知道如何处理这些数据包,因此它们会丢失。
数据包跳跃如下:
192.168.1.2
(客户端子网上的某些设备)
到192.168.1.1
(客户端子网路由器)
到192.168.1.5
(客户端子网 OpenVPN)
到10.10.x.x
(服务器子网 OpenVPN 以及最终服务器子网上的某些设备)
答案3
正如 asysadminboss 所说,您正在描述远程访问 VPN 和站点到站点 VPN 之间的区别。
如果用户需要能够使用防火墙后面的网络资源,则需要使用远程访问 VPN。此类 VPN 在远程系统(客户端)上创建路由语句以访问内部网络设备。
如果您需要 VPN 的两端(客户端和服务器),则需要使用站点到站点 VPN。站点到站点 VPN 是指隧道的每一端都充当服务器和客户端。这会导致两个设备都向另一设备提供其本地网络的路由声明。
通常,您使用路由器或 VPN 服务器作为链路两侧的站点到站点 VPN 对等点来配置站点到站点 VPN。如果您有一个需要远程访问内部网络设备的远程用户,则可以使用远程访问 VPN。如果您有两个办公室,每个办公室都有需要与隧道另一端的系统通信的系统,则可以使用站点到站点 VPN。
答案4
这似乎有效,但您需要结合其他选项。摘自手册:
–-iroute 网络 [网络掩码]
生成到特定客户端的内部路由。如果省略 netmask 参数,则默认为 255.255.255.255。此指令可用于将固定子网从服务器路由到特定客户端,无论客户端从何处连接。请记住,您还必须将路由添加到系统路由表(例如通过使用 –route 指令)。需要两个路由的原因是 –route 指令将数据包从内核路由到 OpenVPN。一旦进入 OpenVPN,–iroute 指令就会路由到特定客户端。
此选项必须在客户端实例配置文件中使用 –client-config-dir 指定,或使用 –client-connect 脚本动态生成。–iroute 指令还与 –push “route …” 有重要的交互作用。–iroute 本质上定义了一个由特定客户端(我们称此客户端为 A)拥有的子网。如果您希望其他客户端能够访问 A 的子网,可以将 –push “route …” 与 –client-to-client 结合使用来实现此目的。为了让所有客户端都能看到 A 的子网,OpenVPN 必须将此路由推送给除 A 之外的所有客户端,因为该子网已归 A 所有。OpenVPN 通过不将与客户端的 iroute 之一匹配的路由推送给客户端来实现此目的。