HCNP Routing&Switching之代理ARP
前文我们了解了端口隔离相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16186451.html;今天我们来聊一聊ARP代理相关话题;
端口隔离之破解之道
前文我们通过抓包可以看到,当同一vlan下的端口做了双向端口隔离或者单向端口隔离以后,对应的端口就不能正常通信;其中最主要的原因是通信双方在通信时,拿不到对方的mac;拿不到通信对方的mac,以太网二层封装就封装不了,从而导致通信无法正常进行;那怎么打破端口隔离这样的限制呢?其实也很简单,我们找一个中间设备或接口,该接口能够和通信双方正常通信,然后赋予该接口转发arp的功能,是不是可以实现做过端口隔离的双方实现通信呢?
代理ARP
所谓代理ARP是指,如果ARP请求是从一个网络的主机发往同一网段,却不再同一物理物理网络上的另一台主机(即相互隔离的同一网段内的主机),那么连接它们的具有代理ARP功能的设备就可以回答该请求,这个过程就叫做代理ARP(Proxy ARP);代理ARP屏蔽了分离的物理网络,使用户使用起来就好像在同一物理网络上一样;代理ARP可以分为两大类,一类是连接相同三层接口的本地代理和连接不同三层接口的普通代理arp;
普通代理ARP

提示:普通代理ARP是通信双方分别连接到设备的不同三层接口上,且这些主机不再同一广播域上;如上图主机A和主机B,分别连接路由器的两个端口上;但是主机A和主机B通信时,由于掩码都是16位,网络地址都一样,所以主机A和主机B通信时,它们都会先发送ARP请求(因为同一网段,不需要找网关);但是主机A或主机B如果直接发送arp请求,都会被路由器分割,所以导致通信无法正常进行;要想正常进行,我们需要在路由器的两个接口上开启代理ARP,这样主机A或主机B发送的arp请求都会通过开启路由器代理arp的接口转发,从而实现拿到对方mac实现通信;
本地代理ARP

提示:本地代理ARP就是指想要互通的主机连接到设备的同一个三层接口上,且这些主机不再同一广播域中;如上图主机A和主机B都同属VLAN2 且有做了双向端口隔离,此时主机A和主机B的通信就依赖一个三层接口来代理ARP实现通信;
实验:在交换机上我们做了pc1和pc2双向端口隔离,pc1和pc3做了单向端口隔离,在不取消端口隔离的情况下是实现pc1和pc2、pc3互通

交换机配置

sys
sys sw1
vlan 12
int g0/0/1
port link-type access
port default vlan 12
int g0/0/2
port link-type access
port default vlan 12
int g0/0/3
port link-type access
port default vlan 12
int g0/0/1
port-isolate en
int g0/0/2
port-isolate en
int g0/0/3
am isolate g0/0/1
验证隔离信息

验证:pc1和pc2、pc3的互通性

提示:现在pc1和pc2、pc3都是不通的;
在交换机上启用一个vlanif12的接口,并配置和pc1、pc2同网段ip地址

在vlanif 12接口上开启同vlan内arp代理

提示:在三层交换机上开启arp代理分同一vlan内的arp代理和不同vlan间的arp代理;上述实验环境需要在三层接口上开启同一vlan内的arp代理;arp-proxy 这个命令是路由器上开启arp代理;
验证:pc1和pc2、pc3的互通性

提示:可以看到现在pc1和pc2、pc3都能正常通信;
在pc1上查看arp表

提示:可以看到在pc1上pc2和pc3的mac地址都是同vlanif 12接口mac地址一样,这是为什么呢?其实从上面的mac地址表我们就能想到,pc1和pc2、pc3通信都是用的vlanif 12的mac,这是因为pc1和pc2、pc3通信时发送arp请求,对应回复pc1的都是vlanif12接口;
清空三台pc上的arp地址表和交换机的mac地址表,抓包查看其过程

提示:可以看到pc1pingpc2时,首先是pc1发送arp广播,说谁是1.0.0.2,请告诉我你的mac地址,此时vlanif 12收到pc1发送的arp广播后,它一看自己的路由表是可以直接到达1.0.0.2,所以它就把自己的mac地址告诉pc1,然后vlanif 12又发送arp请求,说谁是1.0.0.2,请把mac地址告诉1.0.0.12,此时pc2收到arp广播后,就把自己的mac告诉1.0.0.12,后续pc发送数据给vlanif12 ,vlanif12 通过拆除以太网二层包头,然后又用pc2的mac地址作为目标mac封装以太网二层包头发送给pc2;pc1同pc3的通信过程同pc1和pc2的过程一样;
端口隔离之防破解之道
通过上述实验可以看到如果我们在三层交换机上创建vlanif接口,并开启arp代理,那么我们之前配置的端口隔离就失效了,那怎么避免呢?其实很简单,默认情况下端口隔离只是隔离的二层,如果我们想要把三层也给隔离了,只需要修改端口隔离模式为all即可,如下所示

验证:pc1和pc2、pc3的互通性

提示:可以看到现在把隔离模式修改为all以后,即便我们在交换机上创建了vlanif接口,也开启了arp代理,对应通信还是被隔离的;这是因为之前只是隔离二层,现在修改隔离模式为all,表示二层和三层都做隔离;所以现在即便有三层接口,也开启了arp代理,对应通信也是被隔离的;
代理arp之写静态路由出接口和下一跳区别
在前边聊静态路由时,我们特意提到在写静态路由时,如果是以太网链路上,我们推荐写下一跳地址,不推荐写出接口,这是为什么呢?先看一个实验

如上实验环境,我们在R1上配置静态路由时,为什么推荐写下一跳呢?
写下一跳,然后r1 ping 2.2.2.2 抓包查看其过程

在R1抓包看看通信过程

提示:可以看到R1ping 2.2.2.2时,根据静态路由,它首先会发送arp请求下一跳的arp;
静态路由改写成出接口,看看对应通信又有什么变化呢?

在R1上抓包,看看通信过程

提示:可以看到当我们写静态路由写成出接口后,R1会直接问2.2.2.2的mac地址,它会认为2.2.2.2和本地直连;这样一来会导致一个问题就是拿不到2.2.2.2的mac;从而导致通信无法正常完成;
分析:之所以在以太网环境中写静态路由推荐写下一跳地址,是因为写下一跳,路由器会发送要下一跳的mac地址,从而实现通信;写出接口就是告诉路由器去往目标网段,直接将数据发送给对应出接口即可;这样一来导致路由器认为目标网段和出接口直连(误认为出接口和目标地址在同一广播域,所以它就直接发送arp请求目标地址的mac地址),从而导致拿不到目标网段的mac,导致通信无法正常完成;
在R2上开启arp代理,实现通信

验证:R1ping2.2.2.2看看是否能通?

提示:可以看到在R2上开启arp代理以后,对应通信就能正常进行;这是因为R1发送arp请求2.2.2.2的mac地址,R2的g0/0/0口收到arp请求以后,一看自己的路由表中能够到达2.2.2.2,且该接口也开启了arp代理,所以它会把自己的mac告诉给R1,然后R1有了2.2.2.2的mac后,后续就可以直接封装以太网包头发送数据;
那为什么点到点的串行链路中写下一跳或出接口都行呢?
因为,串行链路中不需要封装mac地址!!!
HCNP Routing&Switching之代理ARP的更多相关文章
- HCNP Routing&Switching之MUX VLAN
前文我们了解了代理ARP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16188230.html:今天我们再来聊一聊vlan隔离相关话题MUX VLA ...
- HCNP Routing&Switching之Super VLAN
前文我们了解了VLAN隔离技术MUX VLAN相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16196936.html:今天我们来聊一聊VLAN优化S ...
- HCNP Routing&Switching之ARP安全
前文我们了解了IP安全相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16652367.html:今天我们来聊一聊ARP安全相关话题: 什么是ARP? ...
- HCNP Routing&Switching之OSPF网络类型
前文我们了解了PPPoE协议相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15182512.html:今天我们聊聊一聊OSPF中的网络类型相关话题: ...
- HCNP Routing&Switching之IS-IS报文结构和类型
前文我们了解了IS-IS动态路由协议基础相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15249328.html:今天我们来聊一聊IS-IS动态路由协 ...
- HCNP Routing&Switching之BGP报文结构、类型和状态
前文我们了解了BGP的邻居建立条件.优化以及BGP认证相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15395723.html:今天我们来聊一聊BGP ...
- HCNP Routing&Switching之组播技术-组播协议IGMP
前文我们了解了组播地址相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15616740.html:今天我们来聊一聊组播协议中IGMP协议相关话题: 组播 ...
- HCNP Routing&Switching之端口隔离
前文我们了解了组播路由协议稀疏模式中的RP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16154347.html:今天我们来聊一聊二层交换机中有关v ...
- HCNP Routing&Switching之VRRP基础
前文我们了解了链路高可用技术链路聚合相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16279078.html:今天我们来聊一聊另一种高可用技术,网关高 ...
随机推荐
- 时序数据库之InfluxDB的基本操作
1.进入Influxdb的客户端 [root@activity_sentinel ~]# influx 2.数据库的操作 显示所有的数据库名 > show databases name: dat ...
- 如何实现 Spring Boot 应用程序的安全性?
为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置.它只需要很少的代码.配置类将必须扩展WebSecurity ...
- mac下的phpstorm增加xdebug调试
zhuan:https://blog.csdn.net/gd_9988/article/details/106248573 tips:不确定xdebug版本的,把phpinfo()的网页源代码全部复制 ...
- switch 是否能作用在 byte 上,是否能作用在 long 上, 是否能作用在 String 上?
在 Java 5 以前,switch(expr)中,expr 只能是 byte.short.char.int.从 Java 5 开始,Java 中引入了枚举类型,expr 也可以是 enum 类型,从 ...
- 如何实现集群中的 session 共享存储?
Session 是运行在一台服务器上的,所有的访问都会到达我们的唯一服务器上,这 样我们可以根据客户端传来的 sessionID,来获取 session,或在对应 Session 不 存在的情况下(s ...
- js Object扩展自定义方法,jQuery抛出 Uncaught TypeError: matchExpr[type].exec is not a function
使用Jquery的时候,想在Object原型上添加自己扩展的方法的时候,启动项目之后,打开网页就会报如上错误信息,经过测试,可以在Object下的具体类型上进行扩展自定义方法,如String,Arra ...
- 学习ELK日志平台(四)
一:需求及基础: 场景: 1.开发人员不能登录线上服务器查看详细日志 2.各个系统都有日志,日志数据分散难以查找 3.日志数据量大,查询速度慢,或者数据不够实时 4.一个调用会涉及到多个系统,难以在这 ...
- 学习Redis(一)
一.NoSQL 1.NoSql介绍 1.not only SQL,非关系型数据库,它能解决常规数据库的并发.IO与性能的瓶颈 2.解决以下问题: ① 对数据库的高并发读写需求 ② 大数据的高效存储和访 ...
- SpringDataJpa备忘录
单向多对一关系 //产品类型 一的一方 @Entity public class ProductDir { @Id @GeneratedValue private Long id; private S ...
- 插值方法 - Newton向前向后等距插值
通常我们在求插值节点的开头部分插值点附近函数值时,使用Newton前插公式:求插值节点的末尾部分插值点附近函数值时,使用Newton后插公式. 代码: 1 # -*- coding: utf-8 -* ...