如何在 Windows Server 2008 R2 中设置 NAT 以供 IPSec 隧道使用

如何在 Windows Server 2008 R2 中设置 NAT 以供 IPSec 隧道使用

我在设置整个 IPSec 隧道时遇到了麻烦。

我所拥有的:
1. 仅具有 VPN/IPsec 直通功能的路由器(IP 192.168.0.1)
2. 为 IPSec 隧道设置了组策略的 Windows Server 2008 R2。(服务器 IP 192.168.0.2;网关 192.168.0.1)
3. Linux 机器有一个应用程序(IP 192.168.0.3;网关 192.168.0.2)

IPSec 隧道的另一端位于通过互联网的另一个位置。

隧道另一端的公司告诉我,我必须将 IP 10.100.101.102 作为从 Linux 机器进入 IPSec 隧道的所有数据包的源 IP。

因此,思路是:
1. Linux 形成一个数据包,并通过特定端口发送到目标 PC (111.222.333.444)。因此 src=192.168.0.3;dst=111.222.333.444
2. 数据包传输到 Windows 服务器。3
. 服务器接收数据包,并将 src 更改为 src=10.100.101.102,dst 保持不变。4
. 服务器使用 IPSec 选项加密数据包,并通过路由器将其发送到远程端点。5
. [远程端点的操作]
6. Windows 服务器接收响应并解密。7
. 将 dst (10.100.101.102) 更改为本地 dst=192.168.0.3。8.
将数据包发送到 Linux 和应用程序。

我该如何实现这一切?我不明白 NAT 在 Windows 服务器上是如何工作的。我在“路由和远程访问”中对其进行了配置,但我没有看到任何指定应将数据包的源 IP 和端口更改为 10.100.101.102 作为源的选项。

答案1

在继续之前,您需要对以下问题得到明确的答案:

  1. 您能从 Linux 机器 ping 通路由器吗?

  2. 如果可以,您能从 Linux 机器跟踪路由到路由器吗?从以上问题来看,我想确保:a. 您的流量确实先到达 Windows 机器,然后再到达路由器,而不是直接到达路由器。tracert 会告诉您这一点。b. 您的内部路由基础设施运行正常。

  3. 另一家公司的 IPsec 设备的 IP 地址是什么?IPsec 隧道非常静态,您无法使用 DNS 名称等来配置它们,因此您必须知道 IPsec 远程端点的地址。

  4. 另一个端点是否支持 IPsec Nat-Traverse (NAT-T)?如果他们不能肯定地告诉你这一点,请询问他们该端点设备的品牌和型号,如果可能的话,询问该设备的软件/固件版本,并搜索此类信息。

从您上面所说的内容来看,似乎首先您必须正确设置内部路由,因为路由器会将流量直接发送到 Linux 并从 Linux 中获取流量,甚至不让 Windows 参与游戏;除非您手动弄乱所有 3 个盒子上的路由表,所有 3 个(好吧,如果您已在 Windows 上设置了 RRAS,则可能不是 Windows,但即使这样也需要检查),或者对不同的分段使用不同的子网;例如路由器使用 192.168.0.1,Windows 使用 192.168.0.2,Windows 使用另一个 IP,如 192.168.1.1,Linux 使用 192.168.1.3。顺便说一句,如果您采用第二种方法,请确保路由器也知道第二个子网,方法是通过 192.168.0.2(Windows IP 与路由器的 IP 在同一范围内)将路由放到 192.168.1.x 网络。

在您正确完成上述所有操作后,现在您可以开始处理真实事物了!事情是这样的:

我们在Linux上将IP命名为LinIP

我们将Linux Seagment WinIPL上的windows的IP命名为

我们将路由器分段上的 Windows IP 命名为 WinIPR(如果您选择了上面的手动路由表操作方法,则两个 WinIP 将相同)

我们将您内部路由器的 IP 命名为 RoutIPint

我们将您路由器的公开 IP(ISP 提供给您的 IP)命名为 RoutIPext。

我们将远程 IPsec 端点 IP 命名为 RemTunIP。

我们将您尝试在 Tunnel RemResIP 后面的另一家公司访问的资源的 IP 命名为。

当您的 Linux 生成数据包时,它会将 LinIP 作为源,将 RemResIP 作为目标;通过 IP WinIPL 将其提供给 Windows Box。

如果设置正确,Windows Box 会将该数据包(包括上面提到的 IP 标头)放入另一个数据包中,将 WinIPR 作为源,将 RemTunIP 作为目标,对 WinIPR 和 RemTunIP 进行数字签名,然后将其发送给路由器

将数据包签名到 RoutIPext 和 RemTunIP 的路由器 NAT。这里是此链可能出现混乱的众多地方之一,因为签名在这里被违反,数据包变得无效,除非您的 Windows 计算机和其他公司的 IPsec 端点支持 NAT;也就是说,它们启用了 NAT-T。使用微软的这篇 kb 文章在您的 Windows 计算机中启用 Nat-T(乍一看似乎用于 VPN,但它是一般的 IPsec 设置,因此可以完成工作): http://support.microsoft.com/kb/926179 如果您的远程公司的 IPsec 设备也在 NAT 后面,请输入 2;如果不是,或者如果另一家公司不支持 Nat-T(这意味着他们确实没有对其 IPsec 流量进行 NAT),请输入 1。

当远程边缘 Ipsec 设备收到您的数据包(终于!)时,它将采用 RoutIPext 和 RemTunIP 的形式。使用 Nat-T 它将使用 WinIPR 和 RemTunIP 提取数据包,使用 IPsec 解密它将使用 LinIP 和 RemResIP 提取数据包,对其进行相应的路由并将其交给您的 linux 试图访问的资源。

因此你需要:

a. 远程办公室了解您的本地 Linux 子网

b. 在您的 Windows 上设置 IPsec 策略,使用 WinIPR 和 RemTunIP 来形成隧道,而不是其他任何东西。

c. 在远程站点设置RemTunIP和WinIPR的匹配策略。

d. 在路由器上启用直通功能。

e. 已经通过了我之前提到的 IPsec 部分的先决条件(tracert 和子网划分等)

!!!所以这根本不是小事!!!

相关内容