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

Update Chain Proxy feature #76

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

Update Chain Proxy feature #76

wants to merge 4 commits into from

Conversation

IamK77
Copy link

@IamK77 IamK77 commented Dec 9, 2024

为Clash格式的订阅新增了链式代理的功能

有时某个机子无法直接访问,但是IP又极好,就可以用第二台机子作为中间商进行链式代理

但是很多小猫咪的GUI实现没有或者很少有链式代理的GUI实现和资料

需要查阅资料手动修改配置, 故此用一种比较优雅的实现来方便使用链式代理

实现方式如下

新增两个proxygroup: 🔓 链式落地🔗 中转站

链式落地中选择代理A, 中转站中选择代理B, 最后在节点选择中选择链式落地,此时有

流量->B->A->目标网站

具体在yaml中为

- name: 代理A-chain
    type: vless
    server: ***.***.**.**
    port: 443
    uuid: **************
    tls: true
    client-fingerprint: chrome
    servername: yahoo.com
    network: tcp
    reality-opts: &ref_0
      public-key: **************
      short-id: ***********
    tfo: false
    skip-cert-verify: false
    flow: xtls-rprx-vision
    dialer-proxy: 🔗 中转站

代码实现思路是克隆节点,并在name后加"-chain"以表为链式落地节点

克隆的*-chain节点并入链式落地, 中转站保持原本的节点

此时用户可以自己在两个节点之间DIY链式代理

测试地址sublink

f331a9e16df41625e9ac959592e3cda

不常用Sing-Box所以没有写, 顺便贴一下Sing-Box的实现

  {
    "type": "vless",
    "tag": "代理A-chain",
    "server": "**.**.***.***",
    "server_port": 443,
    "uuid": "********************",
    "tcp_fast_open": false,
    "tls": {
      "enabled": true,
      "server_name": "yahoo.com",
      "insecure": false,
      "utls": {
        "enabled": true,
        "fingerprint": "chrome"
      },
      "reality": {
        "enabled": true,
        "public_key": "**********************",
        "short_id": "*************"
      }
    },
    "network": "tcp",
    "flow": "xtls-rprx-vision",
    "detour": "中转节点tag"
  },

@7Sageer
Copy link
Owner

7Sageer commented Dec 9, 2024

有点意思,链式代理我只用过基础的iptable和dokodemo door转发,这块确实不是很清楚

关于这块实现我的想法是做成一个可选的功能,而非直接加入现有的proxy-group,因为拥有这部分需求的人并不多

@IamK77
Copy link
Author

IamK77 commented Dec 9, 2024

如果要做成非必选的话可以和其他可客制的group一样,放在Rule Selection里,但是我对js并非很了解,所以没有再修改Rule Selection

按如上贴出的配置进行链式代理不需要对节点面板或者节点服务器有控制权,相对方便

关于Sing-Box的部分,Sing-Box对链式疑似不能按照group选择,只能在节点配置里通过detour:tag设置前置代理,灵活度不如Clash配置,如果sublink要支持就需要再写一个Custom模块出来

@7Sageer
Copy link
Owner

7Sageer commented Dec 10, 2024

这个修改的思路很好。不过由于以下几点考虑,我暂时可能不会直接合并这个改动:

  • sing-box 和 clash 对这个特性的支持存在差异
  • 我正在考虑为这个功能开发一个独立的 GUI 模块,而不是将其直接集成到现有的 proxy group 中

我会抽空研究这两个项目关于链式代理的文档来找到一个更统一和完整的解决方案。您提出的这些想法对后续的开发很有帮助。

再次感谢你的贡献,并请继续关注后续的更新。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants