我在 stackoverflow 上发布了此内容,但它与主题无关。
我四处寻找,但找不到问题的答案。我使用 Raspberry Pi 作为 LAN 和两个 WAN 之间的互联网网关。这是我在 iptables 中的 FORWARD 链的示例。
链转发(策略接受 541 个数据包,164K 字节) pkts 字节数 目标 协议 选择加入 退出 源 目标 0 0 wifi.usb 全部 -- * * 0.0.0.0/0 0.0.0.0/0 MAC 00:11:22:33:44:55 0 0 other.dev 全部 -- * * 0.0.0.0/0 0.0.0.0/0 MAC 66:77:88:99:aa:bb 0 0 本地 全部 -- * * 0.0.0.0/0 0.0.0.0/0
这些设备跳转到自己的链进行字节计数并接受。跳转到本地会捕获任何不是来自上述设备的数据包并拒绝 WAN 但允许 LAN。
本地连锁店 (0 篇引用) pkts 字节数 目标 协议 选择加入 退出 源 目标 0 0 接受全部 -- * * 192.168.100.0/24 192.168.100.0/24 67 698 全部拒绝 -- * * 0.0.0.0/0 0.0.0.0/0 拒绝-icmp端口不可达
所有设备的用户链都跳转到“接受”状态。
Chain wifi.usb (1 个引用) pkts 字节数 目标 协议 选择加入 退出 源 目标 0 0 接受全部 -- * * 0.0.0.0/0 0.0.0.0/0
但是,在 FORWARD 中跳转到本地规则后,所有互联网流量都会进入本地链并被拒绝。我如何才能继续使用本地链来捕获未知设备而不捕获已知设备?
编辑:我确实忘记提及的一件事是,当我按源 IP 地址过滤时,它可以按我想要的方式工作,但我更喜欢按 MAC 地址过滤。
答案1
我找到了问题所在。它解决了我遇到的两个问题。
我用它来计算用户使用的字节数,然后将其转发到目的地。问题是使用量没有增加,就像上面的问题一样。
我忘记为每条上传规则添加一条下载规则。添加这些规则后,
277K 330M wifi.usb all -- * * 0.0.0.0/0 192.168.100.3
144K 20M wifi.usb all -- * * 192.168.100.3 0.0.0.0/0 MAC 00:11:22:33:44:55
0 0 Local all -- * * 0.0.0.0/0 0.0.0.0/0
因此,由于无法使用 iptables 指定目标 MAC 地址,因此我仍然必须使用 IP 地址。但修复后,我仍然可以确保 IP 地址与 MAC 地址匹配。
如果有人对此有疑问,我可以尝试进一步解释。