代理ARP是ARP协议的一个变种。 对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。代理ARP就是将一个
主机“作为”另一个主机对收到的ARP请求进行应答。它能使得在不影响
路由表的情况下添加一个新的Router,使得
子网对该
主机来说变得更透明化。同时也会带来巨大的风险,除了
ARP欺骗,和某个
网段内的ARP增加,最重要的就是无法对
网络拓扑进行网络概括。代理ARP的使用一般是使用在没有配置
默认网关和路由策略的网络上的。
简介
代理ARP是
ARP协议的一个变种。对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。代理ARP就是将一个主机作为对另一个主机ARP进行应答。它能使得在不影响路由表的情况下添加一个新的Router,使得子网对该主机来说变得更透明化。同时也会带来巨大的风险,除了
ARP欺骗,和某个网段内的ARP增加,最重要的就是无法对网络拓扑进行网络概括。代理ARP的使用一般是使用在没有配置默认网关和路由策略的网络上的。
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条目:
Interface: 172.16.10.100 --- 0x2
Internet Address Physical Address Type
172.16.20.100 00-00-0c-94-36-ab dynamic
在接下来的数据通信中,PC1先将数据发送给路由器,由路由器转发给PC2。
优点
最主要的一个优点就是能够在不影响其他router的路由表的情况下在网络上添加一个新的router,这样使得子网的变化对主机是透明的
proxy ARP应该使用在
主机没有配置
默认网关或没有任何路由策略的网络上
负面影响
⒈增加了某一网段上ARP流量
⒉主机需要更大的ARP table来处理IP地址到MAC地址的映射
⒊安全问题,比如ARP欺骗(spoofing)
⒋不会为不使用ARP来解析地址的网络工作
⒌不能够概括和推广网络拓扑
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 (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地址由
路由器自动分配即可。
实例配置:
如图1,交换机连接两台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了。