Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] 特定情况下,会屏蔽路由器所有外部请求 #864

Open
3 tasks done
jiesou opened this issue Jan 12, 2025 · 2 comments
Open
3 tasks done

[Bug] 特定情况下,会屏蔽路由器所有外部请求 #864

jiesou opened this issue Jan 12, 2025 · 2 comments

Comments

@jiesou
Copy link
Contributor

jiesou commented Jan 12, 2025

Verify steps

  • 我已经在 Issue Tracker 中找过我要提出的问题 I have searched on the issue tracker for a related issue.
  • 我已经使用公测版本测试过,问题依旧存在 I have tested using the test mod, and the issue still exists.
  • 我已经仔细看过 常见问题 并无法自行解决问题

Description

screenshot

如图,启用 DNS 劫持、IPv6 透明代理的情况下,ShellCrash 会在 prerouting_dns 以及 prerouting 链中添加规则,屏蔽所有外部请求。这个设计是不合理的

它会在 prerouting 阶段就拒绝掉所有不是自己网段的请求。而 openwrt 防火墙通信规则改的是 input_wan 链。即使用户 自己在通信规则里放行 特定端口,也会被 shellcrash 在 prerouting 阶段就拦截下来

如果是处于安全考虑,防止 clash 的 dns 被投到公网上的话,那也它应该只拒绝掉 clash 监听的 dns(udp 1053 端口)。而且 openwrt 的防火墙默认就会在 input 链中拒绝掉除用户规则外的所有入站请求,这部分其实不用 ShellCrash 来做(绝大多数系统的防火墙都是这样)

可以在 ShellCrash 运行的情况下,把路由器 22 端口转发到 wan,然后公网连路由器 SSH 来直接复现

观察到以下几段相关代码(iptables 和 nftables,以及局域网黑白名单的模式都有):

nft add rule inet shellcrash "$1"_dns ip saddr != {$HOST_IP} return #屏蔽外部请求

[ "$1" = 'ip6tables' ] && { #屏蔽外部请求

nft add rule inet shellcrash $1 ip saddr {$FL_IP} return

@jiesou jiesou changed the title [Bug] 启用 DNS 劫持的情况下,会屏蔽所有外部请求 [Bug] 特定情况下,会屏蔽路由器所有外部请求 Jan 13, 2025
@jiesou
Copy link
Contributor Author

jiesou commented Jan 13, 2025

现在发现也不一定是和 DNS 劫持有关。
体现在 劫持局域网 + 本地,同时打开 ipv6 透明代理 的情况下会把入站都拦掉
而 只劫持局域网,同时打开 ipv6 透明代理没问题

-6064100695461711097_119

感觉和这里有关

@juewuy
Copy link
Owner

juewuy commented Jan 19, 2025

nftables的处理逻辑似乎和iptables不太一样,我先尝试把那条rejack规则改为return再观察一下

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants