理解ARP及Proxy(代理)ARP
ARP(address resolution protocol)是用来将IP地址解析为MAC地址的协议。
ARP可分为两种
- 动态arp:利用ARP广播请求报文,自动进行IP地址到MAC地址的解析,再使用单播播进行回应ARP应答。
- 静态arp:手工建立IP地址和MAC地址之间的映射关系。
ARP工作原理:
- PC1产生了一条信息 广播信息 内网泛洪查询,查询192.168.1.1的MAC地址是多少
- GW产生一条单播消息,进行回应,回应PC1.我就是你要找的,我的IP是192.168.1.1 我的MAC地址是XXX
- PC1收到会记录到自己的ARP表里
- PC1在产生实际的业务数据到达目的 192.168.1.1 可以查询到自己的ARP表 进行数据封装
免费ARP:
- 配置IP后,会向整个网络中广播自己的IP,问是否有和自身IP一致的设备。
- 检测网络中IP地址的冲突
Proxy arp(代理ARP):
当主机没有网关,可以发送一个广播ARP请求()请求目的主机MAC地址,配置了代理ARP的路由器收到了这个ARP请求后,再确认地址可达后,会使用自身的mac地址作为该ARP请求的回应,使处于不同物理网络的同一网段主机正常通信。
实验拓扑:
实验需求:
- 通过配置静态ARP防止ARP欺骗攻击;
- 配置ARP代理,实现网络内所以主机的通信;
实验配置:
ARP基础配置
R1:
interface GigabitEthernet0/0/1
ip address 10.1.1.254 255.255.255.0
interface GigabitEthernet0/0/2
ip address 10.1.2.254 255.255.255.0
//配置互联IP地址
我们对PC和R1之间的连通性测试,触发ARP协议
PC2:
PC>ping 10.1.1.254
Ping 10.1.1.254: 32 data bytes, Press Ctrl_C to break
From 10.1.1.254: bytes=32 seq=1 ttl=255 time=32 ms
From 10.1.1.254: bytes=32 seq=2 ttl=255 time=32 ms
From 10.1.1.254: bytes=32 seq=3 ttl=255 time=31 ms
From 10.1.1.254: bytes=32 seq=4 ttl=255 time=47 ms
--- 10.1.1.254 ping statistics ---
5 packet(s) transmitted
4 packet(s) received
20.00% packet loss
round-trip min/avg/max = 31/35/47 ms
通过抓包我们发现,抓到了2个ARP的报文
第一个报文,是一个广播报文,PC2泛洪广播报文,询问10.1.1.254 的MAC是多少
发送者(Sender)为PC1的MAC,IP是PC1的IP,目标(Target)MAC是广播全F,IP是10.1.1.254 。
第二个报文,是一个单播报文,R1向PC2做出了一个单播的回应,告知IP10.1.1.254 的mac地址为00-E0-FC-1A-2B-B3
当设备之间有数据访问时,ARP表中没有目标IP地址与目标MAC地址的对应表项,ARP协议会被触发,向直连网段发送ARP请求报文,请求目的IP地址所对应的MAC地址
让我们查看下PC和R1和ARP表
PC2:
//查看ARP表,有R1 IP地址和MAC地址的映射关系
PC>arp -a
Internet Address Physical Address Type
10.1.1.254 00-E0-FC-1A-2B-B3 dynamic
R1:
[R1]dis arp all
IP ADDRESS MAC ADDRESS EXPIRE(M) TYPE INTERFACE VPN-INSTANCE
VLAN/CEVLAN PVC
------------------------------------------------------------------------------
10.1.1.254 00e0-fc1a-2bb3 I - GE0/0/1
10.1.1.1 5489-98cf-2603 5 D-0 GE0/0/1
10.1.1.2 5489-98cf-5723 8 D-0 GE0/0/1
10.1.2.254 00e0-fc1a-2bb4 I - GE0/0/2
10.1.2.3 5489-98cf-e417 6 D-0 GE0/0/2
------------------------------------------------------------------------------
Total:5 Dynamic:3 Static:0 Interface:2
//R1上有着PC1、PC2、PC3以及自己两个接口G0/0/1、G0/0/2的IP地址和MAC地址的映射关系
arp表项的老化时间为20分钟,可以修改
静态ARP配置
如果攻击者发送伪造的arp报文,报文里面所通告的IP地址和MAC地址的映射是错误的,则设备会将错误的映射关系更新到ARP表中。当需要数据通信时,封装错误的数据帧,会导致无法通信。
我们模拟R1受到了arp攻击,静态写一个错误的MAC地址和PC1的IP地址做映射,测试下连通性
R1:
arp static 10.1.1.1 5489-98cf-2604 //静态指定PC1 IP地址对应的MAC地址关系
//查看R1的ARP映射表,发现已经被更改了
[R1]dis arp all
IP ADDRESS MAC ADDRESS EXPIRE(M) TYPE INTERFACE VPN-INSTANCE
VLAN/CEVLAN PVC
------------------------------------------------------------------------------
10.1.1.254 00e0-fc45-808f I - GE0/0/1
10.1.2.254 00e0-fc45-8090 I - GE0/0/2
10.1.1.1 5489-98cf-2604 S--
------------------------------------------------------------------------------
Total:3 Dynamic:0 Static:1 Interface:2
ping测试
PC>ping 10.1.1.254
Ping 10.1.1.254: 32 data bytes, Press Ctrl_C to break
Request timeout!
Request timeout!
--- 10.1.1.254 ping statistics ---
2 packet(s) transmitted
0 packet(s) received
100.00% packet loss
//无法通讯
[R1]arp static 10.1.1.1 5489-98cf-2603
//将MAC静态更改回来
静态ARP 可以很好的针对ARP攻击,但是需要一条一条的写,工作量大,而且更改了IP或者MAC还需要重新更新ARP映射。
配置Proxy ARP
- 现在的网络被路由器R1 分割成了两个独立的广播域,每个路由器接口对应一个IP地址。
- arp的数据包是没有办法穿过广播域的,继而无法获取到对应的mac地址,没有mac地址,就没有办法进行数据封装,无法访问。
- 所以PC1和PC2无法和PC3通讯,即使他们是一个网段。
所以我们要再R1上开启ARP代理
interface GigabitEthernet0/0/1
arp-proxy enable //开启ARP代理
interface GigabitEthernet0/0/2
arp-proxy enable //开启ARP代理
再用PC1 与PC3测试连通性:
PC>ping 10.1.2.3
Ping 10.1.2.3: 32 data bytes, Press Ctrl_C to break
From 10.1.2.3: bytes=32 seq=1 ttl=127 time=93 ms
From 10.1.2.3: bytes=32 seq=2 ttl=127 time=63 ms
From 10.1.2.3: bytes=32 seq=3 ttl=127 time=94 ms
From 10.1.2.3: bytes=32 seq=4 ttl=127 time=313 ms
From 10.1.2.3: bytes=32 seq=5 ttl=127 time=78 ms
抓包看效果:
第一个报文,是一个广播报文,PC2泛洪广播报文,询问10.1.2.3 的MAC是多少
第二个报文,是一个单播报文,R1向PC2做出了一个单播的回应,要去往10.1.2.3使用的mac地址为00e0-fc45-808f,为R1的g0/0/1接口地址(网关地址的MAC)。