代理ARP

科普中国-科学百科 2019-02-21 作者:李嘉骞

  代理ARP是ARP协议的一个变种。 对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。代理ARP就是将一个主机作为对另一个主机ARP进行应答。它能使得在不影响路由表的情况下添加一个新的Router,使得子网对该主机来说变得更透明化。同时也会带来巨大的风险,除了ARP欺骗,和某个网段内的ARP增加,最重要的就是无法对网络拓扑进行网络概括。代理ARP的使用一般是使用在没有配置默认网关和路由策略的网络上的。1

  简介

  代理ARP是ARP协议的一个变种。对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。代理ARP就是将一个主机作为对另一个主机ARP进行应答。它能使得在不影响路由表的情况下添加一个新的Router,使得子网对该主机来说变得更透明化。同时也会带来巨大的风险,除了ARP欺骗,和某个网段内的ARP增加,最重要的就是无法对网络拓扑进行网络概括。代理ARP的使用一般是使用在没有配置默认网关和路由策略的网络上的。2

  proxy ARP定义

  proxy ARP就是通过使用一个主机(通常为router),来作为指定的设备对另一设备的ARP请求作出应答。

  工作过程

  代理ARP的工作过程如下:

  PC1和PC2虽然属于不同的广播域,但它们处于同一网段中,因此PC1会向PC2发出ARP请求广播包,请求获得PC2的MAC地址。由于路由器不会转发广播包,因此ARP请求只能到达路由器,不能到达PC2。

  当在路由器上启用ARP代理后,路由器会查看ARP请求,发现IP地址172.16.20.100属于它连接的另一个网络,因此路由器用自己的接口MAC地址代替PC2的MAC地址,向PC1发送了一个ARP应答。

  PC1收到ARP应答后,会认为PC2的MAC地址就是00-00-0c-94-36-ab,不会感知到ARP代理的存在。

  在PC1的ARP表中可以能看到如下ARP条目:

  C:\>arp -a

  Interface: 172.16.10.100 --- 0x2

  Internet Address Physical Address Type

  172.16.20.100 00-00-0c-94-36-ab dynamic

  在接下来的数据通信中,PC1先将数据发送给路由器,由路由器转发给PC2。3

  

  优点

  最主要的一个优点就是能够在不影响其他router的路由表的情况下在网络上添加一个新的router,这样使得子网的变化对主机是透明的

  proxy ARP应该使用在主机没有配置默认网关或没有任何路由策略的网络上

  负面影响

  ⒈增加了某一网段上ARP流量

  ⒉主机需要更大的ARP table来处理IP地址到MAC地址的映射

  ⒊安全问题,比如ARP欺骗(spoofing)

  ⒋不会为不使用ARP来解析地址的网络工作

  ⒌不能够概括和推广网络拓扑4

  ARP与代理ARP

  ARP报文是主机发送出来的,在该主机只知道对方的IP地址且想知道对方的MAC地址时,它以广播的方式将ARP请求发送到自己所在网段的各个节点。当有主机响应时,回发的报文是单播发送。

  代理ARP是当主机知道一个IP地址且它想知道该IP地址对应的MAC地址时,主机广播发送ARP请求,但是如果有同一网段的部分主机在另一个物理网络时(比如两个192.168.1.0的网段,中间夹着一个192.168.2.0的网段),就需要中间设备(路由器)进行代理ARP。因为路由器默认是不转发广播报文的,所以当路由器收到ARP请求时,它将启动代理ARP服务,将发送广播ARP报文。

  FAQ

  1) 什么是ARP代理?

  路由器收到ARP Request时,若发现查询的目的IP地址在不同子网,路由器会扮演代理的ARP的角色,代为回答,告诉查询者它所要做的MAC地址 (用的是之间接口的MAC地址)

  2)为什么要有ARP代理?路由器的一个重要功能是把局域网广播包限制在该网内,不让扩散,否则会造成网络风暴。ARP Request是个广播包,它询问的对象若在同一个局域网内,就会回答。但如果查询对象不在同一个局域网,那怎么办呢?为了解决这个问题,路由器就提供一个服务:代理ARP.

  3) 还有什么方法来解决跨局域网的地址查询? 若主机配置了默认网关,在查询MAC地址的对象位于局域网之外的时候,可以把查询任务交给默认网关。

  4) 什么情况下用ARP代理? 网络中主机、路由器都有ARP cache. 主机通常配置了默认网关,它们会用默认网关查询局域网外的MAC地址。路由器在需要查询远程网段里的MAC地址时,与其相连接的路由器,在收到ARP Request时就会扮演代理ARP的角色。

  常见疑问

  验证一些疑问:

  ⒈ARP请求到底什么时候会发

  ⒉代理ARP(proxy arp)会自动响应到哪些网段的ARP请求

  ⒊代理ARP到底适用什么样的环境

  下面一个一个说:

  ⒈首先ARP是Ethernet环境下的一个机制,刚开始的时候有点犯晕,居然在s0口上配了一下,然后去sh arp,还在想怎么没东西出来

  然后,并不是每一个出外网的包都会产生arp请求(这里不讨论arp cache的问题,默认cache里都是空的),一个接口,只会向ip地址在本接口配置的子网内的地址发arp请求,而对于ip地址不在接口配置的子网的,就要去查路由表发送了

  比如:打开debug arp,e0 ip add 172.16.1.1 255.255.255.128

  本地ping 172.16.1.1-1.126都会产生arp请求(arp-cache里没有的情况下),

  但是ping 172.16.1.128以上都不会了

  ⒉代理ARP只响应那些在自己的路由表里能找到的网段,而不是象我以前想的那样会用自己的mac响应主机所有的arp请求

  比如:PC--Route

  PC Ether:ip address 172.16.12.2 255.255.0.0

  Router:

  interface Ethernet0/0:

  ip address 172.16.12.1 255.255.255.0

  interface Loopback0

  ip address 172.16.14.1 255.255.255.0

  这样,在pc上ping 172.16.14.1的时候,可以看到,pc产生了一个arp request,路由器用自己的E0/0 Mac地址回复了这个请求,也就是做了ARP代理,如果我们ping 172.16.15.1,arp包也被发到路由上,但是路由器不响应这个arp包。

  适用环境

  代理ARP到底适用什么样的环境

  这个问题说实在的我也没有想的很明白,有的书上说,代理ARP起到了一个提供网关的作用,其实通过上面第一个验证,很明显这个说法是完全不正确的,因为只有请求本网段的ip的时候才会产生arp请求,代理arp最多也只能代理对于产生这个arp请求的主机是“同一个子网”的ip,这算什么网关呢?

  ***************这个作者显然是错的,当主机未配置默认路由时,ping非本网段地址,会向网络发送此非本网段地址的ARP请求,并且开启了代理ARP的设备接口有该非本网段路由时,会将自己的MAC进行ARP答复,实现ARP代理功能。本网段内的访问仅仅是简单的广播寻址,不涉及代理ARP,当主机配置默认路由时,该ARP请求直接请求的就是网关的ARP,也不涉及代理ARP,所以所谓的代理ARP相当于网关是有道理的。在配置了网关的设备上是不会出现代理ARP的问题********************************

  那代理ARP到底有什么用呢?

  下面这个图也许比较能说明问题

  看到了吧,注意主机上的子网位数的配置,似乎只有在这种“怪异”的场合才会用到代理arp,AC通信,A以为C在自己的子网内,直接发arp,路由e0接到这个arp请求,然后发现请求的ip地址在自己直连的网段中(在路由表中能找到),这样,就用e0口响应了这个arp请求,完成了代理ARP

  实例配置

  代理ARP (proxy ARP),又叫杂错ARP(promiscuous ARP),它是一种IP网络地址复用技术。在企业网中有些用户会用到此技术。

  代理ARP的原理如图1:

  主网络

  。

  运行ARP

  隐藏网络

  。

  隐藏主机

  图中的主网络和隐藏网络共享一个网络地址,也就是说主网络和隐藏网络在一个地址段上。代理ARP要求在主网络采用ARP协议进行IP地址à物理地址映射,当主网络上各台主机调用ARP解析隐藏网络上主机的物理地址时,网关G代替主机响应,给出的物理地址是G本身的物理地址,由G来应答。而网关G要求对隐藏网络的各主机了如指掌,这样所有进入隐藏网络的数据报文都先送到网关G,网关G在将报文送往应该到达的主机,同样网关G也掌握主网络上的主机,以便对外出的数据进行合适的操作。

  代理ARP技术涉及到IP 地址和物理地址两个方面,一方面代理ARP要用IP寻径,因为它要判断对那些ARP请求作出响应;另一方面代理ARP又要在网关G建立一张IP-物理地址映射表,它是直接参与物理传输的。说它是一种网络地址复用技术,是因为在代理ARP技术中,一个物理地址对应于若干个IP地址,二者不是一一对应的,这在协议上来说是不合法的 ,因为这样会引起安全问题,如果某计算机声称自己是另外一台计算机,就是对不属于自己的ARP请求回答自己的物理地址,然后非法接受分组,为了避免这种不安全的因素,有些ARP实现引入了专门的应付机制,一旦发现两个IP地址映射到同一物理地址,立即发出警告,提醒管理员采取措施。在代理ARP技术中,它不允许产生警告,否则警告报文太多,引起不必要的麻烦。在代理ARP技术中一个重要的概念是“信用”(trust),它的基本思想就是:所有参与ARP的机器要互相协作,不能有欺骗行为,因此所有ARP响应都是合法的。

  这种技术广泛应用在路由器上,在中心局域网路由器的局域网端口设置代理ARP,一些拨号用户就可以使用中心局域网网段来和中心通信,如果路由器还支持动态IP地址池,那么整个网络配置就相当简单了。上海博达数据通信有限公司生产的BDCOM3000系列路由器就支持这种用法,典型的应用如下:

  在这个网络中,路由器作为拨号访问服务器使用,主要的配置工作集中到中心路由器BDC0M3161上面,在E0端口使用代理ARP技术,路由器上配置动态IP地址池,这样远程拨号计算机只需要配置拨号网络中的电话号码就能和中心通信了。BDCOM3161相当于 cisco的2511,具有16个异步端口,还有3个同步端口,每个端口最高速率(同步)都是2M,这3个端口也支持异步(根据需要在路由器端口配置同步/异步)。如果全用成异步,可以提供19个异步口。在青海省某银行就有这种用法。路由器配置如下:

  nodename BDCOM3161 设置路由器名字

  ippool add remoteip 192.168.1.100 16 设置IP地址池,名字为remoteip 从 192.168.1.100 开始分配,共有16个地址可供分配

  e0 进入以太网端口

  arpproxy-arp enable 将ARP代理打开

  ip add 192.168.1.254 255.255.255.0 设置以太网IP地址

  quit 退出E0端口

  a0 进入A0端口

  encapsulate ppp 将A0端口封装成PPP协议

  ip add 192.168.1.254 255.255.255.0 设置IP地址 (此IP地址和E0端口地址相同)

  line dial 将此端口改成拨号线

  idletime 300 设置挂机时间(当300秒没有 业务流量时路由器将MODEM挂断)

  ppp auth pap 在此端口进行PAP认证

  给远程计算机分配地址

  quit 退出A0端口

  a1

  encapsulate ppp

  ip add 192.168.1.254 255.255.255.0

  line dial

  idletime 300

  ppp auth pap

  ppp ipcp pool remoteip 指定此端口使用地址池remoteip 给远程计算机分配地址

  quit

  a2

  encapsulate ppp

  ip add 192.168.1.254 255.255.255.0

  line dial

  idletime 300

  ppp auth pap

  ppp ipcp pool remoteip

  quit

  a3

  encapsulate ppp

  ip add 192.168.1.254 255.255.255.0

  line dial

  idletime 300

  ppp auth pap

  ppp ipcp pool remoteip

  quit

  ……

  a15

  encapsulate ppp

  ip add 192.168.1.254 255.255.255.0

  line dial

  idletime 300

  ppp auth pap

  ppp ipcp pool remoteip

  quit

  user add bdcom abcd 为PAP认证加用户帐号(bdcom)和口令(abcd)

  user add bdcom1 dcba 同上此帐号可以根据需要添加多个

  icmp redirect disable 将internet控制报文协议的重定向信息禁止 远程拨号计算机只需配置拨号网络的电话号码,从管理员处得到帐号和密码,IP地址由路由器自动分配即可。

  实例配置:

  如图,交换机连接两台PC(A和B),最初的时候他们都在一个vlan1内,分别配置IP地址 172.16.1.2/16和172.16.2.2/16 ,均未配置网关,此时可以Ping同对方。

  将A加入vlan1 ,vlanif配IP:172.16.1.1/24

  将B加入vlan2 ,vlanif配IP:172.16.2.1/24

  此时ApingB是ping不通的。

  原因猜想:没有配置网关也没有配置代理ARP,所以ping不通

  当我配置上两个端口的代理ARP,此时发现还是Ping不同。

  此时查看了A的ARP表,发现表中记录172.16.2.2的MAC地址是B的地址。

  此时A发出去的包中封装的MAC地址是B的,当vlanif收到该帧时,会丢弃该报文

  将A的ARP表清空(arp –d),此时再pingB,发现可以Ping通了,A中记录的关于172.16.2.2的MAC地址已经是vlanif1 的MAC了。

  本词条内容贡献者为:

  李嘉骞 - 博士 - 同济大学

责任编辑:科普云

上一篇:针脚

下一篇:LED电源

科普中国APP 科普中国微信 科普中国微博
科普中国-科学百科
是中国科协为深入推进科普信息化建设而塑造的全新品牌,旨在以科普内容建设为重点,充分依托现有的传播渠道和平台,使科普信息化建设与传统科普深度融合,以公众关注度作为项目精准评估的标准,提升国家科普公共服务水平。

猜你喜欢