OpenClash icon indicating copy to clipboard operation
OpenClash copied to clipboard

[Feature] fakeIP模式下访问控制也有“不走代理的局域网设备 IP”

Open Mosney opened this issue 2 years ago • 7 comments

Verify Steps

  • [X] Tracker 我已经在 Issue Tracker 中找过我要提出的问题
  • [X] Need 当前 OpenClash 并不包含该功能特性或者还不完善
  • [X] Framework 这是 OpenClash 应包含的特性, 并非 Clash 特性
  • [X] Meaningful 我提交的不是无意义的 催促更新或修复 请求

Describe the Feature

fakeIP模式下,如果DNS不做处理的话是不应该将某个SrcIP通过iptables跳过clash直接进入公网的 #2505 。但是如果用户有能力自行处理好这些完全不进入clash的Src设备的DNS,在fakeIP模式下添加与redir-host同样的访问控制功能还是非常有意义的。

例如局域网内的游戏机、加速盒等设备就更适合跳过clash直接进入公网,大量UDP数据包经过clash既增加了延迟也造成了无意义的性能浪费,另一方面也能避免ICMP、UDP等流量经过clash处理后导致traceroute、加速器等功能异常。

搜到的几个相关issue #1751 #2357

Describe the Solution

将redir-host访问控制里的局域网设备黑白名单相关iptables代码复用至fakeIP模式下,可以考虑放到默认隐藏的高级设置里(如同DNS高级设置那样)

Describe Alternatives

自行修改启动脚本添加iptables规则,来实现“即使fakeIP模式下也可以让某个局域网IP完全不走clash”的目的。

Additional Context

如果开发者认为没有必要添加此功能的话,还请赐教应该在哪张表哪条链里添加哪些iptables来实现绕过。 目前是fakeIP+TUN模式,不知直接照搬redir-host模式下的是否可行? 如果可行还请复制相关代码行数链接,能力有限不足以分辨,还望海涵😊

Mosney avatar Jun 22 '22 14:06 Mosney

期待

elonj avatar Jun 24 '22 05:06 elonj

同求

jayling1111 avatar Jul 02 '22 18:07 jayling1111

一个暂时可行的简易替代方案: 自行在openclash启动脚本/etc/init.d/openclash中的set_firewall()函数部分的最后手动加入需要执行的iptables,例如本issue的需求在使用TUN模式时就可以通过下述命令实现,其中192.168.1.2/30为跳过进入clash的IP-CIDR,此IP范围内的主机需要为其设置标准DNS以避免clash的fakeIP影响。

iptables -t mangle -I openclash -s 192.168.1.2/30 -j RETURN

如果是普通的增强模式(即通过iptables重定向流量)则应该修改上述命令为NAT表

最后注意,升级openclash会覆盖修改后的启动脚本,因此请不要升级或升级后重新修改。

Mosney avatar Jul 08 '22 12:07 Mosney

这似是个一直存在的小众需求?之前没用TUN所以查到了普通增强模式的iptables https://github.com/vernesong/OpenClash/issues/1219 在此记录下:

iptables -t nat -I openclash -s 192.168.3.230/32 -j RETURN

kid101x avatar Aug 30 '22 10:08 kid101x

一个暂时可行的简易替代方案: 自行在openclash启动脚本/etc/init.d/openclash中的set_firewall()函数部分的最后手动加入需要执行的iptables

是说在同一个{}内,结尾}号之前吗?比如改成这样:

set_firewall(){
……
……
#端口转发
config_load "firewall"
config_foreach firewall_redirect_exclude "redirect"
config_foreach firewall_rule_exclude "rule"
#跳过特定局域网IP:192.168.10.233
#Fake-IP(TUN)模式
iptables -t mangle -I openclash -s 192.168.10.233/32 -j RETURN
#Fake-IP(增强)模式
iptables -t nat -I openclash -s 192.168.10.233/32 -j RETURN
}

kid101x avatar Aug 30 '22 11:08 kid101x

我也有类似的需求,希望在fake-ip模式下,使用“走代理的局域网设备 IP”

zhu-xiaoming avatar Sep 08 '22 16:09 zhu-xiaoming

同求一个IPv6下的“不走代理的局域网设备” 遇到这样的问题:Fake-IP下代理IPv6,访问测速网址得到本机的IPv6地址是br-lan的地址::1,无论用哪个内网设备都一样。且Fake-IP下必须代理IPv6,否则不能访问任何IPv6网站。 而用Redir-Host模式则可不代理IPv6获得本机的真实IPv6地址。

Charles94jp avatar Sep 20 '22 15:09 Charles94jp

有同样的需求 希望能够加入此功能@vernesong

bradfordzhang avatar Sep 26 '22 04:09 bradfordzhang

我open clash 开启的fake IP模式,想要让下级路由(ip是192.168.123.238)绕过clash,在openclash启动脚本/etc/init.d/openclash中的set_firewall()函数部分的最后手动加入以下需要执行的iptables

#跳过特定局域网IP:192.168.123.238

#Fake-IP(TUN)模式 iptables -t mangle -I openclash -s 192.168.123.238/32 -j RETURN

#Fake-IP(增强)模式 iptables -t nat -I openclash -s 192.168.123.238/32 -j RETURN

这样操作正确吗?我发现这么添加以后这个下级路由都没法上网了,请教各位这么设置是不是有什么错误?

prunes81485216 avatar Oct 29 '22 04:10 prunes81485216

一个暂时可行的简易替代方案: 自行在openclash启动脚本/etc/init.d/openclash中的set_firewall()函数部分的最后手动加入需要执行的iptables

是说在同一个{}内,结尾}号之前吗?比如改成这样:

set_firewall(){
……
……
#端口转发
config_load "firewall"
config_foreach firewall_redirect_exclude "redirect"
config_foreach firewall_rule_exclude "rule"
#跳过特定局域网IP:192.168.10.233
#Fake-IP(TUN)模式
iptables -t mangle -I openclash -s 192.168.10.233/32 -j RETURN
#Fake-IP(增强)模式
iptables -t nat -I openclash -s 192.168.10.233/32 -j RETURN
}

兄弟,你的问题解决了吗?

prunes81485216 avatar Oct 29 '22 04:10 prunes81485216

此IP范围内的主机需要为其设置标准DNS以避免clash的fakeIP影响。这句话什么意思,iptables 加了 后指定局域网ip无法上网了

gitcook avatar Nov 21 '22 05:11 gitcook

有个不走wan ip是什么意思,我也想控制局域网ip代理

caopeng19911002 avatar Nov 22 '22 13:11 caopeng19911002

redir host模式老是dns污染

caopeng19911002 avatar Nov 22 '22 13:11 caopeng19911002

This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 5 days

github-actions[bot] avatar Jan 22 '23 08:01 github-actions[bot]

v0.45.83版本, 当*本地 DNS 劫持 选择 “使用防火墙转发”时,fakeIP模式下访问控制有“不走代理的局域网设备 IP” 的选项了。但是,它并没有起作用。依然所有的ip都进了clash。而redir-host模式下,“不走代理的局域网设备 IP” 选项是有作用的。

elonj avatar Jan 29 '23 19:01 elonj

这怎么就自动关闭了,还没解决吧, 上面说的手动改防火墙我搞来搞去总容易断网,而且升级会失效, 现在都只能旁路由使用openclash了,

AoEiuV020 avatar Feb 24 '23 02:02 AoEiuV020

关注一下,我也需要这个功能。

johnzong-github avatar Mar 12 '23 13:03 johnzong-github

升级,改DNS劫持为防火墙就有了

vernesong avatar Mar 13 '23 04:03 vernesong

升级,改DNS劫持为防火墙就有了

多谢。已经升级了。发现有这个模式了。 测试看看有没有问题。

johnzong-github avatar Mar 14 '23 01:03 johnzong-github

我也有类似的需求,希望在fake-ip模式下,使用“走代理的局域网设备 IP”

强烈推荐开发此项功能!局域网指定ip列表走代理,才是最方便管理的。不走代理的数量太多写规则也麻烦许多不好管理。

byroning avatar Apr 03 '23 05:04 byroning

内核版本 v1.17.0 Fake-IP 模式下--插件设置--DNS设置--- 红字 本地DNS劫持 改为使用防火墙转发 在黑白名单里能出现 不走代理的局域网LAN IP/MAC 选项。 红字 本地DNS劫持 “推荐使用 Dnsmasq 转发” 下并没有出现过滤

上游已经弃坑的“Redir-Host模式” 也就是如下config 在Dnsmasq 转发下能过滤“不走代理的局域网LAN IP/MAC” enhanced-mode: fake-ip fake-ip-filter:

  • '+.*'

搜索尝试以下 方案 Fake-IP 模式下 本地DNS劫持 “使用 Dnsmasq 转发” config.yaml 添加 - SRC-IP-CIDR,192.168.2.10/32,DIRECT .2.10为本机地址 观察到 .2.10 开启 Clash for Windows 系统代理/TUN均无法访问国外
节点无法Ping通 怀疑是Fake IP导致的 在 fake-ip-filter: 添加节点域名 系统代理/TUN恢复正常

添加- SRC-IP-CIDR,...../32,DIRECT 规则 流量还是会进入到OpenClash内核 并引起该机器CFW节点异常 不添加 SRC-IP-CIDR 规则 等于走两遍规则 CFW Direct 的进到OpenClash再过一遍规则 总结 SRC-IP-CIDR DIRECT 不适合用来控制 不走代理的局域网设备IP (即使 DIRECT 还是进 OpenClash 会占用性能开销

gemnioo avatar Aug 11 '23 02:08 gemnioo

升级,改DNS劫持为防火墙就有了

可否增加指定DNS劫持的目的地端口?比方在想把DNS劫持到AdGurad Home(比如5353),但又想用黑名单让特定IP不走代理,目前好像没有办法实现。一旦使用了防火墙DNS劫持,OpenClash就把53端口劫持到它自己的监听端口(比如7874)了。

duetg avatar Sep 19 '23 16:09 duetg

哎,,我也遇到了,到现在没有好的方案 现在可以确定的是”Fake-IP 模式“下可以避免DNS泄露,但是没办法指定部分局域网不走clash。。。愁

sysalong avatar Dec 28 '23 08:12 sysalong

哎,,我也遇到了,到现在没有好的方案 现在可以确定的是”Fake-IP 模式“下可以避免DNS泄露,但是没办法指定部分局域网不走clash。。。愁

Fake-IP模式下开启DNS劫持中“使用防火墙转发”就可以使用黑白名单模式指定部分局域网不走openclash

duetg avatar Dec 28 '23 12:12 duetg