关于 auto-redirect: true 的问题: 导致来自 inet4_local_address_set 的 53 DNS 请求 最终被 drop , 导致超时.
#2491
Delta-in-hub
started this conversation in
General
Replies: 0 comments
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.
-
使用的版本是:
metacubex/mihomo:latest 89fffd5b2fde, 使用docker nework=host部署.配置是:
遇到的问题是: 局域网中的其他机器访问部署mihomo的机器监听的DNS 53 接口的时候, 会导致查询超时.
在关闭
auto-redirect后, 一切恢复正常.以下是解释:
0) 先定住这个包长什么样
从 LAN 另一台机器发出来的包估计是:
SRC=192.168.28.XDST=192.168.28.158PROTO=UDP(nslookup 默认 UDP,必要时会回退 TCP)DPORT=53它从树莓派的
wlan0进入。1) 为什么你看到这条 DNAT 计数在涨
你确认命中的规则是:
而集合
inet4_local_address_set包含192.168.28.0/24,所以 LAN 上任何 192.168.28.X 的 DNS 请求都会命中这条规则。命中后,内核把这个包的目的地址改成:
DST=198.18.0.2DPORT=53(端口不变)2) 关键拐点:DNAT 之后,包不再“发给本机”,而变成“需要转发”
DNAT 前
192.168.28.158是本机地址→ 正常应该走 INPUT(交给本机 53 端口的 DNS 服务)
DNAT 后
198.18.0.2198.18.0.0/30 dev Meta(你ip route里有这条)198.18.0.2不是本机wlan0的地址,而是在Meta这条虚拟链路上(通常是 tun/tap/虚拟网卡对端)。→ 内核会把它判定为:需要从 wlan0 转发到 Meta
→ 于是走 FORWARD 链
而你当前
ip filter FORWARD是policy drop,并且只有 Docker 相关的跳转链,并没有放行wlan0 -> Meta的 53,所以包被丢掉,客户端就超时。nft表:
重点
结论
别用
auto-redirect: true就行了, 不用万事大吉.说明一下是否用auto-redirect的区别:
-通过路由表到TUN接口
-通过 nftables PREROUTING重定向到mihomo 的一个随机高位端口
个人觉得没什么区别.
Beta Was this translation helpful? Give feedback.
All reactions