EIGRP MD5验证本身的原理很简单,也必须通过“发送方的密码=接收方的密码”这个验证,其实跟明码的验证方式原理上并没有太大的区别,只不过这里的密码是经过加密的密码而已。而所谓的MD5加密,无非就是用一个基本上不可逆的算法对一个字符串进行加密,也就是说你不能够通过被加密的那堆字符串倒推出加密前的字符串。MD5加密在网站编程中被广泛用于对用户密码的加密,所以你在某个论坛上注册了账号,论坛的管理员也是不知道你的密码的,因为它只能看到一堆杂乱无章的字符串。好,言归正传,现在我们那教材上的一个例子来说明EIGRP MD5验证的配置。


我们先把这两台路由器的配置给写出来,再进一步解析:

R1#show running-config

key chain R1chain
key 1
key-string abc123
accept-lifetime 04:00:00 Jan 1 2008 infinite
send-lifetime 04:00:00 Jan 1 2008 04:01:00 Jan 1 2008
key 2
key-string efg456

accept-lifetime 04:00:00 Jan 1 2008 infinite
send-lifetime 04:00:00 Jan 1 2008 infinite


interface FastEthernet0/0
ip address 172.16.1.1 255.255.255.0
!
interface Serial0/0/1
bandwidth 64
ip address 192.168.1.101 255.255.255.254
ip authentication mode eigrp 100 md5
ip authentication key-chain eigrp 100 R1chain

!
router eigrp 100
network 172.16.1.0 0.0.0.255
network 192.168.1.0
auto-summary

--------------

R2#show running-config

key chain R2chain
key 1
key-string abc123
accept-lifetime 04:00:00 Jan 1 2008 infinite
send-lifetime 04:00:00 Jan 1 2008 infinite
key 2
key-string efg456
accept-lifetime 04:00:00 Jan 1 2008 infinite
send-lifetime 04:00:00 Jan 1 2008 infinite

interface FastEthernet0/0
ip address 172.16.1.1 255.255.255.0
!
interface Serial0/0/1
bandwidth 64
ip address 192.168.1.101 255.255.255.254
ip authentication mode eigrp 100 md5
ip authentication key-chain eigrp 100 R2chain
!
router eigrp 100
network 172.16.1.0 0.0.0.255
network 192.168.1.0
auto-summary


首先我们先看R1的配置,先看较下面关于接口的配置部分,可以看到MD5验证是在接口模式下进行配置的,这里我们使用ip authentication mode eigrp 100 md5命令来指出验证方式为md5,对自治系统号为100的EIGRP有效。
接着,使用ip authentication key-chain eigrp 100 R2chain来指出我们这个md5验证过程将会用到一个名称为R1chain的密钥链。所谓的密钥链,可能称为“密钥池”更加合适,就是可以在这个池中放一堆密码来供MD5验证使用,当然,某一时刻某个方向上只会有其中一个密码在使用,譬如从R1发送到R2的EIGRP分组可能使用密码1,从R2发送到R1的EIGRP分组可能使用密码2。之所以称为“密钥链”,大概是因为我们配置的多个密码它在生效时间上会有一个连续性,不然就可能出现一个真空时期,失去加密的意义。

好,我们现在将目光投到R1路由器上的密钥链R1chain,这里我们看到key 1和key 2,其实就是两个密码,只不过这两个密码有寿命。key-string后面跟的就是密码的明文(这里密码为“abc123”),accept-lifetime和send-lifetime分别指出了这个密钥用作“接收方”(验证R2发送过来的EIGRP)和用作“发送方”(将这个密码附加到自己发送给R2的EIGRP分组上)的寿命。

我们会发现,在路由器R2上也看到两个key,并且它们的密码跟路由器R1上的密码相同,不过,在寿命上有些差异,这是我们故意这样配置的,以演示验证的原理。

好,现在我们来看R2,我们注意到R2的两个key的寿命都是2008年1月1日4点开始,然后结束时间为infinite(永久),也就是说从2008年1月1日4点开始这两个key都生效,并且一直生效下去。现在R2发送一个EIGRP分组给R1,它会去找一个密码,找哪个呢?根据key后面跟的数字从小到大来找,当然是找到key 1了,也就是说使用密码“abc123”,并将其通过MD5算法加密后附加到分组上,分组传递到R1后,R1需要对这个分组进行验证,R1也有两个key,作为接收方,这时侯我们只需关注两个key的accept-lifetime,我们看到两个key都在“接收”的寿命范围内,这时侯R1使用哪个key来验证呢?这时侯就不是根据key后面的数值谁小了,而是采取列举的方式来逐一尝试,只要其中一个key的密码跟R1发送过来的分组中的密码匹配,就可以通过验证。验证的时候,R1会用MD5来对“abc123”进行加密,得到一个结果,然后用这个结果跟EIGRP分组中的那个加密字符串进行比较,如果相等,则表示它们的原始明文密码是一致的。

再来看EIGRP分组从R1发送给R2,这时侯我们关注R1的两个key的send-lifetime和R2的两个key的accept-lifetime,我们看看R1的两个key,注意到key 1的send-lifetime很短命,只有起始时间只相差1分钟,也就是说它作为发送方,只存活了1分钟,在头1分钟内,key 1和key 2都有效,但1分钟过后,就只有key 2生效了,假设我们已经过了2分钟,所以R1会使用key 2(密码为“efg456”),然后加密分组会发送到R2,R2的两个key作为accept方这时侯都生效,R1比较key 1和EIGRP分组,发现不匹配,于是再用key 2比较,这回匹配了,于是接收分组。