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

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

Closed
4 tasks done
Mosney opened this issue Jun 22, 2022 · 26 comments
Closed
4 tasks done
Labels
enhancement New feature or request Stale

Comments

@Mosney
Copy link

Mosney commented Jun 22, 2022

Verify Steps

  • Tracker 我已经在 Issue Tracker 中找过我要提出的问题
  • Need 当前 OpenClash 并不包含该功能特性或者还不完善
  • Framework 这是 OpenClash 应包含的特性, 并非 Clash 特性
  • 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 Mosney added the enhancement New feature or request label Jun 22, 2022
@elonj
Copy link

elonj commented Jun 24, 2022

期待

@jayling1111
Copy link

同求

@Mosney
Copy link
Author

Mosney commented Jul 8, 2022

一个暂时可行的简易替代方案:
自行在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会覆盖修改后的启动脚本,因此请不要升级或升级后重新修改。

@kid101x
Copy link

kid101x commented Aug 30, 2022

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

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

@kid101x
Copy link

kid101x commented Aug 30, 2022

一个暂时可行的简易替代方案: 自行在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
}

@zhu-xiaoming
Copy link

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

@Charles94jp
Copy link

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

@bradfordzhang
Copy link

bradfordzhang commented Sep 26, 2022

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

@prunes81485216
Copy link

我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
Copy link

一个暂时可行的简易替代方案: 自行在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
}

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

@gitcook
Copy link

gitcook commented Nov 21, 2022

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

@caopeng19911002
Copy link

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

@caopeng19911002
Copy link

redir host模式老是dns污染

@github-actions
Copy link
Contributor

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

@elonj
Copy link

elonj commented Jan 29, 2023

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

@AoEiuV020
Copy link

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

@johnzong-github
Copy link

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

@vernesong
Copy link
Owner

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

@johnzong-github
Copy link

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

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

@byroning
Copy link

byroning commented Apr 3, 2023

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

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

@gemnioo
Copy link

gemnioo commented Aug 11, 2023

内核版本 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 会占用性能开销

updated 2024-11-25:

Quote: OpenClash的“实验性:绕过中国大陆IP“功能是通过Dnsmasq进行实现,旨在将国内IP通过防火墙转发规则,国内IPv4和IPv6的流量不经过Clash(Mihomo)内核处理,增强直连性能,降低OpenWRT软路由的资源占用

想要实现“黑白名单局域网IP,请使用防火墙转发(默认Dnsmasq转发 或者自己手搓 iptable nftable 规则

@duetg
Copy link

duetg commented Sep 19, 2023

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

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

@sysalong
Copy link

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

@duetg
Copy link

duetg commented Dec 28, 2023

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

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

@systemadmin2024
Copy link

同求,我开了qb,还有plex,jellyfin,emby等等很多应用都不需要经过代理。

@Nothend
Copy link

Nothend commented Nov 25, 2024

关注一下,我也需要这个功能。qb特意用了macvlan功能,添加语句“- SRC-IP-CIDR,X.X.X.X/32,DIRECT” ,pt确实不走代理了。但是日志有大量的警告信息、连接中也有这个ip的信息。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request Stale
Projects
None yet
Development

No branches or pull requests