我可以使用服务器位于 NAT 内的 NAT-T 执行纯 IPSec VPN(无 L2TP)吗?

网络工程 虚拟专用网 网络安全
2021-07-22 17:57:57

拓扑:

Client   ->       Client Router        -> CLOUD <-        Server Router          <- Server
10.0.1.5    10.0.1.1 <-NAT-> 100.1.1.1             200.1.1.1 <-NAT-> 192.168.1.1    192.168.1.100
  • 我可以控制服务器路由器。它有多个可路由的公共 IP 地址 - 比方说 200.1.1.1 到 200.1.1.6。
  • 服务器路由器为它后面的所有机器提供 NAT。IPsec 服务器正在 NAT 网络上的其中一台机器上运行,地址为 192.168.1.100。我已将该路由器配置为将所有到达 200.1.1.2 的流量转发到位于 192.168.1.100 的服务器。客户端将连接到 200.1.1.2。
  • 服务器路由器是一个设备,因此它不能运行 IPsec 服务器本身。
  • 服务器本身认为它的 IP 地址是 192.168.1.100,但正如我所说,它可以在 200.1.1.2 访问。路由器仅在目标 IP 上转发,因此 IKE/ISAKMP/etc 数据包应该能够从路由器直接转发到服务器。
  • 不可能将 VPN 服务器移动到它可以直接了解其公共可路由 IP 的配置中。(即它不能移动,因此它的网络接口直接连接到 Internet,但必须保留在 NAT 后面,并将流量转发给它。)
  • 我无法控制客户端路由器。它将所有客户端置于 NAT 之后。它确实启用了 IPsec VPN Passthrough。
  • 我可能会使用 L2TP 来完成这项工作,但如果可能的话,我更愿意使用纯 IPsec。

为了消除我完全无能为力的机会,我对IPsec的理解如下:

  • IPsec/L2TP VPN 在两个端点之间建立 IPsec 隧道。然后它通过该隧道传递 L2TP 流量。L2TP 流量未加密,因此 IPsec 用作加密方法,而 L2TP 用作“VPN”。
  • 纯 IPsec VPN 将直接通过 IPsec 隧道传输 IP 数据包。客户端机器可以通过隧道执行标准的 DHCP 请求,从远端的 DHCP 服务器接收 IP 地址,然后通过 IPsec 隧道传输原始 IP 数据包,如果客户端设备直接连接到远端,它们将出现局域网。
  • 在 L2TP/IPsec 中,L2TP 服务器处理 IP 地址分配;在纯 IPsec 中,就像您将 LAN 电缆插入远程 LAN 一样,因此您可以连接任何基础设施。

如果我错了,请纠正。

所以我的问题是:

  1. 有什么阻止我在这个拓扑中做一个纯 IPsec VPN 的吗?
  2. 我正在使用 Linux,并且将使用 IPsec 服务器的 Swan 系列(可能是Strongswan/Openswan)。有没有办法使用这些工具来实现这一点?客户端将是 iOS 设备、Mac,可能还有几台 Windows PC。
2个回答

没有什么能阻止你这样做。NAT-Traversal 是您的朋友,它会将(部分)IPSEC 封装在端口 4500 上的 UDP 中。

您会在rfc3715rfc3947 中找到一些信息

棘手的部分是你不能使用对等 IP 地址作为身份,(尤其是 StrongSwan,我认为这是默认的 - 不确定)所以你必须在你的配置中声明每个主机的身份(通常以@id 的形式) )。

https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/sec_conn_dmvpn/configuration/xe-3s/sec-conn-dmvpn-xe-3s-book/sec-conn- dmvpn-dt-spokes-b-nat.pdf

根据该网站,您至少需要一个不执行 NAPT(网络地址端口转换)/(NAT 过载)的路由器,我猜您的两个路由器都在这样做。

不用担心,您需要做的就是添加具有静态广域网 IP 的集线器路由器。
使客户端路由器 => DMVPN 分支 1
使服务器路由器 => DMVPN
分支2 在 AWS 上配置 VyOS 路由器 => DMVPN 集线器具有超便宜的静态 WAN IP。

DMVPN = GRE Tunnel in IPSec Tunnel with NHRP
(GRE 隧道允许组播)
(组播意味着您可以在隧道接口上配置 OSPF 路由协议)
Spoke 1 与 DMVPN Hub
形成 IPSec 隧道 Spoke 2与 DMVPN Hub 形成 IPSec 隧道
配置 OSPF /EIGRP 在 DMVPN Spoke 1、DMVPN Spoke 2 和 DMVPN 集线器上)

The end result is 
Spoke 1 = 10.0.1.1/16          Virtual Interface/Tunnel IP = 192.168.255.1 /29
Spoke 2 = 192.168.1.1/24       Virtual Interface/Tunnel IP = 192.168.255.2 /29
Hub Virtual Interface/Tunnel IP = 192.168.255.6 /29   (can support 5 spokes)

客户端 10.0.1.5 现在可以 ping 服务器 192.168.1.100。客户端 1 连接到 Spoke 1,Spoke 1 将在其隧道接口上有一个到 192.168.1.0/24 网络的路由,它只会将流量路由到它。


请注意,某些路由器无法进行 DMVPN 或具有付费功能。普通的 IPSec 隧道不能通过多播流量(因此路由协议将不起作用),如果你在那条船上,你有计划 B 和计划 C。计划 B 是研究 VTI(它们是一个更新的基于 IPSec 的本质上支持多播流量的 VPN 技术)。方案C是让Spoke 1和Hub组成IPSec Tunnel,Spoke 2和Hub组成IPSec Tunnel,在两个IPSec Tunnel里面都放GRE隧道,然后开启OSPF。它基本上是 DMVPN,但配置稍多。