vernesong / OpenClash

A Clash Client For OpenWrt
MIT License
17.44k stars 3.18k forks source link

[Bug] openclash的软路由做旁路由,局域网内的机器设置为网关时,从外部无法ssh连接 #3170

Closed Wrandz closed 1 year ago

Wrandz commented 1 year ago

Verify Steps

OpenClash Version

v0.45.103-beta

Bug on Environment

Official OpenWrt

Bug on Platform

Linux-amd64(x86-64)

To Reproduce

openclash问题 本来通过58.217.27.225:10022可以ssh连接centos,把这个机器的网关设置为openclash所在的istoreos之后,就无法ssh连接了。 内网192.168.50.74:22连接没问题。

Describe the Bug

openclash问题 本来通过58.217.27.225:10022可以ssh连接centos,把这个机器的网关设置为openclash所在的istoreos之后,就无法ssh连接了。 内网192.168.50.74:22连接没问题。

OpenClash Log

OpenClash-2023-4-7-22-3-15.log

OpenClash Config

No response

Expected Behavior

ssh连接正常

Screenshots

No response

vernesong commented 1 year ago

image 绕过22

Wrandz commented 1 year ago

@vernesong 感谢大佬,我这样设置了一下,果真就好了。我想问下,这是否为一种通用操作。比如我一台centos上运行plex,服务端口32400,主路由端口转发32400->32400,我想要在外网58.217.27.225:32400访问,是否应该像这里一样,将32400也设置为绕过核心? 同理,其他服务,只要是希望通过主路由端口转发直接访问的,是否都要设置为绕过核心?

vernesong commented 1 year ago

所有主路由转发到内网的端口都要在这里绕过

vernesong commented 1 year ago

如果是80,443这种常用端口就需要去旁路由防火墙自己添加一个转发,方便插件自己识别绕过指定客户端的指定端口

Wrandz commented 1 year ago

@vernesong 感谢大佬,通过你的指点,我发现虽然端口转发也行,但更简单的办法是,只要在通讯规则里面添加,允许转发到centos(图中192.168.50.245)的22端口,就好了。我试了一下在不开openclash的旁路由上,并不需要这样的设置。我想问下,openclash是有什么默认的设置,导致防火墙区域内的转发,必须要另外放行? image

Wrandz commented 1 year ago

@vernesong 另外还有一点不解。没有openclash的旁路由,只要ip伪装不开,主路由访问centos应该是独立于旁路由的。有openclash的旁路由,我理解不同点在于,centos回复的流量可能走的旁路由,openclash将源ip改为自己,相当于IP伪装了。这样一来,客户端收不到回复,连接超时。 解决办法是,你之前说的,在openclash中设置,来自22端口的流量,不走核心,直接转发,相当于没有openclash。 我上一条回复,完全是我瞎猫撞上死耗子,发现的。但是我不理解,怎么旁路由放行一下22端口,就ok了。按理说,只要openclash没有设置22端口绕行,公网通过主路由,应该一直连不上centos的。 image

Wrandz commented 1 year ago

是不是openclash会读取防火墙的自定义规则,发现允许转发到centos的22端口这条规则,就自动设置该设备的这个端口绕过核心,不予代理。

vernesong commented 1 year ago

你换兼容模式,开发者选项自定义防火墙试试,br-lan根据lan接口实际改 iptables -t nat -D openclash -m set --match-set localnetwork dst -j RETURN iptables -t nat -I openclash -i br-lan -m set --match-set localnetwork dst -j RETURN

Wrandz commented 1 year ago

@vernesong 感谢,按照你的这个设置方法就好了,连在openclash中设置22端口绕过核心,都不用设置了。 不过我想用fake-ip(TUN)模式,在这个模式下,即使添加自定义防火墙,也不行了。 我前面的不理解的是,为啥我没有设置22端口绕行核心,而是胡乱设置一个防火墙放行22端口,也好了。

vernesong commented 1 year ago

iptables -t mangle -D openclash -m set --match-set localnetwork dst -j RETURN iptables -t mangle -I openclash -i br-lan -m set --match-set localnetwork dst -j RETURN

vernesong commented 1 year ago

防火墙的转发设置插件会去读

Wrandz commented 1 year ago

感谢,最后这句我明白了。你发的iptables规则,我大概明白意思,但不懂其中的细节规则,后期慢慢学习。