注意:当配置多个对等体的时候,每一个对等体都会有一个预共享密钥。这个时候它是怎样找到相对应的预共享密钥呢?毫无疑问在主模式里肯定是通过 IP 地址找到的。但是它怎么知道是哪个 IP 地址呢?在前面消息交互中并没有告诉它通过哪个 IP 地址去找预共享密钥。并且标识对方的 IP 地址或是主机名在下一个消息(消息6)里才会提到。因此,双方必须使用前面接收消息的源 IP 地址来找到与其对应的预共享密钥。
两种模式的应用场合
在实际应用中,一般情况下,如果两端设备都是公网固定IP地址(至少一端是固定 IP 地址)这种接入方式、且要实现设备之间点对点的环境,就采用主模式来协商。对于两端IP地址不是固定的情况(如ADSL拨号上网),并且双方都希望采用预共享密钥验证方法来创建IKE SA,就采用野蛮模式。另外如果发起者已知回应者的策略,采用野蛮模式能够更快地创建IKE SA。
问题回顾
为什么两边都是主机名的时候,就一定要用野蛮模式来协商呢?
通过上述IKE 1阶段的讨论,现在再来回答这个问题已经不难了。在两边都是主机名的时候,如果用主模式的话,就会出现根据源 IP 地址找不到预共享密钥的情况,以至于不能生成 SKEYID。
1、因为主模式在交换完3、4消息以后,需要使用预共享密钥来计算 SKEYID,但是由于双方的 ID 信息在消息5、6中才会被发送,此时主模式的设备只能使用消息3、4中的源 IP 地址来找到与其对应的预共享密钥;如果主模式采用主机名方式,主机名信息却包含在消息5、6中,而 IPSEC 双方又必须在消息5、6之前找到其相应的预共享密钥,所以就造成了矛盾。
2、在野蛮模式中,ID信息(IP地址或者主机名)在消息1、2中就已经发送了,对方可以根据 ID 信息查找到对应的预共享密钥,从而计算出 SKEYID。