我感兴趣的是 PPTP 直通,而不是 Ipsec 等。我在网上查过,但不知道它是如何完成的。我自己是一名 IT 管理员,了解很多路由、NAT 等。我想我知道它是如何工作的,但我没有找到官方的答案。我只是好奇,希望有人能证实我的理论。它在这里。
问题首先归结于共享一个公共 IP 地址时的 NAT。NAT 使用 PAT 来共享一个公共 IP 和多个私有 IP。如果没有端口和 PAT,这是不可能的,因为当数据包从目的地返回时,它们都会被发送到公共 IP 地址。路由器无法区分不同的数据包。但是,通过使用源端口和 PAT,它可以做到。
PPTP 使用 GRE,它本身是一种不同于 TCP 或 UDP 的协议。它实际上根本不使用端口,因此这给穿越 NAT 设备带来了问题。当数据包从互联网返回到路由器时,如何在不使用 PAT 的情况下告诉路由器这些数据包属于哪个私有 IP?
我认为它通过监控 1723“通道”来工作。使用 PPTP 直通,路由器将 1723 连接(将使用 PAT/NAT)与发往同一目标 IP 的 GRE 数据包关联起来。换句话说,当 GRE 数据包返回时,它不知道将它们发送到哪里,因此看起来 1723 连接会查找私有 IP 地址。这是正确的吗?如果不是,那么它是如何工作的?
我知道有 NAT-T,但我认为这与 VPN 直通不同......
答案1
我自己发现了这一点…… PPTP 直通
正如我所料,用于 PPTP 隧道的 GRE 协议不使用端口。这意味着它无法原生穿越 NAT 设备。但是 GRE 有两个版本:原生版本和增强版本,称为增强型 GRE,专门用于 PPTP。增强版本将呼叫 ID 添加到标头中。NAT 后面的每个 VPN 客户端都会创建自己的唯一呼叫 ID,该 ID 会添加到 GRE 标头中。具有 VPN 直通功能的路由器会读取标头的这一部分,并将呼叫 ID 与 NAT 后面的私有 IP 地址进行匹配。NAT 设备必须支持此功能。NAT 设备会在数据包穿越时读取此信息,并检查返回的 GRE 数据包是否有此设置,以便知道将其发送到何处。
答案2
从http://www.shorewall.net/VPN.htm
具有 RFC 1918 地址的系统需要通过远程网关访问远程网络。在本例中,我们假设本地系统的 IP 地址为 192.168.1.12,远程网关的 IP 地址为 192.0.2.224。
如果使用 PPTP,并且您需要同时将两个或更多本地系统连接到同一远程服务器,则应确保已加载 PPTP 帮助程序模块(ip_conntrack_pptp 和 ip_nat_pptp 或 nf_conntrack_pptp 和 nf_nat_pptp)。使用默认模块文件,Shorewall (Lite) 将在启动时尝试加载这些模块。
如果使用 IPSEC,则应将 IPSEC 配置为使用 NAT 遍历 - 在 NAT 遍历下,IPSEC 数据包(协议 50 或 51)封装在 UDP 数据包中(通常使用目标端口 4500)。此外,还会频繁发送保持活动消息,以便端点之间的 NATing 网关将保留其连接跟踪条目。这是我连接到 HP Intranet 的方式,除了我的 ACCEPT loc->net 策略外,它无需 Shorewall 中的任何其他内容即可完美运行。NAT 遍历是 Windows 2K 的补丁程序,也是 Windows XP 的标准功能 - 只需从“VPN 类型”下拉菜单中选择“L2TP IPSec VPN”即可。
或者,如果您的防火墙后面有一个 IPSEC 网关,那么您可以尝试以下操作:只有一个系统可以连接到远程网关,并且防火墙配置要求如下: