这个抽象bug已经困扰我一年了,自从去年5月开始用BE6500(就用来做AP啥也没装),每隔一段时间(短则几天,长则一两周)Wi-Fi设备就会出现无法互联的情况,具体表现为无法ping,无法进行tcp连接,就像开了客户端隔离一样
昨天又出现了,实在是受不了时不时给他重启一下这种操作了,花了45分钟研究了一下:

  1. 首先,我需要访问我一台安卓手机上的工作咩闹钟服务,使用iPhone可以访问,使用iPad不能访问,使用电脑不能访问,但是使用有线连接使用主路由可以访问,但是把iPhone的wifi关掉再开,访问不了了
  2. 在主路由抓包,发现收到了电脑ping时发送的who-has arp包,但是没收到那个安卓机发送的reply包,但是如果在主路由上ping,来回的arp包都有,arp表正常
  3. 在AP上抓包,发现也能收到电脑发送的who-has arp包,但是也收不到reply包,arp表有问题,只有v6地址,没有v4,说明是AP有问题
  4. 让电脑和手机都连接wpa2的2.4g wifi,排除了wifi7的mlo问题,依然不能ping
  5. wifi和有线的交换是要走CPU的,wifi和wifi或许有硬件加速呢?关闭BE6500d的硬件加速,还是不行
  6. 那既然是arp包收不到,会不会被过滤了呢?关掉AP的arp filter,成功了

那么问题很明显了,这arp过滤器有bug,他把不应该过滤的过滤掉了,毕竟他是AP模式,扫不到v4的arp表好像也正常
解决方案就是开机运行这四条命令,把filter关了

echo 0 > /proc/sys/net/ipv4/conf/all/arp_filter
echo 0 > /proc/sys/net/ipv4/conf/default/arp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter

先直接运行一下,让他实时生效,然后

vi /etc/rc.local

按 i 进入编辑模式,把这4行加到最后的 exit 0 的前面,按esc键退出编辑模式,输入 :wq 然后按回车保存退出