公司网关需要ARP绑定,而LEDE默认的arp命令不能修改ARP表,使用ip neigh修改即可。
ARP表
ARP表负责ip地址到MAC地址的映射,如果在arp表中找不到对应mac地址,就会无法到达该ip。
如果有坏人进行arp攻击,伪造网关ip地址对MAC地址的映射,那么你的网络流量会被发往该伪造的网关,进行不可描述的隐私窃取。
公司上网需要每台电脑绑定网关的ARP项目,避免有人伪造网关。
LEDE修改ARP表
默认的arp命令实际上只能打印出arp表,无法修改。这里使用iproute2或者ip-full(新版)修改
opkg update
opkg install iproute2 # LEDE 17.01
opkg install ip-full # OpenWrt 18.06
使用neigh可以打印出当前的ARP表
root@LEDE:~# ip neigh
192.168.0.6 dev eth0.2 lladdr 00:11:22:33:5a:bc REACHABLE
192.168.9.207 dev br-lan FAILED
192.168.9.184 dev br-lan lladdr 00:11:22:33:d1:5c REACHABLE
192.168.0.250 dev eth0.2 lladdr 00:11:22:33:dc:bc STALE
使用add/change可以增加/修改一条项目,添加permanent标志可以修改为静态的ARP条目,直到LEDE重启(否则无法删除)。
ip neigh add 192.168.200.1 lladdr 00:22:44:66:88:aa nud permanent dev eth0.2
ip neigh change 192.168.200.1 lladdr 00:22:44:66:88:bb nud permanent dev eth0.2
若使用了permanent标志,则在执行该命令,显示结果中的Flag一列0x6,代表永久条目。
root@LEDE:~# cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.9.207 0x1 0x0 b8:ca:3a:a9:61:d7 * br-lan
192.168.9.184 0x1 0x2 30:85:a9:21:d1:5c * br-lan
192.168.200.1 0x1 0x6 00:22:44:66:88:bb * eth0.2
当192.168.200.1项目对应的nterface(eth0.2)重新连接时候,该ARP条目会失效,显示FAIL,但是也无法删除。
root@LEDE:~# ip neigh
192.168.0.6 dev eth0.2 lladdr 00:11:22:33:5a:bc REACHABLE
192.168.9.207 dev br-lan FAILED
192.168.200.1 dev eth0.2 FAILED
192.168.9.184 dev br-lan lladdr 00:11:22:33:d1:5c REACHABLE
192.168.0.250 dev eth0.2 lladdr 00:11:22:33:dc:bc STALE
这时候使用ip neigh change即可强制修改该项目。
支持热插拔
接口被断开和重连时候,ARP表失效,可以写入到hotplug脚本中
vi /etc/hotplug.d/iface/99-arpbind
# 添加内容
#! /bin/sh
[ "$ACTION" = ifup ] || exit 0
ITEMS="
00:22:44:66:88:aa;192.168.200.1;eth0.2 \
00:11:22:33:dc:bc;192.168.0.250;eth0.2 \
"
for item in $ITEMS; do
mac_addr=`echo $item | awk -F ';' '{print $1}'`
ip_addr=`echo $item | awk -F ';' '{print $2}'`
intf=`echo $item | awk -F ';' '{print $3}'`
# echo "$mac_addr $ip_addr $intf"
ip neigh add $ip_addr lladdr $mac_addr nud permanent dev $intf || ip neigh change $ip_addr lladdr $mac_addr nud permanent dev $intf
done
让其可执行
chmod a+x /etc/hotplug.d/iface/99-arpbind
这样以后往这个脚本的ITEMS添加类似于下行的内容即可实现热插拔添加静态ARP条目
00:22:44:66:88:aa;192.168.200.1;eth0.2 \
其它方法
使用busybox中arp命令,需要重新编译Busybox,因为太麻烦,就没有尝试了。但是还是写一下
在LEDE源码make menuconfig中,定位到
Base System –> busybox –> Network Utilities -> 选中arp
编译busybox并安装。
make package/busybox/compile V=99
find bin | grep busybox
使用Linux平台喜闻乐见的arp命令修改
arp -s 192.168.200.1 00:22:44:66:88:bb
arp -i eth0.2 -s 192.168.200.1 00:22:44:66:88:bb
效果与ip neigh修改一致。
参考链接: OpenWRT 添加静态ARP (ARP绑定)