一:概念

  • ARP:address resolution protocol,地址解析协议
  • 作用:将已知的IP地址解析为MAC地址

二:实验

2.1 对首次ping进行抓包

(1)路由器R1

1
2
3
4
5
6
7
8
9
10
11
12
Router#show ip interface brief 
Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0 192.168.1.1 YES manual up up
GigabitEthernet0/1 unassigned YES unset administratively down down
GigabitEthernet0/2 unassigned YES unset administratively down down
GigabitEthernet0/3 unassigned YES unset administratively down down

Router#ping 192.168.1.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.3, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 2/2/4 ms

(2)路由器R2

1
2
3
4
5
6
Router#show ip interface brief 
Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0 192.168.1.3 YES manual up up
GigabitEthernet0/1 unassigned YES unset administratively down down
GigabitEthernet0/2 unassigned YES unset administratively down down
GigabitEthernet0/3 unassigned YES unset administratively down down

(3)使用 wireshark 进行抓包

由抓包结果进行分析,首次的Ping发送了一个ARP广播;192.168.1.3 接收到后保存了发送方的Mac地址,并做出了单播响应,告知了对方自己的Mac地址。因此,此后的5次PING命令,分别抓到发送和响应8个ICMP包。

2.2 查看 ARP

1
2
3
4
5
Router#show arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.1 - 5061.e800.1400 ARPA GigabitEthernet0/0
Internet 192.168.1.2 27 50ea.cd00.1500 ARPA GigabitEthernet0/0
Internet 192.168.1.3 12 50ea.cd00.1500 ARPA GigabitEthernet0/0

以太网的头部,每经过一个路由器都会从新编写一个新的头部,修改源MAC和目的MAC。

三:代理 ARP

3.1 概念

代理ARP(proxy arp):通常就是一个主机(路由器),作为指定的设备(路由器代替该设备)对另一台设备的APR请求做出响应。

3.2 实例

(1)R1 路由

通过出接口方式,将数据包通过Gi0/0接口发送出去;路由表新增一条静态路由;

通过 wireshark 抓包情况,发现若不配置出接口,数据将因无法定位到目标MAC而在路由器内部发不出去。

当配置出接口后,首次PING进行广播,获取到目标设备的MAC地址,wireshark 抓取到 8次通信数据包。

由此,R1和R2路由互通。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# R1: 通过出接口方式配置路由
ip route 192.168.1.0 255.255.255.0 Gi0/0

Router#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

192.168.0.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.0.0/24 is directly connected, GigabitEthernet0/0
L 192.168.0.1/32 is directly connected, GigabitEthernet0/0
S 192.168.1.0/24 is directly connected, GigabitEthernet0/0

(2)R2 路由

仅仅配置了2个接口的IP地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Router#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

192.168.0.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.0.0/24 is directly connected, GigabitEthernet0/0
L 192.168.0.2/32 is directly connected, GigabitEthernet0/0
192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.1.0/24 is directly connected, GigabitEthernet0/1
L 192.168.1.2/32 is directly connected, GigabitEthernet0/1

配置R2路由,关于1网段的出接口

1
Router(config)#ip route 192.168.1.0 255.255.255.0 Gi0/1

此时,若要从R1向R3发送数据包,通过 wireshark 抓包分析,数据包成功发送出去,却没有响应,所以此时,我们应该配置R3路由通往0网段的出接口。

(3)R3 路由

1
Router(config)#ip route 192.168.0.0 255.255.255.0 Gi0/0
1
2
3
4
5
Router>ping 192.168.0.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 3/4/7 ms

此时可以观察到R1路由与R3路由实现了互通。

3.3 ARP 变化

当我们R1与R3未进行通信时,此时R3的ARP表的情况是这样的:

1
2
3
4
Router#show ip arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.2 62 506e.b500.1701 ARPA GigabitEthernet0/0
Internet 192.168.1.3 - 502e.cd00.1800 ARPA GigabitEthernet0/0

当完成上述实例通信时,两者互通,此时查看R3的ARP表如下:

1
2
3
4
5
Router#show ip arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.0.1 1 506e.b500.1701 ARPA GigabitEthernet0/0
Internet 192.168.1.2 65 506e.b500.1701 ARPA GigabitEthernet0/0
Internet 192.168.1.3 - 502e.cd00.1800 ARPA GigabitEthernet0/0

由上述两表观察可知,R1路由的地址被存储在了R3的ARP表中,且因为有存活时间,更值得注意的是此处用到了 APR代理,代理地址即为我们的R2路由。因此此处由于设计本身的缺陷,存在漏洞,故而当代理ARP进行广播请求时,我们可以冒充网关(被攻击机的下一跳地址),给被攻击机做出单播响应,这样被攻击机就会存储攻击机的MAC地址,下次发送数据就会发送给攻击机,被攻击方可以直观的感受到不能上网(地址冲突),或者网络请求超时等。

四:总结

  • APR 后到优先,当下一跳存在2台路由器时,广播响应会被两台路由都响应,后者会将前者的响应覆盖,可能会导致我们的路由寻址不是最优路径;
  • 只写出接口的静态路由会依赖代理ARP,若关闭代理ARP则不能实现通信;
  • 代理ARP 会产生大量ARP映射列表,这些数据会占用内存;
  • 最好的静态路由写法就是既有出接口,又有下一跳;
  • 仅写下一跳会触发自身的递归查询;
  • ARP攻击:由于自身广播请求,所以请求的目的IP会被当前广播域内,所有的主机听到;若此时,黑客伪装自己的IP地址,就是我们请求的地址,再回访我们一次;即使我们之前请求到了真的服务器地址,但由于ARP本身后到优先的机制,黑客的地址会覆盖之前真正服务器的地址;我们的ARP映射列表中存储了黑客电脑的MAC,此时发送消息,我们就把数据全部发送到了黑客的电脑。
  • 防止ARP攻击:人为手动绑定MAC地址,arp IP address MAC address arpa;ARP映射表中就有了对方的MAC,无法被后到优先覆盖,防止被ARP欺骗。