我有以下网络拓扑。我的物理位置是 VPN 客户端 1。首先,我成功建立了 VPN 隧道 1,VPN 客户端 1 连接到 VPN 服务器 2,并能够与连接到与 VPN 服务器 2 相同的 LAN 的 VPN 客户端 2 通信。
但是,当我尝试从 VPN 客户端 2 到 VPN 服务器 1 建立 VPN 隧道 2(通过 VPN 隧道 1 通过 SSH 连接到 VPN 客户端 2)时,我失去了与 VPN 客户端 2 的连接,甚至无法 ping 通它(VPN 隧道 1 仍然处于打开状态)。您知道这里可能出了什么问题吗?
所有 VPN 隧道均使用 OpenVPN 服务器/客户端实现。
多谢!
答案1
这是我们得到的结果(您的图片很快将不可用)
v-------<<--VPN2---------------v
[CLI1]---[SRV1]---{Internet}---[SRV2]---[CLI2]
^------------VPN1->>-----------^
建立第二个 VPN 时,您要做的就是为 CLI1 到 CLI2 的同一链路设置第二条路由。因此,当 CLI2 尝试使用 VPN2 到达 CLI1 时,CLI1 将使用 VPN1 返回到 CLI2。因此,我很确定您在途中遇到了一些不允许 TCP 建立的 NAT 或 MASQUERADE。
一旦您的第一个 VPN 建立,您就应该使用这个 VPN 作为返回路径,这样 CLI2 将使用 CLI1 已经知道的路由到达 CLI1,并且它会起作用。基本上您可能不会建立 VPN2,而是在 SVR2 的 openvpn 将路由返回到您的 CLI1
另一种(更好、更简单)的方法是在 SRV1 和 SRV2 之间建立 VPN,并指示对方的路由,这样该集合将被视为两个 LAN 之间的简单路由,两侧的每个客户端都将使用该路由连接到 VPN 另一端的任何其他客户端。
[CLI1]---[SRV1]---{Internet}---[SRV2]---[CLI2]
^-------VPN1->>-------^
请记住,openVPN 有两个功能:1/ 一个在本地和远程接口之间加密的接口管理器;2/ 一个通常充当路由器的机器内部路由器。因此,您必须为 SRV1 和 SRV2 提供路由和为您的 openVPN 进程提供路由 => 查看openVPN 中的选项iroute
;client-config-dir
[CLI1]---[SRV1]---{Internet}---[SRV2]---[CLI2]
^ ^
RouteToLAN2 RouteBackToLAN1
^-------VPN1->>-------^