URPF------Unicast Rerverse Path Forward
URPF
称为单手反向路径转发,其功能是在路由器用来防止
IP
欺骗或者
IP
伪造的。但
URPF
只能在路由器接口的入方向上应用,由于在接口上开启了
URPF
,所有路由器转发速度会相应地慢,所以要在接口上开启
URPF
,路由器必须开启
cef
转发。
当在一个接口上开启
URPF
时,从这个接口进入的数据都将会对数据的源
IP
地址进行查找,如果在路由表中路由器到达该源
IP
地址的出口就是该接口的话,那么路由器会转发该数据;否则丢弃该数据;丢弃数据也是查找失败的默认动作。
如果想让某一个
URPF
匹配失败的数据通过该接口,可以通过
ACL
来实现,
ACL
中如果定义的是允许,则该接口会转发数据,如果
ACL
中定义的是拒绝,则该接口同样会丢弃该数据。
配置:
在以上拓扑中,配置好全网的路由,其中:
R1
到达任何网络的路由全都通过
12.1.1.2
R3
到达任何网络的路由全都通过
34.1.1.4
R2
到达
3.3.3.3
的路由全都通过
23.1.1.3
1、
在
R2
的
s1/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 *
从以上输入中可以看到
R3
到
12.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
上配置
ACL
与
URPF
结合使用
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
上以源
IP
为
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 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#
我们可以看到网络是通的,虽然这个数据在
R2
的
s1/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#
看到网络是不通的,同样的道理,
R2
的
s1/0
接口
URPF
检测失败;如果我们想让这个数据通过,同样可以配置
ACL
允许源地址为
23.1.1.3
的数据通过。