URPF------Unicast Rerverse Path Forward
URPF称为单手反向路径转发,其功能是在路由器用来防止IP欺骗或者IP伪造的。但URPF只能在路由器接口的入方向上应用,由于在接口上开启了URPF,所有路由器转发速度会相应地慢,所以要在接口上开启URPF,路由器必须开启cef转发。
当在一个接口上开启URPF时,从这个接口进入的数据都将会对数据的源IP地址进行查找,如果在路由表中路由器到达该源IP地址的出口就是该接口的话,那么路由器会转发该数据;否则丢弃该数据;丢弃数据也是查找失败的默认动作。
如果想让某一个URPF匹配失败的数据通过该接口,可以通过ACL来实现,ACL中如果定义的是允许,则该接口会转发数据,如果ACL中定义的是拒绝,则该接口同样会丢弃该数据。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

配置:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
在以上拓扑中,配置好全网的路由,其中:
R1到达任何网络的路由全都通过12.1.1.2
R3到达任何网络的路由全都通过34.1.1.4
R2到达3.3.3.3的路由全都通过23.1.1.3

 

1、  R2s1/0接口上开启URP
R2(config)#interface s1/0
R2(config-if)#ip verify unicast reverse-path

 

2、  R3上以3.3.3.3为源地址Ping 12.1.1.1,查看结果
R3#traceroute 12.1.1.1 source loopback 1
Type escape sequence to abort.
Tracing the route to 12.1.1.1
  1 34.1.1.4 100 msec 48 msec 32 msec
  2  *  *  *
          3  *
从以上输入中可以看到R312.1.1.1是不通的;因为R3到达12.1.1.1是先到达R4,再由R4发送给R2,最后到达R1,而我们在R2的接口上开启了URPF,而R2到达3.3.3.3的出口地址应该是f0/1,所以s1/0上做URPF检测失败,路由器丢弃该数据;

 

3、  如果想让上述URPF检测失败的数据可以通过R2的话,可以在R2上配置ACLURPF结合使用
R2(config)#access-list 100 permit ip host 3.3.3.3 any
R2(config)#interface s1/0
R2(config-if)#ip verify unicast reverse-path 100
再次从R3上以源IP3.3.3.3 Ping 12.1.1.1做测试,查看测试结果
R3#traceroute 12.1.1.1 source loopback 1

 

Type escape sequence to abort.
Tracing the route to 12.1.1.1

 

  1 34.1.1.4 20 msec 28 msec 32 msec
  2 24.1.1.2 48 msec 32 msec 44 msec
  3 12.1.1.1 140 msec *  120 msec
R3#
我们可以看到网络是通的,虽然这个数据在R2s1/0接口上URPF检测失败,但我们通过配置ACL允许了源地址为3.3.3.3的数据通过,所以网络还是通的。

 

如果在这里我们以源地址23.1.1.3去访问12.1.1.1,可以看到如下效果:
R3#ping 12.1.1.1 source 23.1.1.3

 

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 12.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 23.1.1.3
.....
Success rate is 0 percent (0/5)
R3#
看到网络是不通的,同样的道理,R2s1/0接口URPF检测失败;如果我们想让这个数据通过,同样可以配置ACL允许源地址为23.1.1.3的数据通过。