Windows 2008 R2以隧道模式进行IPsecencryption,主机位于同一子网中

在Windows中,似乎有两种设置IPsec的方法:

  1. IP安全策略pipe理 MMCpipe理单元(在Windows 2000中引入了secpol.msc一部分)。
  2. 具有高级安全性 MMCpipe理单元的Windows防火墙wf.msc ,在Windows 2008 / Vista中引入)。

我的问题涉及到#2 – 我已经想出了我需要知道的#1。 (但是我想用改进的encryptionfunction来使用“新”pipe理单元。)


我有两个Windows Server 2008 R2计算机在同一个域(域成员),在同一个子网上:

 server2 172.16.11.20 server3 172.16.11.30 

我的目标是使用隧道模式下的 IPsecencryption这两台机器之间的所有通信,以便协议栈是:

  • IP
  • ESP
  • IP
  • …等等。

首先,在每台计算机上,我创build了一个连接安全规则

  • 端点1 :(本地IP地址),例如server2 172.16.11.20
  • 端点2 :(远程IP地址),例如172.16.11.30
  • 协议: 任何
  • 身份validation: 要求入站和出站计算机(Kerberos V5)
  • IPsec隧道:
    • 免除IPsec保护的连接
    • 本地隧道端点: 任何
    • 远程隧道端点:(远程IP地址),例如172.16.11.30

在这一点上,我可以ping每台机器,Wireshark显示协议栈; 然而,没有什么是encryption的(在这一点上是预期的)。 我知道它是未encryption的,因为Wireshark可以解码它(使用设置尝试检测/解码NULLencryption的ESP有效载荷 ), 监视器 > 安全关联 > 快速模式显示ESPencryption:

然后在每台服务器上,我创build了入站出站规则

  • 协议: 任何
  • 本地IP地址:(本地IP地址),例如172.16.11.20
  • 远程IP地址:(远程IP地址),例如172.16.11.30
  • 行动: 允许连接,如果它是安全的
    • 要求连接被encryption

问题是 :尽pipe我在每台服务器上创build了入站出站规则来启用encryption,但数据仍然通过NULLencryption(ESP包装)。 (你可以在Wireshark中看到。)

当到达接收端时,它被拒绝(大概是因为它是未encryption的)。 [并且,禁用接收端的入站规则导致它locking和/或蓝屏 – 乐趣!] Windows防火墙日志说:例如:

 2014-05-30 22:26:28 DROP ICMP 172.16.11.20 172.16.11.30 - - 60 - - - - 8 0 - RECEIVE 

我尝试了几件事情:

  • 规则中 ,将本地IP地址设置为Any
  • 切换免除IPsec保护连接设置
  • 禁用规则(例如禁用一组或两组入站或出站规则)
  • 改变协议(例如只是TCP)

但是实际上没有那么多旋钮可以转动。

有没有人有任何想法? 有没有人试图build立使用Windows防火墙的两台主机之间的隧道模式

我已经成功地使用完全相同的规则设置了传输模式 (即没有隧道),所以我有点惊讶,它没有添加隧道的Just Work™。

经过大量的调查和微软的支持,我find了答案。

诀窍是:不要创build任何入站出站规则进行encryption。 只创build一个连接安全规则 (对于隧道)。 然后,设置防火墙的IPsec默认值以encryption每个启用IPsec的连接。

在隧道的每一端执行以下操作:

  1. 创build连接安全规则

    • 端点1 :(本地IP地址),例如172.16.11.20
    • 端点2 :(远程IP地址),例如172.16.11.30
    • 协议: 任何
    • 身份validation: 要求入站和出站,计算机(Kerberos V5)
    • IPsec隧道:
      • 免除IPsec保护的连接
      • 本地隧道端点: 任何
      • 远程隧道端点:(远程IP地址),例如172.16.11.30
  2. 强制所有IPsec连接进行encryption:

    1. 打开主要防火墙属性(右键单击具有高级安全性的Windows防火墙 >属性…)
    2. 在“ IPsec设置”选项卡的“ IPsec默认值”下 ,单击“ 自定义…”
    3. 数据保护(快速模式)下 ,select高级 ,然后点击自定义…
    4. 选中使用这些设置的所有连接安全规则的“ 需要encryption ”框。
    5. 调整任何其他设置(例如,您可能想要删除3DES作为协议),然后确定你的出路。

如果您以前创build了任何入站/出站规则进行encryption,请禁用或删除它们。

这很好。 它唯一的缺点是它强制在每个 IPsec连接上进行encryption; 您不能再混合使用encryption和完整性保护连接。


你怎么知道stream量是真正隧道(即ESP是承载IP有效载荷,而不是,例如,TCP)? 您可以validation这与旧的IPsec MMC( IP安全策略pipe理 ,或secpol.msc )。

  • 在一台服务器上,使用WFAS的上述说明创build隧道。
  • 在另一台服务器上,使用“旧”IPsec MMC创build隧道。
  • 这两个应该没有任何问题沟通。
  • 如果您将“旧”IPsec策略切换到传输模式(即删除隧道),连接将中断。 这就是你可以告诉WFAS连接真正的隧道。