公对公 IPSec 隧道:NAT 混乱

公对公 IPSec 隧道:NAT 混乱

我知道这是可能的——而且显然在那些由于重叠原因不/不能路由私有地址的大公司中相当常见——但我不明白如何让它工作。硬件方面,我现在正在使用 pfSense、Vyatta 和 Cisco 5505。

以下是我的设置:

西部:维亚塔

  • 外部:10.0.0.254/24
  • 内部:172.16.0.1/24
  • 机器a:172.16.0.200/24

东部:思科 5505

  • 外部:10.0.0.210/24
  • 内部:192.168.10.1
  • 机器 b(网络服务器):192.168.10.2

因此,我们要尝试执行以下操作:在不使用私有地址的情况下,通过隧道将流量从机器 A 路由到机器 B。例如,172.16.0.200 向 10.0.0.210:80 发出 TCP 请求,就 EAST 而言,它看到的源 IP 为 10.0.0.254。

在 WEST 上,我有典型的多对一源 NAT,将 172.16.0.0/24 转换为 10.0.0.254,并且确认可以正常工作。

此外,在 WEST 上,我有以下 IPSec 配置:

  • 本地 IP:10.0.0.254
  • 对等 IP:10.0.0.210
  • 本地子网:10.0.0.254/32
  • 远程子网:10.0.0.210/32

我在 EAST 上进行了反向配置。当我从机器 A 向 10.0.0.210:80 发出请求时,SNAT 将机器 A 的私有地址转换为 10.0.0.254,并且它被路由出去(并在另一端被丢弃)而不建立隧道。我假设发生的事情是 WEST 上的内部接口从 172.16.0.200 收到一个数据包,由于它与隧道配置中定义的本地子网不匹配,因此 IPSec 引擎不会处理它,并且不会建立隧道。

您如何实现这一点?NAT 和 IPSec 似乎是一个先有鸡还是先有蛋的问题,我实在想不通这是怎么实现的:我能说“如果在内部接口上收到一个数据包,目的地是 10.0.0.210,就把它转换成 10.0.0.254”吗?IPSec 引擎会对其进行检查吗?

答案1

您需要更改端口转发,以便告诉 Cisco 将您的 tcp:80 请求路由到计算机 b (192.168.10.2) 的端口 80。否则 Cisco 路由器不知道传入请求将发送到哪台计算机,并且会阻止它。

答案2

事实证明它确实有效(当您在 Vyatta 中正确进行配置时)。从他们的文档(使用 OpenSWAN)中,他们指出在应用 IPSec 配置之前会应用 NAT。不确定这是否与其他防火墙/路由器相关。可能会用 PIX 代替 Vyatta 进行尝试。

相关内容