在Windows中,似乎有两种设置IPsec的方法:
secpol.msc一部分)。 wf.msc ,在Windows 2008 / Vista中引入)。 我的问题涉及到#2 – 我已经想出了我需要知道的#1。 (但是我想用改进的encryptionfunction来使用“新”pipe理单元。)
我有两个Windows Server 2008 R2计算机在同一个域(域成员),在同一个子网上:
server2 172.16.11.20 server3 172.16.11.30
我的目标是使用隧道模式下的 IPsecencryption这两台机器之间的所有通信,以便协议栈是:
首先,在每台计算机上,我创build了一个连接安全规则 :
server2 172.16.11.20 172.16.11.30 172.16.11.30 在这一点上,我可以ping每台机器,Wireshark显示协议栈; 然而,没有什么是encryption的(在这一点上是预期的)。 我知道它是未encryption的,因为Wireshark可以解码它(使用设置尝试检测/解码NULLencryption的ESP有效载荷 ), 监视器 > 安全关联 > 快速模式显示ESPencryption: 无 。
然后在每台服务器上,我创build了入站和出站规则 :
172.16.11.20 172.16.11.30 问题是 :尽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
我尝试了几件事情:
但是实际上没有那么多旋钮可以转动。
有没有人有任何想法? 有没有人试图build立使用Windows防火墙的两台主机之间的隧道模式 ?
我已经成功地使用完全相同的规则设置了传输模式 (即没有隧道),所以我有点惊讶,它没有添加隧道的Just Work™。
经过大量的调查和微软的支持,我find了答案。
诀窍是:不要创build任何入站或出站规则进行encryption。 只创build一个连接安全规则 (对于隧道)。 然后,设置防火墙的IPsec默认值以encryption每个启用IPsec的连接。
在隧道的每一端执行以下操作:
创build连接安全规则 :
172.16.11.20 172.16.11.30 172.16.11.30 强制所有IPsec连接进行encryption:
如果您以前创build了任何入站/出站规则进行encryption,请禁用或删除它们。
这很好。 它唯一的缺点是它强制在每个 IPsec连接上进行encryption; 您不能再混合使用encryption和完整性保护连接。
你怎么知道stream量是真正隧道(即ESP是承载IP有效载荷,而不是,例如,TCP)? 您可以validation这与旧的IPsec MMC( IP安全策略pipe理 ,或secpol.msc )。