了解VPN 实施

了解VPN 实施

在此处输入图片描述

上图显示了我认为在 OpenVPN 连接期间发生的情况。主机 A 和 B 通过 1.2.3.4:1194 的 VPN 服务器连接到 VPN。我的问题是:如果主机 A 希望向主机 B 发送数据包(例如 ICMP 回显数据包),数据包如何遍历才能到达 B?我最初的想法是:

该过程创建数据包,其目的地为 10.20.0.6,源为 192.168.0.x(考虑到应用程序不知道 VPN 连接,源 IP 为 192.168.0.x)。根据推送到应用程序计算机的路由表,数据包被发送到虚拟接口。

主机 A 的虚拟接口封装了发往主机 B 的 WAN 端地址 (3.4.5.6) 的数据包。

到目前为止,这是否正确?B 处的路由器如何知道此数据包的目的地是主机 B?主机 A 是否将 1.2.3.4 作为目的地(而不是 3.4.5.6),并让 VPN 服务器通过服务器与 B 之间已建立的连接重新路由?B 处的路由器是否必须预先设置才能允许任何类型的 VPN 连接?

答案1

假设你已经设置好了一切,并且你发出

$ ping 10.20.0.6

在主机 A 上。

主机 A 检查其内部路由表,了解如何到达 10.20.0.6,在 Linux 上,它大致如下所示

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.20.0.0       10.20.0.1       255.255.255.0   UG    0      0        0 tun0

因此主机 A 确定“为了联系 10.20.0.6,我需要通过网关 10.20.0.1 发送消息,我可以使用tun0界面”

10.20.0.1 是 OpenVPN 服务器的 VPN 地址,tun0是主机 A 上的 OpenVPN 客户端程序创建的软件定义网络接口。

因此,主机 A 向tun0.接下来发生的事情是封装。OpenVPN 客户端将原始数据包包装在 OpenVPN 信封中,并将此信封发送到 1.2.3.4:1194。

位于 1.2.3.4 的 OpenVPN 服务器打开信封并检查地址:“哦,这是 10.20.0.6。” 如果 OpenVPN 服务器已配置为允许客户端相互通信,它将通过与地址 3.4.5.6 的 B 建立的连接发送信封。

B 处的 OpenVPN 客户端打开收到的信封(解封装),现在有一个从地址 10.20.0.5(即 VPN 网络中的主机 A)接收到的针对 10.20.0.6 的 ICMP 回显请求。

OpenVPN 仅需要与服务器的 1194 端口建立 TCP 或 UDP 连接即可工作。如果防火墙或配置错误的 NAT 阻止了此操作,则无法工作。

相关内容