在设置 VPN 时,客户端(例如客户端 1 和客户端 2)通常会向服务器进行身份验证,三者共同构成 VPN。当客户端 1 希望向客户端 2 发送数据包时,该数据包通常会通过服务器进行路由。
是否存在产品/配置蓝图,可以将数据包直接从客户端 1 发送到客户端 2,而无需通过服务器?(如果底层网络拓扑允许,例如没有防火墙)
如果没有,那么有没有办法让客户端 1 通过服务器向客户端 2 发送数据包,而服务器无法窥探数据包的内容?(例如,因为数据包是使用客户端 2 的公钥加密的)
我刚刚在 OpenVPN 论坛上问过,得到的答案是“OpenVPN 不行”。所以我的问题是:还有其他产品可以做到这一点吗?开源优先...
一个用例:客户 1 和客户 2 通常位于不同的办公室,但发现他们都在总部。他们是否仍需要通过公共互联网相互通信?
感谢提供链接。谢谢。
答案1
是否存在产品/配置蓝图,可以将数据包直接从客户端 1 发送到客户端 2,而无需通过服务器?(如果底层网络拓扑允许,例如没有防火墙)
我不知道是否存在精简版解决方案,但编写脚本应该相对容易。概述:
- 在客户端 1 上,提供报告其可公开寻址 IP 的服务。
- 在客户端 1 上,在其公共 IP 上运行 OpenVPN 服务。
- 在客户端 2 上,当连接到中央 OpenVPN 服务器时,使用“up”脚本连接到客户端 1 并获取其 IP。将此 IP 写入 openvpn 配置片段(例如“remote 1.2.3.4”)。
- 在客户端 2 上,使用包含上述自动生成的代码片段的配置启动一个新的 OpenVPN 实例。
当然,由于多种原因,这并非万无一失(如果客户端 1 上的服务不可用怎么办?如果客户端 2 在客户端 1 之前连接到中央服务器怎么办?等等),但原理是正确的。
有没有一种方法可以让客户端 1 通过服务器向客户端 2 发送数据包,而服务器无法窥探数据包的内容?(例如,因为数据包是使用客户端 2 的公钥加密的)
是的。在客户端 1 和客户端 2 之间建立单独的 OpenVPN(或者 IPSec)会话。此子隧道可以使用其他 OpenVPN 链接作为其传输。