请问 V 友们有没有办法优雅地将某猫咪软件的 socks5 端口共享出公网?

2023-11-14 23:12:53 +08:00
 CloudyKumori
如题,最近和朋友合租了某项服务,为了避免 IP 频繁切换导致封号,所以约定好了用固定的 IP 做出口。在电脑上目前使用的是 Zerotier/Tailscale+HTTP 代理(某猫咪的 Allow LAN)的方式,可是到手机上就比较难实现了,因为 HTTP 代理和 Zerotier/Tailscale 这种组网方式冲突,连上 Zerotier 再在 WIFI 设置中指定 HTTP 代理不起作用。

为什么不直接开个未批嗯给朋友呢?是因为我设置好了分流规则,只有某些特定的域名能通过服务,这样可以同时减轻代理服务器压力,同时保证原始 IP 不会因为他们自己客户端上的规则设置不当而泄露(进而封号)。目前研究了给 socks5 套 TLS ,也就是 stunnel+SOCKS5 的方法,但是那个 Docker 镜像每分钟上千条 log ,实在是不太优雅,想问问 V 友们有没有什么其他轻量优雅的方法实现这个功能?
2540 次点击
所在节点    宽带症候群
28 条回复
IvanLi127
2023-11-15 01:09:52 +08:00
歪个楼。感觉这需求上个软路由 ,跑 “open 某猫咪” 就有了。
billlee
2023-11-15 07:39:37 +08:00
stunnel 和 socks5 也不是什么复杂的东西,你改下配置把 log 关了就好了啊
CloudyKumori
2023-11-15 09:43:57 +08:00
@IvanLi127 朋友不会弄这个,我倒是可以用软路由,主要是怎么共享出去给他们用
CloudyKumori
2023-11-15 09:45:00 +08:00
@billlee 我也想过关 log ,奇怪的是我用 docker run --log-driver none 之后,stunnel 的容器直接废了,不起作用
mohumohu
2023-11-15 10:44:26 +08:00
你都用 Zerotier 了,直接 Zerotier 路由到网关不就好了
szdosar
2023-11-15 11:07:50 +08:00
意思是:
1.手机想连接 socks5 代理服务器,但是这个 socks5 代理服务器在 Zerotier 网络上?
2.问题是,你是在内网电脑上提供 socks5 代理服务吗?
3.那你找台公网电脑中转,用 gost 转发出来就好了呀,假设你都用 1080 端口提供服务
---用法:gost -L=设置本地用户名:设置本地密码 @:1080 -F=socks5://连接远程用户名:连接远程密码 @提供服务的网址或 ip:1080
---项目地址: https://github.com/ginuerzh/gost
szdosar
2023-11-15 11:11:07 +08:00
比如 gost -L=localname:localnamepassword@:1080 -F=socks5://rmname:rmpassword@your.site.com:1080
chaodada
2023-11-15 12:03:41 +08:00
软路由有个 ipsec vpn 我直接用它
CloudyKumori
2023-11-15 12:20:05 +08:00
手机端的 zerotier 路由所有流量占用了 vpn 的接口,所以没办法再连到 socks5 端口,这个就是目前我遇到的问题
CloudyKumori
2023-11-15 12:20:46 +08:00
@mohumohu 手机端的 zerotier 路由所有流量占用了 vpn 的接口,所以没办法再连到 socks5 端口,这个就是目前我遇到的问题
CloudyKumori
2023-11-15 12:28:31 +08:00
@szdosar 1.是的 2.是的,socks5 在 zerotier 网络里的一个叶节点上,也就是内网电脑 我试试 gost ,请问 gost 需要特殊的客户端支持吗,iOS 上的小火箭可不可以直接使用 socks5 over tls 来连接 gost 呢
szdosar
2023-11-15 12:40:20 +08:00
通用客户端,没啥特殊的,gost -L socks5+tls://:1080
--https://v2.gost.run/socks/
gost 转发用的,你转出的协议,可以不用 socks5 转出。
比如用 ss 或 ws 转出也行,这些协议在安全掌控方面,有成熟的客户端可用
billlee
2023-11-15 13:04:32 +08:00
@CloudyKumori 改 stunnel 和 socks 服务器的配置文件
CloudyKumori
2023-11-15 13:41:05 +08:00
@szdosar 感谢,这个方案应该可以!不过刚刚用 docker 容器设置 gost -L 这个命令的时候说格式不正确,得再研究一下。。
wkmike
2023-11-15 20:48:21 +08:00
“只有某些特定的域名能通过服务”,zerotier 应该和 wireguard 差不多吧,可以试试下面这张方式:
1 、家中 clash 开启 fake-ip 模式,用于将你的特定域名解析为 fake-ip ,并且主路由做好静态路由;
2 、WG 客户端节点添加 WG 网段、内网网段和 fake-ip 段路由,设置 dns 为家中 clash 内网地址;
3 、手机段连接 WG 后访问网站只有解析特定域名返回 fake-ip 走隧道回去过 clash 代理,其他都是正常 IP 走手机网络;
CloudyKumori
2023-11-16 22:35:56 +08:00
@wkmike WG 目前还没办法很好的从服务器端控制客户端的访问权限吧,只要用户自己改客户端就能做到流量全部走 WG ,比较危险,之前也想过用 WG ,不过后面实测比较难搞,就放弃了
CloudyKumori
2023-11-17 14:29:31 +08:00
@szdosar 您好,我这几天尝试了一下,目前很多很多客户端好像对 GOST 这种隧道支持的不是很好,大部分客户端会劫持 DNS ,使用 DOH 的时候把 SNI 给加密了,导致 Clash 的 SOCKS 端口没办法正常识别域名然后分流,就全部拒绝连接进而直接断网。关掉了 DOH 使用明文解析以后,又因为所有的请求都被解析成了 IP 地址,到了 Clash 这边 IP 地址和域名白名单对不上又直接断网了,想请教一下有没有什么好的方案或者客户端解决这个问题呢?我想让 SS 隧道啥也不干,就一股脑的转发流量给 Clash 的 socks 端口,让 Clash 负责解析域名分流,移动端的客户端总是会自作主张的在本地就给解析出 DNS 的结果,搞得分流完全没法用
szdosar
2023-11-17 15:34:30 +08:00
楼主你写得好复杂,我都没看懂。好吧,我再提供一个方案。

1.前提:假设你的现在有服务端 vps (以 ubuntu 为例)公网提供这个转发服务
2.安装 x-ui 面板
--项目地址: https://github.com/vaxilu/x-ui
--记得更新一下 geosite 数据库( very 重要,不然你会发现你配置 geosite 时,你的 xray 拒绝提供服务)
--更新指令 wget https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat -O /usr/local/x-ui/bin/geosite.dat
3.去 web 端“xray 相关设置”,配置转发你本地的 socks 代理
'''
#在 outbounds 段插入以下配置,注意结尾是否需要逗号
{
"tag": "netflix",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "127.0.0.1",
"ota": false,
"port": 1080,
"level": 1,
"users": [
{
"user": "username",
"pass": "userpassword",
"level": 1
}
]
}
]
},
"streamSettings": {
"network": "tcp"
},
"mux": {
"enabled": false,
"concurrency": -1
}
}
#在 routing 段插入以下配置,注意结尾是否需要逗号
{
"type": "field",
"outboundTag": "netflix",
"domain": [
"geosite:netflix"
]
}
4.然后去 web 端 inbounds 页面设置的感兴趣的模式即可
CloudyKumori
2023-11-17 16:57:07 +08:00
@szdosar 非常感谢老哥的耐心回复,解释的这么详细真的太感动了,我去试试看这个方案行不行。不过作为一个喜欢折腾的发烧友,我还是很好奇为什么移动客户端会强行把所有的 SNI 变成 IP 地址的形式而不是保留域名。我用流程解释一下这个流程吧,希望您能给点建议:

Shadowsocks 等 Android 代理客户端 ---- (使用软件内设置的远程 DNS 查询 google.com 的 IP) --->>1.1.1.1 DNS --->>(拿到了 google.com 的 IP !而且 IP 是 1.2.3.4 ,拿着这个 IP 去 Clash 的 Socks5 端口请求代理) --->> Clash 的 Socks5 端口:(收到了你的代理请求,但是 1.2.3.4 是啥东西,我没见过啊,白名单里面只有 google.com 可以通过,我只认域名不认 IP ,不知道你这 1.2.3.4 不知道是去往哪个域名的,直接 REJECT !) ---->> 浏览器提示:ERR_CONNECTION_CLOSED 。

事情大概就是这样,这些代理软件把本该是带着域名的请求解析成了 IP 发给了 Clash 的 Socks5 代理端口,结果 Clash 认不出来就全部拒绝了连接,所以不知道有没有办法让这些软件带着域名发起连接请求?我测试了一下 v2rayNG 的客户端,里面有个功能是叫做“启用流量探测”的功能,可以从流量中探测域名,开启这个功能后所有的请求都是带着域名发向 Clash 的,这时候分流规则就正常运行了,只是像 nekobox, shadowsocks,shadowrocket 客户端没有这个选项就非常麻烦
szdosar
2023-11-17 17:18:39 +08:00
我反正没太看懂你的网络拓扑,你描述的这么一大段,是在手机上吗?
为何手机 Shadowsocks 等 Android 代理客户端还要在转给 Clash 的 Socks5 端口?
Clash 也在手机上?
或者说你手机只有一个客户端?
---------------------------
{Shadowsocks 等 Android 代理客户端 ---- (使用软件内设置的远程 DNS 查询 google.com 的 IP) --->>1.1.1.1 DNS --->>(拿到了 google.com 的 IP !而且 IP 是 1.2.3.4 ,拿着这个 IP 去 Clash 的 Socks5 端口请求代理) --->> Clash 的 Socks5 端口:(收到了你的代理请求,但是 1.2.3.4 是啥东西,我没见过啊,白名单里面只有 google.com 可以通过,我只认域名不认 IP ,不知道你这 1.2.3.4 不知道是去往哪个域名的,直接 REJECT !) ---->> 浏览器提示:ERR_CONNECTION_CLOSED 。{

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/991946

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX