V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CloudyKumori
V2EX  ›  宽带症候群

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

  •  
  •   CloudyKumori · 164 天前 · 1875 次点击
    这是一个创建于 164 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,最近和朋友合租了某项服务,为了避免 IP 频繁切换导致封号,所以约定好了用固定的 IP 做出口。在电脑上目前使用的是 Zerotier/Tailscale+HTTP 代理(某猫咪的 Allow LAN)的方式,可是到手机上就比较难实现了,因为 HTTP 代理和 Zerotier/Tailscale 这种组网方式冲突,连上 Zerotier 再在 WIFI 设置中指定 HTTP 代理不起作用。

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

    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
        19
    CloudyKumori  
    OP
       161 天前
    @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
        20
    szdosar  
       161 天前
    我反正没太看懂你的网络拓扑,你描述的这么一大段,是在手机上吗?
    为何手机 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 。{
    szdosar
        21
    szdosar  
       161 天前
    而且,你都说了{我测试了一下 v2rayNG 的客户端,里面有个功能是叫做“启用流量探测”的功能,可以从流量中探测域名,开启这个功能后所有的请求都是带着域名发向 Clash 的,这时候分流规则就正常运行了},那你用安卓端的 v2rayNG 不就行了? ta 也有这个功能,也叫 [启用流量探测] ,好像还有个叫 [启用本地 dns] 功能,这些组合,你试试?
    szdosar
        22
    szdosar  
       161 天前
    另外,服务端(比如,你的 vps )用 x-ui ,你配置开启 inbounds 是,默认勾选 sniffing ,ta 也会帮你探测。所以,你的问题可能纠结在 clash ,这玩意不是删库了吗?
    CloudyKumori
        23
    CloudyKumori  
    OP
       161 天前
    @szdosar 是的,是在手机上,这一连串的网络活动只涉及到我内网的一台电脑,和一个在公网的手机,Clash 就是在内网主机里面运行。因为我想的是让朋友从外网安全的进入内网共享我主机上的 Clash socks5 端口实现黑白名单访问控制,并且流量会再由 Clash 进一步转发(相当于链式代理了吧),所以会搞得这么麻烦,现在想想我这个需求也是挺抽象挺折腾的。。。不过目前问题初步解决了,安卓端就是流量探测、域名策略和远程 DNS 这三个问题相互影响导致了 ERR_CONNECTION_CLOSED 这个问题。目前 IOS 端有没有这个流量探测的选项还不太清楚知道,我找了小火箭里面貌似没有,请问“ta”是 iOS 端的软件吗,全称是什么呢,我去看看
    CloudyKumori
        24
    CloudyKumori  
    OP
       161 天前
    @szdosar Clash 确实删库了,不过目前还没找到比较完善的替代品,因为分流规则用的是 Clash 格式的所以就暂时用着先了。x-ui 能用的话我一会儿再折腾一下试试,感谢感谢!
    szdosar
        25
    szdosar  
       161 天前 via iPhone
    1.先说客户端的问题,
    Surge iOS 客户端
    代理请求本地 DNS 映射,这个选项默认不开启就好了
    默认情况下,使用代理策路时域名解析一定在远端服
    务器上进行
    开启该选项后,如果访问的域名配置有本地 DNS 映射,Surge 将使用本地 IP 地址进行请求,不在远端进
    行解析。

    2.第 2 个可选方案,你电脑上,不要让 clash 去接管,用别的软件不行吗?
    CloudyKumori
        26
    CloudyKumori  
    OP
       161 天前 via Android
    @szdosar 感谢回答,我试试 surge 。目前感觉电脑上用的比较舒服而且功能完善的就是 clash 了,如果要别的软件替代的话,请问有什么好的备选吗
    szdosar
        27
    szdosar  
       161 天前 via iPhone
    你这台主机的操作系统是不是 linux 发行版?那你就用刚才我说的 x-ui 就可以了。实在不行就在虚拟机里面安装呗。
    CloudyKumori
        28
    CloudyKumori  
    OP
       161 天前 via Android
    @szdosar 是的,尝试过以后可以用,非常感谢!!😭🙏
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3004 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:25 · PVG 16:25 · LAX 01:25 · JFK 04:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.