![openwrt 路由器上的 iptables:记录来自同一子网上的客户端到主机的连接](https://linux22.com/image/1453924/openwrt%20%E8%B7%AF%E7%94%B1%E5%99%A8%E4%B8%8A%E7%9A%84%20iptables%EF%BC%9A%E8%AE%B0%E5%BD%95%E6%9D%A5%E8%87%AA%E5%90%8C%E4%B8%80%E5%AD%90%E7%BD%91%E4%B8%8A%E7%9A%84%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%88%B0%E4%B8%BB%E6%9C%BA%E7%9A%84%E8%BF%9E%E6%8E%A5.png)
我正在尝试使用运行 OpenWRT 14.07 Barrier Breaker 的路由器设置自动局域网唤醒设置。我的想法是,路由器监控我想要唤醒的主机的任何连接尝试,如果记录了此类事件,它会发送魔术包来唤醒主机。我一直尝试使用 iptables 将任何此类连接尝试写入日志文件,然后我可以从另一个脚本中检查它。对于 iptables,我得出了以下规则:
iptables -I FORWARD 1 -d 192.168.1.20 -p tcp -j LOG --log-prefix "WAKE_UP_EVENT"
192.168.1.20 是我想要唤醒的主机的固定 IP。然后我可以logread
在 bash 脚本中使用它来监控日志,并在发现时发送魔术包WAKE_UP_EVENT
。无论如何都是这样的。
虽然尝试使用 SSH 从家庭网络之外的客户端(例如互联网)进行连接时,这种方法很有效,但对于与家庭网络内的主机位于同一子网的客户端,这种方法却行不通。如果我理解正确的话,原因是 FORWARD 规则适用于任何“通过”iptables 的数据包,但在这种情况下,数据包会停留在同一个网络内,并且与 iptables 没有联系。
所以有两个问题:
1)我对该行为的理解正确吗?
2)有没有什么方法可以实现我想要做的事情,无论是使用 iptables 还是其他方法?
我已经尝试了 4 个小时来让它工作,但无济于事,也没有找到有用的信息。希望有人能给我一些有用的意见。提前谢谢!
答案1
默认情况下,桥接流量不会到达 iptables。您可以在以下位置启用它/etc/sysctl.conf
:
# disable bridge firewalling by default
net.bridge.bridge-nf-call-arptables=0
net.bridge.bridge-nf-call-ip6tables=0
net.bridge.bridge-nf-call-iptables=1
然后重新加载设置:
sysctl -p