Closed Mosney closed 1 year ago
不影响你劫持
不影响你劫持
我不想要劫持!而不是相反🥲
我是想关掉内置的 dns server,作者是完全忽略这种需求
我是想关掉内置的 dns server,作者是完全忽略这种需求
做网关代理就不应该关掉DNS server
我是想关掉内置的 dns server,作者是完全忽略这种需求
做网关代理就不应该关掉DNS server
我也自己搭建有另一套 dns server
我也自己搭建有另一套 dns server
跟这个没关系,DNS必须经过clash一次,否则clash无法正确建立域名和IP的关系,进而导致分流不受domain类型的规则控制
我也自己搭建有另一套 dns server
跟这个没关系,DNS必须经过clash一次,否则clash无法正确建立域名和IP的关系,进而导致分流不受domain类型的规则控制
啊?我这边改lua文件关掉了dns好像也ok?再观察观察
补充重要信息:此种方法相当于无视openclash自带的dns,oc的某些功能无法实现,域名相关的所有:域名分流、监控面板不显示域名等,因为oc只能拿到解析后的IP。
少了域名分流貌似失去了使用oc的必要性, 有关闭oc_dns需求的用户毕竟是极少数,作者大大不给做也无可厚非。
我的openwrt做旁路由,家人们无科学需求,有去广告需求 主路由华硕梅林,无法指定带端口的DNS地址,所以需要53端口
这里直接用mosdns v5的去广告功能,不用adhome是因为无可视化统计需求,自定义mosdns的去广告规则效果一样,而且多一个插件多一个环节也多一份开销
openwrt_23.05.2 内核_5.15.138 防火墙_Firewall4(nftables) DNS_Dnsmasq关闭(端口0) DNS_mosdns:53
fake-ip/tun/dns-劫持停用/dns全部指向127.0.0.1:53(mosdns)/流量控制-绕过中国大陆IP/ipv6-关闭
连接openwrt的ssh执行命令
nft list ruleset|grep -n -C 3 "OpenClash DNS Hijack"
nft --handle --numeric list chain inet fw4 dstnat
2383- chain dstnat {
2384- type nat hook prerouting priority dstnat; policy accept;
2385: udp dport 53 counter packets 40 bytes 2565 redirect to :7874 comment "OpenClash DNS Hijack"
2386: tcp dport 53 counter packets 0 bytes 0 redirect to :7874 comment "OpenClash DNS Hijack"
发现nftables的inet fw4表的dstnat表链下有两条规则转发tcpudp53到oc_dns默认的7874端口(占用了53端口)
结合环境情况搜索源码中的相应位置,对应oc设置
[ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "1" ] && [ "$enable_redirect_dns" != "2" ]
关键词 "OpenClash DNS Hijack" "dstnat" "redirect" "53"
注释掉2行代码: https://github.com/vernesong/OpenClash/blob/605973b4f67640fa0fe930b2f2a32f63e23944ff/luci-app-openclash/root/etc/init.d/openclash#L1600 https://github.com/vernesong/OpenClash/blob/605973b4f67640fa0fe930b2f2a32f63e23944ff/luci-app-openclash/root/etc/init.d/openclash#L1601
注意我的环境防火墙是Firewall4和OC设置,其他情况则寻找其他相应的代码注释
注释 /etc/init.d/openclash 的1600和1601行
# nft insert rule inet fw4 dstnat position 0 tcp dport 53 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\"
# nft insert rule inet fw4 dstnat position 0 udp dport 53 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\"
ssh连接root用户执行:
cat << 'EOF' > /root/run_del_nft_rules.sh
#!/bin/bash
while true
do
handle_tcp=$(nft --handle --numeric list chain inet fw4 dstnat | grep -oE 'tcp dport 53 counter packets [0-9]+ bytes [0-9]+ redirect to :7874 comment "OpenClash DNS Hijack" # handle [0-9]+' | grep -oE '[0-9]+$')
handle_udp=$(nft --handle --numeric list chain inet fw4 dstnat | grep -oE 'udp dport 53 counter packets [0-9]+ bytes [0-9]+ redirect to :7874 comment "OpenClash DNS Hijack" # handle [0-9]+' | grep -oE '[0-9]+$')
if [ -n "$handle_tcp" ]; then nft delete rule inet fw4 dstnat handle "$handle_tcp"; fi;
if [ -n "$handle_udp" ]; then nft delete rule inet fw4 dstnat handle "$handle_udp"; fi;
sleep 30;
done
EOF
grep -q "/root/run_del_nft_rules.sh" /etc/rc.local || sed -i 's/^exit 0/nohup bash \/root\/run_del_nft_rules.sh >\/dev\/null 2>\&1 \&\nexit 0/g' /etc/rc.local
解释:写一个脚本删除53端口劫持,脚本大概意思是获取tcpudp53端口的规则handle号,然后用nft delete删除
写入到开机每30秒执行
注意! 注意! 注意!openclash在fake-ip/tun模式下设置了dns劫持53端口也将无效,是否会引起其他问题未可知
还原命令:
rm -f /root/run_del_nft_rules.sh
sed -i '/\/root\/run_del_nft_rules.sh/d' /etc/rc.local
end
终于知道怎么关闭这 sb hijack 了,直接留空就行
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
dns-hijack:
Verify Steps
OpenClash Version
v0.45.129-beta
Bug on Environment
Official OpenWrt
Bug on Platform
Linux-amd64(x86-64)
To Reproduce
N/A
Describe the Bug
我在局域网内部署了另外一套DNS系统,因此不需要DNS劫持功能。所以我在luci内的
插件设置
DNS设置
中将本地DNS劫持设置为停用
,但openclash修改后用于启动的配置文件内还是有一条dns-hijack配置:原始配置文件中tun部分的配置如下:
auto-route
与auto-detect-interface
这二者是必须设置为false吗?因为我在覆写设置
中同样没找到可以配置,就顺便问一下ref #3318 中说明了UDP53通过firewall劫持,tun中的这条
tcp://any:53
我认为是开发者为了劫持TCP DNS而设置的,但似乎是忘记了根据luci内的设置去启用/关闭它OpenClash Log
N/A
OpenClash Config
No response
Expected Behavior
可以配置为不进行任何DNS劫持。 或将
dns-hijack:
部分在luci中勾选后展示文本框供自定义,就像目前DNS设置
下Fake-IP-Filter
Nameserver-Policy
Hosts
这样的形式Screenshots
No response