我正在尝试找到一种方法将智能家居设备连接到我的本地网络,但拒绝它们访问互联网。
我没有设置绑定到 IP 地址的单独规则,而是尝试在 DD-WRT 路由器上创建一个虚拟 WiFi,该路由器可以访问本地网络,但会丢弃互联网绑定的数据包。
默认情况下,任何新的虚拟 WiFi 都会与桥接接口的主池混合在一起。
这并不是一个完全不常见的问题,标准方法似乎是将虚拟接口移动到自己的网桥中,并使用不同的子网和一整套iptables
规则。例如dd-wrt:阻止VAP访问互联网
我们当然可以做得更好。
我希望能够添加一条ebtables
规则来获得我想要的效果。像这样的非法规则:
ebtables -t broute -I BROUTING -i wl0.1 -o $(get_wanface) -j REJECT
-o
并且REJECT
在这种情况下无效,所以我能得到的最接近的是:
ebtables -t broute -I BROUTING -i wl0.1 -p IPv4 --ip-destination ! 192.168.1.0/24 -j DROP
这里的设计旨在挂钩 broute 表(在全局链的早期)并将数据包从桥接路由器中删除。它的目标数据包是任何进入虚拟 WiFi 并打算发送到本地子网以外的地方的数据包。
这种作品。也许是我第一次进行本地/广域网测试,但之后我的诊断应用程序挂起,网络感觉非常不健康。
我认为这是因为 ebtables 无法对 IP 做任何花哨的事情,所以 REJECT 的概念在这里并不适用。这是一个问题,因为 DROP 会让电话摆脱困境,而我无法处理 DROP 数据包的去向(我什至不知道它们去哪里/如何拦截它们/如何拒绝它们等)
这种ebtables
方法有效还是注定失败?
答案1
总而言之:
ebtables -F INPUT
ebtables -A INPUT -i wl0.1 -p IPv4 --ip-destination 192.168.1.1/24 -j ACCEPT
ebtables -A INPUT -i wl0.1 -p IPv4 --ip-destination 255.255.255.255 -j ACCEPT
ebtables -A INPUT -i wl0.1 -p IPv4 -j DROP
ebtables -A INPUT -i wl0.1 -p IPv6 -j DROP
ebtables -L --Lc
- (可选)刷新(清除)任何预先存在的
ebtables
规则 - 接受通过受限 WiFi 发送到本地子网的任何内容
- 接受通过受限 WiFi 发送到广播地址的任何内容
- 丢弃任何其他来自受限制 WiFi 的内容(例如 IPV4)
- 丢弃任何来自受限制 WiFi 的其他内容,例如 IPV6
- (可选)显示刚刚添加的规则+计数器
回想一下 - 本练习的目的是创建以下配置:
br0 -
- eth0 Wired ethernet | 192.168.1.0/24 | INTERNET
- wl1 5 GHz WiFi | 192.168.1.0/24 | INTERNET
- wl0 2.4 GHz WiFi | 192.168.1.0/24 | INTERNET
- wl0.1 2.4 GHz WiFi | 192.168.1.0/24 | NO INTERNET
(注意 - 同一网桥内的所有接口,全部位于同一子网中,大多数有互联网,一个没有)
当我可以删除其他所有内容时,为什么要在 DROP 规则上指定协议?我发现与协议无关......
ebtables -A INPUT -i wl0.1 -j DROP
...适用于已建立的 WiFi 连接。但是,对于新的 WiFi 连接,他们无法进行身份验证。我认为这是因为规则拦截了 WPA2-PSK 所需的非 IP 流量。
希望这对某人有帮助。我的用例是将 Kasa 智能家居设备加入我的网络,并让我的本地智能家居系统可以访问它们,但阻止它们打电话回家或自我更新。 (自我更新部分是主要动机,因为我听到有关 TPLINK 关闭开放协议的故事)。