vernesong / OpenClash

A Clash Client For OpenWrt
MIT License
15.85k stars 2.95k forks source link

作为旁路由,主路由端口映射后,外网无法访问内网设备 #2383

Closed MeowRay closed 1 year ago

MeowRay commented 2 years ago

ERR_CONNECTION_RESET

之前用的2021年之前的旧版本正常,但是新版就不行了

vernesong commented 2 years ago

开旁路由兼容呢

MeowRay commented 2 years ago

开旁路由兼容呢

试过了,不行

happyeddie commented 2 years ago

+1 openclash 哪哪都好,就是有这个问题


不知道我家的网络拓扑是否和楼主一致,简单描述下:

  1. 主路由是 Unifi USG3P
  2. OpenClash 装在 NAS(GEN8)里的 OpenWrt(官方固件),桥接网络
  3. USG 配置了 DHCP,把网关和 DNS 都指向了 # 2 所指的机器 IP
  4. USG 上配置了 NAS 中各个服务的端口映射,OpenWrt 没有配置任何端口映射

问题现象:

  1. 从内网可以直接通过外网域名(DDNS)访问到家里的设备
  2. 从外网无法访问,CURL 提示 curl: (35) TCP connection reset by peer
  3. 安装 ByPass 科学上网无此问题(安装在 https://supes.top/ 定制的固件,官方固件不确定试了没有)
  4. 关闭(不用卸载)OpenClash,# 2 的问题不存在了,外网可以访问
cs-star commented 2 years ago

我怎么正常

happyeddie commented 2 years ago

我怎么正常

有没有可能是规则的问题? 我的规则是白名单模式,名单内的直连,名单外的所有请求都走代理

MeowRay commented 2 years ago

我怎么正常

有没有可能是规则的问题? 我的规则是白名单模式,名单内的直连,名单外的所有请求都走代理

我先前版本也正常,这个问题反反复复莫名其妙的,如果直连了那旁路由就没用了,还不如网关直接写主路由

happyeddie commented 2 years ago

我怎么正常

有没有可能是规则的问题? 我的规则是白名单模式,名单内的直连,名单外的所有请求都走代理

我先前版本也正常,这个问题反反复复莫名其妙的,如果直连了那旁路由就没用了,还不如网关直接写主路由

我是说,我也遇到了类似的问题,但是 @cs-star 说他正常,所以我想是不是我是用的机场的规则导致的这个问题?

还请 @vernesong 费心,需要提供什么信息对解决这个问题有帮助?

vernesong commented 2 years ago

绕过国内呢

happyeddie commented 2 years ago

绕过国内呢

也不行,只保留一个 MATCH,DIRECT,只要打开了 openclash,外网就没法访问内网端口映射的设备,很诡异,一关了就好

再补充一个场景:

如果在旁路由上配置端口映射到需要访问的设备,那这时候外网就可以访问了,但是内网通过 ddns 映射的域名就不能访问了……

vernesong commented 2 years ago

旁路由确实是这样,因为只要你过了clash就会nat,只能绕过去

vernesong commented 2 years ago

image 旁路由这样开放一下端口试试

freereaper commented 2 years ago

有同样的问题,nas需要科学,所以设置旁路由的网关,求方案。

vernesong commented 2 years ago

第一种:

iptables -t nat -A openclash -m set --match-set localnetwork src -m conntrack --ctstate ESTABLISHED -j RETURN

第二种: image

看看哪个管用吧

freereaper commented 2 years ago

不太行,关掉openclash就好了。

freereaper commented 2 years ago

求助,求大佬解决方案:

我目前的的情况是:

pve+ikuai(主路由 dhcp)+ openwrt(旁路由,网关指向主路由,openclash 科学):

需要科学的nas,把网关指向旁路由,这种情况下,内网访问没问题,但是使用域名外部访问就连接不上,一直提示reset by peer。

关闭openclash,外网就可以正常访问nas设备。

freereaper commented 2 years ago

还请 @vernesong 费心,需要提供什么信息对解决这个问题有帮助?我看恩山论坛上的帖子,有这个问题的人群不在少数,都是反映开了openclash就无法外网访问内部nas。

freereaper commented 2 years ago

Referenc 你先看清楚问题吧。

DZ65367709 commented 2 years ago

…经过反复测试, 把nas 网关设置成旁路由,远程访问NAS 仍然是歇菜… 目前实验看来, 1.自定义规则添加远程访问的域名不能解决

  1. iptables -t nat -A openclash -m set --match-set localnetwork src -m conntrack --ctstate ESTABLISHED -j RETURN 不能解决 唯一能解决的就是关闭openclash
zh15933 commented 2 years ago

我也遇到过这个问题,主路由是爱快,旁路由是op,爱快转发op的端口不能用, 更换一下运行模式就行了 image image

xianren78 commented 2 years ago

Screenshot_2022-05-28-22-19-07-32_40deb401b9ffe8e1df2f1cc5ba480b12 我用通讯规则解决过旁路由本身的问题,就是这个udp端口映射后外部访问不了,不知道有没有借鉴意义。

MeowRay commented 2 years ago

我也遇到过这个问题,主路由是爱快,旁路由是op,爱快转发op的端口不能用, 更换一下运行模式就行了 image image

测试无效,但我在旧版可以访问时也是这个配置,应该与这个有关联

vernesong commented 2 years ago

旁路由你再转发一次就行了,插件会自动去绕过端口的流量

ChaojuWang commented 2 years ago

在nat表的openclash_post上做匹配,让被转发端口的流量不走openclash的nat, 参考命令(端口映射是外网-》内网9443) iptables -t nat -I openclash_post -p tcp --sport 9443 -j RETURN 配置后iptables nat表规则如下 image

ChaojuWang commented 2 years ago

在nat表的openclash_post上做匹配,让被转发端口的流量不走openclash的nat, 参考命令(端口映射是外网-》内网9443) iptables -t nat -I openclash_post -p tcp --sport 9443 -j RETURN

建议增加选项让我们能够在openclash启动后执行特定脚本用来修改iptables或者可以通过luci界面设置某些端口或者ip不走openclash的nat

ChaojuWang commented 2 years ago

可以暂时通过修改/etc/init.d/openclash中防火墙配置函数使得在每次openclash启动时应用额外的iptables规则, 但是每次更新openclash都要重新修改

vernesong commented 2 years ago

image

XGGY commented 2 years ago

image

我开了旁路由(旁网关)模式后,设置这个绕过核心来源端口都没用,外网还是无法访问进来,而且连ping公网ip都不通。但是不开这个旁路由模式呢,主路由的wifi就无法上网,但是mesh的子路由wifi却没事。真是头都大了

XGGY commented 2 years ago

image

我开了旁路由(旁网关)模式后,设置这个绕过核心来源端口都没用,外网还是无法访问进来,而且连ping公网ip都不通。但是不开这个旁路由模式呢,主路由的wifi就无法上网,但是mesh的子路由wifi却没事。真是头都大了

有人知道吗

runchunzhang commented 1 year ago

我通过全局设置-访问控制-绕过核心的来源端口-加入了ikuai转发的端口目前已经稳定可以ddns了 image image

hutao562 commented 1 year ago

我通过全局设置-访问控制-绕过核心的来源端口-加入了ikuai转发的端口目前已经稳定可以ddns了 image image

感谢,fake-ip模式下也可以正常解析外网地址了

bamboo2002cn commented 1 year ago

我刚刚解决了 其他方案都不行,fak-ip模式在dns设置-高级设置里,第一项,添加自己的域名就可以了

himho commented 1 year ago

image

关闭旁路由兼容模式后设置绕过端口来源,主路由设置端口映射,旁路由无设置 可以正常进行端口转发!不知道兼容模式有什么地方与绕过端口有冲突? 关联#2096 https://github.com/vernesong/OpenClash/issues/2096

yuntian123456 commented 1 year ago

我刚刚解决了 其他方案都不行,fak-ip模式在dns设置-高级设置里,第一项,添加自己的域名就可以了

请问是怎么加的?我也遇到这个问题

hackmgrm commented 1 year ago

我刚刚解决了 其他方案都不行,fak-ip模式在dns设置-高级设置里,第一项,添加自己的域名就可以了

不行啊,来个截图看看撒

DZ65367709 commented 1 year ago

谢谢兄台分享。的确这个方法能够解决。这个问题可以关闭了。在 2022年9月14日,13:18,bamboo2002cn @.***> 写道: 我刚刚解决了 其他方案都不行,在dns设置-高级设置里,第一项,添加自己的域名就可以了

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: @.***>

hackmgrm commented 1 year ago

谢谢兄台分享。的确这个方法能够解决。这个问题可以关闭了。在 2022年9月14日,13:18,bamboo2002cn @.> 写道: 我刚刚解决了 其他方案都不行,在dns设置-高级设置里,第一项,添加自己的域名就可以了 —Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: @.>

奇怪我昨天晚上试了一下还是不行。而通过“绕过核心”放行才可以

liasece commented 1 year ago

经过各种抓包分析后,找到了一个可能的原因,也解决了我的问题。希望对后来者有帮助。

当内网设备暴露端口并由主路由转发端口数据时,内网设备的入口流量是正常的,但是其出口流量会流经旁路由。旁路由会转发该出口流量,这时这个流量的 source ip 会变成旁路由的ip。知道这个原因后,我们只要在旁路由上设置如下 iptables 规则即可:

# 要跳过旁路由针对该服务端口的处理
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A PREROUTING -s 192.168.1.3/32 -p tcp --sport 22 -j RETURN

# SNAT 动作意为修改数据包的源地址。在这里,192.168.1.3 就是内网提供服务的IP。
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 192.168.1.3/32 -p tcp --sport 22 -j SNAT --to-source 192.168.1.3
SilenceEagle commented 1 year ago

我刚刚解决了 其他方案都不行,fak-ip模式在dns设置-高级设置里,第一项,添加自己的域名就可以了

666,真的有效,稳的很!! 经测试,ipv6环境下有时可用,有时不可用纯ipv4环境下一直不可用(外网无法访问内网设备)!:sob::sob::sob::sob::sob::sob:

我的主路由是小米的AX6,旁路由是R2S,之前一直没有把主路由的DNS和网关指向旁路由(fake-ip,tun模式),因为存在以下矛盾点:


将主路由的DNS和网关指向旁路由后:

  1. 如果开启旁路由防火墙中lan口的ip伪装(这东西应该就是nat的翻译),内网的上网设备是可以正常科学上网的,也可以正常访问国内的网站,但就是从外网无法访问内网的服务,比如通过域名访问NAS的管理界面;
  2. 如果关闭旁路由防火墙中lan口的ip伪装,内网的上网设备可以正常科学上网,但不能访问国内的网站,却这时外网设备可以访问内网的服务了,比如通过域名访问NAS的管理界面。

    所以为了内网设备能正常访问国内网站,我就必须开启旁路由防火墙中lan口的ip伪装,但这样就会导致从外网无法访问内网的服务。

今天不死心就又来尝试各路大神的解决方法,发现老哥的解决办法有效

等待片刻,便可实现内网设备可正常上网+外网可访问内网服务

jouleken commented 1 year ago

我在国内的时候,外网访问内网设备一切正常, 但是现在在曼谷旅游,访问不了国内的群晖,只有在”黑白名单“里的”绕过核心的来源端口“添加端口才能正常访问。

991547436 commented 1 year ago

可以试试op先转服务端口,主路由转发op端口,我是这样解决的

zhizheyongfeng commented 11 months ago

经测试,内核只有dev开启fakeip模式,在访问设置里面添加转发的端口就能解决问题,之前尝试添加域名在dns等操作都失败,这次总算成功

xiaoess commented 10 months ago

1694268934749试试我的最简单的一个方法,这里转发点接受

yuyuan1019 commented 8 months ago

1694268934749试试我的最简单的一个方法,这里转发点接受

太稳了 兄弟

liam-pat commented 6 months ago

经过各种抓包分析后,找到了一个可能的原因,也解决了我的问题。希望对后来者有帮助。

当内网设备暴露端口并由主路由转发端口数据时,内网设备的入口流量是正常的,但是其出口流量会流经旁路由。旁路由会转发该出口流量,这时这个流量的 source ip 会变成旁路由的ip。知道这个原因后,我们只要在旁路由上设置如下 iptables 规则即可:

# 要跳过旁路由针对该服务端口的处理
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A PREROUTING -s 192.168.1.3/32 -p tcp --sport 22 -j RETURN

# SNAT 动作意为修改数据包的源地址。在这里,192.168.1.3 就是内网提供服务的IP。
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 192.168.1.3/32 -p tcp --sport 22 -j SNAT --to-source 192.168.1.3

根據理論來說 ,映射到內部機器手,返回的時候因為網關是旁路由,導致多了一層旁路由,source ip 變了之後就找不到返回的路了 ,一般會顯示 termiante by server 的信息。除了加這個規則還有其他能直接在 openwrt 上修改的嗎?

domonnss commented 1 month ago

成功实现外网访问 ikuai 主路由 istoreos旁路由 open clash 挂在旁路由上 ipv4环境 ikuai做了端口映射 image openclash开启fake ip模式,服务>>openclash>>插件设置>>黑白名单 >>绕过核心的来源端口添加内网端口 image