我有一个在 上运行的接入点(hostapd
)wlan0
。 wlan0
并且eth0
已桥接并eth0
连接到路由器。br0
已配置为 DHCP 并接收路由器上保留的地址。
让带有接入点的盒子被称为接入点盒。
有时,路由器将显示接入点盒具有设备的 MAC 地址,而不是应有的wlan0
MAC地址。eth0
连接到接入点的任何设备都会在路由器的 arp 缓存上显示其各自的 MAC 地址。
路由器具有桥接防火墙规则,强制要求来自接入点盒的 DHCP 保留 IP 地址的所有数据包必须来自 MAC 地址,因此当 MAC 从 变为时eth0
,盒子会失去网络连接。当盒子失去连接时,接入点上的所有关联客户端仍然能够使用互联网。eth0
wlan0
我可以ebtables
在具有的盒子上使用以下命令来绕过路由器的桥接规则wlan0
。
ebtables -t nat -A PREROUTING -i eth0 -s $WLAN_MAC -j dnat --to-destination $LAN_MAC
ebtables -t nat -A POSTROUTING -o eth0 -s $WLAN_MAC -j snat --to-source $LAN_MAC
ebtables -t nat -A PREROUTING -i eth0 --logical-in br0 -s $WLAN_MAC -j dnat --to-destination $LAN_MAC
ebtables -t nat -A POSTROUTING -o eth0 --logical-out br0 -s $WLAN_MAC -j snat --to-source $LAN_MAC
尽管接入点盒从未失去互联网连接,但路由器的 arp 缓存仍然会混淆 MAC 地址。有没有办法防止这种情况发生?
编辑
我笨拙地通过将的 MAC 地址设置wlan0
为与的 MAC地址来解决这个问题eth0
。我不喜欢这个解决方案,我想让它工作而不wlan0
直接更改的 MAC。
答案1
解决了,我不得不使用 arptables 将包含 wlan0 mac 的数据包分解到 eth0 mac。