[疑问/探讨] 关于透明代理劫持 LAN 侧 DHCP/NTP 单播请求的历史漏洞与当前底层实现机制 #774
Unanswered
SlippinDylan
asked this question in
Q&A
Replies: 1 comment 1 reply
-
|
问题4里说的规则是存在的,但是是在nikki表里。 因为问题4里说的规则存在,理论上问题1的保留地址的绕过规则并不需要,所以问题2的答案应该是否,但我测试过发现如果没有保留地址的绕过规则会导致米家设备断网,当时没有深究,就保留了该规则。 问题3中说的旧版本,我使用时没有遇到续租失败的情况,我有空了看看中间的变更,看是不是哪一次“意外”修复了。 |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
你好,感谢作者提供这么优秀的 Nikki 插件!
我是一名软路由老玩家,最近在排查局域网设备的网络稳定性问题时,深入跟踪了 Nikki 生成的 nftables 规则。现在我有一个关于 “透明代理劫持局域网单播基础服务 (DHCP Renew / NTP)” 的技术疑问,想和作者探讨一下目前的底层实现机制。
1. 历史背景与痛点
在几个月前我使用的旧版本(约 v1.24.4 左右,ImmortalWrt 24.10 环境)中,我遇到了一个极其经典的透明代理幽灵 Bug:
局域网内的手机或 Mac 刚连上 Wi-Fi 时正常(因为 DHCP Discover 是广播包,透明代理不劫持),但使用几个小时后,租期过半触发 DHCP 单播续租(UDP dst port 67) 时,续租包被代理核心劫持进黑洞。最终导致租约到期,设备强制掉线并回退到
169.254.x.x的 APIPA 地址。同样的,局域网设备向路由器(
10.10.0.1)发起的 NTP 单播同步请求(UDP 123)也会 timeout。当时我只能写一个脚本,在
router_tun/router_redirect链执行前,硬插入udp dport 67/68/123 counter return的 bypass 规则来解决。2. 当前版本的观察
今天我重新编译了最新版的 ImmortalWrt 并升级了最新版 Nikki。在没有执行任何自编修复脚本的情况下,我发现:
sntp 10.10.0.1能够秒级同步时间。我在终端抓取了
nft list chain inet nikki router_tun,发现新版对路由器自身发出的包使用了非常优雅的skuid 123和cgroupv2 "services/dnsmasq"来做 bypass。但这仅作用于 OUTPUT 链。3. 探讨的核心疑问
对于从 LAN 侧发起,流向 Router 本身(Inbound -> PREROUTING)的单播包,当前版本并没有看到显式排除 67/68/123 端口的规则。
请问作者:
reserved_ip(包含了局域网网段)从而在进入劫持链前直接return了吗?reserved_ip集合(例如删除了10.0.0.0/8),是否会导致 DHCP 单播续租被劫持的问题死灰复燃?fw4层面利用fib daddr type local等更底层的路由判定来免疫 Router 本机流量?期待作者的技术解惑,这对我们这些在使用自定义网段和自定义白名单策略的用户来说非常重要。再次感谢维护!
Beta Was this translation helpful? Give feedback.
All reactions