ARP代理
如图,设备2中配置ip forward实现设备1和设备3可以互相访问,但是设备1和设备3需分别配置路由:
设备1:
192.168.1.0/24 gw 192.168.1.20
设备3:
192.168.1.0/24 gw 192.168.1.30
但有时候并不方便配置路由,比如没有对应权限,此时设备1在访问192.168.1.40时会在eth0上通过arp寻找192.168.1.40的mac,必然失败导致无法访问设备3.
如果能让设备2的eth0在设备1请求192.168.1.40时反馈自己eth0的mac,则会诱导设备1将192.168.1.40的报文发给设备2,此时设备2再通过ip forward将报文转发给设备3,设备3对设备1发送报文同理,则以此便能实现设备1与设备3通信。
关键让设备2对设备1应答不属于自己的ip地址192.168.1.40的mac为自己的eth0,该流程可通过arp代理技术实现。
设备2配置如下:
ifconfig eth0 192.168.1.20/24
ifconfig eth1 192.168.1.30/24
iptables -I FORWARD -j ACCEPT
iptables -t nat -I POSTROUTING -j MASQUERADE
route add -host 192.168.1.10 dev eth0
route add -host 192.168.1.40 dev eth1
sysctl -w net.ipv4.conf.eth0.proxy_arp=1
sysctl -w net.ipv4.conf.eth1.proxy_arp=1
arp -s 192.168.1.10 00:11:22:33:44:30 pub # eth0 mac
arp -s 192.168.1.40 00:11:22:33:44:20 pub # eth1 mac
设备1、设备3仅需配置各自ip即可。
另外如果arp请求某ip的mac被局域网中其他设备的应答,而该设备并非期望设备而是由于arp代理影响了正常获取,譬如以下拓扑情况:
设备1通过arp请求192.168.1.30的mac,实际是00:11:22:33:44:30(设备3:eth0),但由于设备2的代理影响被设备2以00:11:22:33:44:20(设备2:eth0)应答。
通过ip neigh show显示192.168.1.30的mac为00:11:22:33:44:20。
此时可通过以下命令过滤掉该ip与mac的应答组合:
arptables -A INPUT --source-ip 192.168.1.30 --source-mac 00:11:22:33:44:20 -j DROP