搜索
缓存时间08 现在时间08 缓存数据 风轻扬夏未央,林荫路单车响,原来所谓爱情是这模样,早安!
查看: 222|回复: 0

自行搭建 Subconverter 后端并自定义规则

[复制链接]
发表于 2025-1-6 01:03:35 | 显示全部楼层 |阅读模式

厌倦了滚动浏览相同的帖子?当您创建帐户后,您将始终回到您离开的地方。注册帐户,不仅可以享受无广告的清爽界面!

您需要 登录 才可以下载或查看,没有账号?注册

×

前言

我们知道,大多数网络服务提供商都会根据节点状态和服务方式提供订阅链接,以便用户能够一键导入到相应的客户端中。然而,当用户需要在配置文件中添加自定义节点,或者修改、添加自定义规则时,就不得不手动编辑 *.yml 文件。这种操作方式存在以下几个问题:

  1. 上手难度高:对于新手用户而言,*.yml 文件通常体积庞大且结构复杂,仅仅为了添加节点和路由规则而去学习配置文件的结构,显得过于繁琐。
  2. 操作不便:服务商的节点经常会有变动,如果每次节点更新都需要用户手动修改配置文件,会给用户带来极大的不便。

在这种情况下,我们可以借助 Subconverter 工具来实现订阅链接的自动转换,从而简化操作流程。

Subconverter 是一款功能强大的订阅格式转换工具,用户可以通过它实现对订阅链接的高度自定义配置。与直接修改固定的 *.yml 文件相比,使用 Subconverter 具有以下优势:

  1. 多格式转换:能够将各种来源的订阅链接转换为不同类型的目标链接格式。
  2. 节点管理:支持将不同服务商的节点合并为单一链接,并允许用户自行添加节点。
  3. 自定义配置:通过编辑 all_base.tpl 文件,用户可以自定义上游 DNS 及域名嗅探等功能。
  4. 灵活规则:通过编辑 \config\*.ini 文件,用户可以根据需求重建适合自己的路由规则。

目前,网上关于搭建 Subconverter 后端的教程要么过于简略,缺乏对基本功能的详细说明;要么过于专业复杂,令初学者难以理解。本文旨在详细讲解如何搭建 Subconverter 后端并实现其基础功能,力求在全面介绍 Subconverter 后端功能的同时,确保内容易于理解,帮助用户快速上手。

搭建

下载 Subconverter 后端

目前知名的后端项目主要包括以下三个:

  1. 原版 Subconverter 项目tindy2013/subconverter
  2. 支持 hysteria/hysteria2 协议的项目lonelam/subconverter
  3. Meta 团队开发的 Vmess/Vless 协议支持项目MetaCubeX/subconverter

以下以 MetaCubeX/subconverter 的 Linux AMD64 平台为例进行说明:

1. 下载并解压

首先,查看当前目录:

pwd

接着,下载并解压文件:

wget https://github.com/MetaCubeX/subconverter/releases/download/Alpha/subconverter_linux64.tar.gz
tar zxvf subconverter_linux64.tar.gz

如果当前目录是 /root,那么 Subconverter 的工作目录将是 /root/subconverter,其可执行文件的路径为 /root/subconverter/subconverter

将 Subconverter 注册为系统服务

1. 创建 Subconverter.service 文件

nano /etc/systemd/system/subconverter.service

2. 编辑 Subconverter.service 文件内容

[Unit]
Description=A API For Subscription Convert
After=network.target

[Service]
Type=simple
WorkingDirectory=/root/subconverter # 请将此路径修改为实际的工作目录
ExecStart=/root/subconverter/subconverter # 请将此路径修改为实际的可执行文件路径
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

编辑完成后,使用快捷键 Ctrl+O 保存文件,然后按 Ctrl+X 退出编辑器。

管理 Subconverter.service

1. 开机启动

systemctl enable subconverter
systemctl start subconverter

2. 查看日志

journalctl -fu subconverter

3. 重启

systemctl restart subconverter

实际上,到了这一步,Subconverter 后端就已经初步搭建完成了。你可以随意选择一个 Sub-web 前端网站,例如:acl4ssr-sub.github.iosub.ops.ci,然后在“后端地址”或“后端服务”一栏中填入:http://IP地址:25500/sub?。这样,你就可以自定义 Subconverter,使其输出你所需的配置。

配置

尽管 Subconverter 的官方文档详细列举了众多用法和配置文件说明,但我们只需重点关注以下三个文件:pref.tomlconfig/远程配置.inibase/all_base.tpl

基础配置 pref.toml

[common] 字段中,请根据你的实际情况修改以下内容:

[common]
# API 模式, 如果你想在远程服务器上运行此后端则设置为true,否则为false
api_mode = false

# API模式的访问密钥
api_access_token = "password"

# 是否允许添加自定义节点,如需在订阅中添加自己的其他节点则设置为true
enable_insert = true
# 在订阅链接前插入的 URL,可用于向所有导出的订阅添加节点,支持本地文件/URL
insert_url = [""]
# 将插入的 URL 添加到订阅链接最前面。insert_url 中的节点将首先被添加到组中,使用非特定组的匹配模式
prepend_insert_url = true

# 排除备注与以下模式匹配的节点。支持正则表达式。
exclude_remarks = ["(到期|剩余流量|时间|官网|产品)"]

# 仅包含备注与以下模式匹配的节点。支持正则表达式。
#include_remarks = ["V3.*港"]

# 当未指定配置文件时将外部配置文件设置为默认值,支持本地文件/URL
default_external_config = "config/example_external_config.toml"

这里需要特别注意 default_external_config = 这个配置项。你需要将 "" 内的路径修改为你将要使用的配置文件的实际路径。例如,如果配置文件 ACL4SSR_Online.ini 位于 subconverter 所在目录中的 config/ACL4SSR_Online.ini,那么这行配置应修改为 default_external_config = "config/ACL4SSR_Online.ini"

自定义 Config

根据前文的提示,我们在 Subconverter 目录下的 ./config 文件夹中新建了一个名为 ACL4SSR_Online.ini 的配置文件。

配置文件

[custom]

;ruleset=🔒 局域网,[]GEOIP,LAN
ruleset=🔒 局域网,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/LocalAreaNetwork.list
ruleset=🧲 下载工具,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Download.list
;ruleset=🧲 下载工具,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Download/Download.list
ruleset=🚀 节点选择,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/PrivateTracker/PrivateTracker.list
ruleset=🛑 广告域名,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/BanAD.list
;ruleset=🆎 广告增强,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/BanEasyList.list
;ruleset=🆎 广告增强,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/BanEasyListChina.list
ruleset=🍃 应用净化,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/BanProgramAD.list
ruleset=🅰️ Adobe 验证,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/AdobeActivation/AdobeActivation.list
ruleset=🔍 搜索引擎,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/GoogleSearch/GoogleSearch.list
ruleset=🔍 搜索引擎,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Bing/Bing.list
ruleset=🔍 搜索引擎,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Duckduckgo/Duckduckgo.list
ruleset=🔍 搜索引擎,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Yandex/Yandex.list
ruleset=🔍 搜索引擎,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Naver/Naver.list
ruleset=🤖 AI 域名,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/OpenAI/OpenAI.list
ruleset=🤖 AI 域名,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Copilot/Copilot.list
ruleset=🤖 AI 域名,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Gemini/Gemini.list
ruleset=🤖 AI 域名,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Claude/Claude.list
ruleset=🎮 游戏平台,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Game/Game.list
ruleset=🎞️ 国际媒体,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/GlobalMedia/GlobalMedia.list
ruleset=📺 大陆媒体,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/ChinaMedia/ChinaMedia.list
ruleset=🪟 Microsoft 域名,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Microsoft/Microsoft.list
ruleset=🍎 Apple 域名,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Apple/Apple.list
ruleset=🇬 Google FCM,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/GoogleFCM/GoogleFCM.list
ruleset=🚀 节点选择,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Telegram/Telegram.list
;ruleset=🚀 节点选择,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ProxyGFWlist.list
ruleset=🚀 节点选择,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Proxy/Proxy.list
;ruleset=🇨🇳 大陆域名及IP,[]GEOSITE,CN
ruleset=🇨🇳 大陆域名及IP,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/China/China.list
ruleset=🇨🇳 大陆域名及IP,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Cloud/CloudCN/CloudCN.list
ruleset=🇨🇳 大陆域名及IP,[]GEOIP,CN
;ruleset=🇨🇳 大陆域名及IP,https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/ChinaIPs/ChinaIPs.list
ruleset=🐟 其他域名,[]FINAL

custom_proxy_group=🚀 节点选择`select`[]📈 自动选择`[]DIRECT`.*
custom_proxy_group=📈 自动选择`url-test`.*`http://www.apple.com/library/test/success.html`300,5,100
custom_proxy_group=🔍 搜索引擎`select`[]🚀 节点选择`[]DIRECT`[]📈 自动选择`.*
custom_proxy_group=🪟 Microsoft 域名`select`[]🚀 节点选择`[]DIRECT`[]📈 自动选择`.*
custom_proxy_group=🍎 Apple 域名`select`[]🚀 节点选择`[]DIRECT`[]📈 自动选择`.*
custom_proxy_group=🇬 Google FCM`select`[]🚀 节点选择`[]DIRECT`[]📈 自动选择`.*
custom_proxy_group=🤖 AI 域名`select`[]🚀 节点选择`[]DIRECT`[]📈 自动选择`.*
custom_proxy_group=🎮 游戏平台`select`[]🚀 节点选择`[]DIRECT`[]📈 自动选择`.*
custom_proxy_group=🎞️ 国际媒体`select`[]🚀 节点选择`[]DIRECT`[]📈 自动选择`.*
custom_proxy_group=📺 大陆媒体`select`[]DIRECT`[]🚀 节点选择`[]📈 自动选择`.*
custom_proxy_group=🇨🇳 大陆域名及IP`select`[]DIRECT`[]🚀 节点选择`[]📈 自动选择
custom_proxy_group=🔒 局域网`select`[]DIRECT`[]🚀 节点选择`[]📈 自动选择
custom_proxy_group=🧲 下载工具`select`[]DIRECT`[]🚀 节点选择`[]📈 自动选择`.*
custom_proxy_group=🅰️ Adobe 验证`select`[]REJECT`[]DIRECT`[]🚀 节点选择
custom_proxy_group=🛑 广告域名`select`[]REJECT`[]DIRECT`[]🚀 节点选择
;custom_proxy_group=🆎 广告增强`select`[]REJECT`[]DIRECT`[]🚀 节点选择
custom_proxy_group=🍃 应用净化`select`[]REJECT`[]DIRECT`[]🚀 节点选择
custom_proxy_group=🐟 其他域名`select`[]🚀 节点选择`[]DIRECT`[]📈 自动选择`.*

;启用规则生成器
enable_rule_generator=true
;是否覆写之前配置的基础配置内容
overwrite_original_rules=true

配置文件说明

来源

根据 MetaCubeX 官方项目 meta-rules-dat 的描述,其 geosite.dat、geosite.db、geosite-lite.dat 和 geosite-lite.db 等文件均源自 blackmatrix7/ios_rule_script。因此,在本配置文件中,我主要采用了 ios_rule_script 的规则,而在局域网和广告过滤等方面,则使用了更为精简的 ACL4SSR 规则。

ruleset

在 *.ini 配置文件中,Subconverter 会按照 ruleset= 从上到下的顺序生成规则。因此,像 🔒 局域网🛑 广告域名🧲 BT Tracker 这样的域名优先级较高,应置于最前面。而 🇨🇳 大陆域名及IP兜底策略 优先级较低,应放在最后。

以下是每个 ruleset= 的简要说明:

  • 🔒 局域网:本地/局域网地址,等同于 GEOIP,LAN
  • 🧲 下载工具:常见下载软件的进程,但不包括 BitComet。
  • 🚀 BT Tracker(合并到 🚀 节点选择):整合了 XIU2/TrackersListCollectionngosang/trackerslist 的 Tracker。将其置于前列是为了让 Mihomo 内核优先处理 BT 下载软件的 Tracker 连接请求,避免将域名解析为 IP 地址后再判断应直连还是通过节点。若无此需求,可注释掉该行。
  • 🛑 广告域名:仅包含常见广告关键字和广告联盟,基本无副作用。
  • 🆎 广告增强:包含 EasyList 和 EasyListChina 的广告规则。开启后规则数量将大幅增加,且广告域名需尽量前置,可能导致终端设备负载过重,故默认关闭。
  • 🍃 应用净化:包含常用应用的去广告规则。
  • 🅰️ Adobe 验证:包含 Adobe 正版验证域名。
  • 🔍 搜索引擎:包括 Google、Bing、DuckDuckGo、Yandex 和 Naver 五个搜索引擎。单独列出可防止搜索区域混乱。
  • 🤖 AI 域名:包括 OpenAI、Copilot(含 Bing 和 MSN)、Gemini 和 Claude 的域名。
  • 其他规则顾名思义,此处不再赘述。

all_base.tpl

all_base.tpl 是 Subconverter 在输出配置文件时所参考的基准文件。尽管官方中文教程对该文件的具体使用方法介绍有限,但本文将重点探讨如何通过该文件修改“DNS解析方式”和“自定义GeoIP GeoSite MMDB”的设置。

修改 DNS 字段

首先,搜索 {% if request.target == "clash" or request.target == "clashr" %},删除从 {% if request.target == "clash" or request.target == "clashr" %}{% endif %} 之间的内容,并将其替换为以下配置:

dns:
  enable: true
  prefer-h3: false
  listen: 0.0.0.0:53
  ipv6: false
  enhanced-mode: redir-host # 或 fake-ip
  use-hosts: true
  default-nameserver:
    - tcp://223.5.5.5
    - tcp://223.6.6.6
  nameserver:
    - https://223.5.5.5/dns-query # 阿里云公共DNS
    - https://223.6.6.6/dns-query # 阿里云公共DNS
    - https://1.12.12.12/dns-query # DNSPod
    - https://120.53.53.53/dns-query # DNSPod
  fallback:
    - https://1.1.1.1/dns-query # Cloudflare Public DNS
    - https://1.0.0.1/dns-query # Cloudflare Public DNS
    - https://208.67.222.222/dns-query # OpenDNS
    - https://208.67.220.220/dns-query # OpenDNS
    - https://8.8.8.8/dns-query # Google Public DNS
    - https://8.8.4.4/dns-query # Google Public DNS
    - https://9.9.9.11:5053/dns-query # Quad9 Public DNS
    - https://149.112.112.11:5053/dns-query # Quad9 Public DNS
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '+.*'
    - '*.lan'
    - '*.local'
    - '*.localhost'
    - '*.localdomain'
    - 'stun.*.*'
    - 'stun.*.*.*'
    - '+.stun.*.*'
    - '+.stun.*.*.*'
    - '+.stun.*.*.*.*'
    - '+.stun.*.*.*.*.*'
    - 'time.*.com'
    - 'time1.*.com'
    - 'time2.*.com'
    - 'time3.*.com'
    - 'time4.*.com'
    - 'time5.*.com'
    - 'time6.*.com'
    - 'time7.*.com'
    - 'ntp.*.com'
    - 'ntp1.*.com'
    - 'ntp2.*.com'
    - 'ntp3.*.com'
    - 'ntp4.*.com'
    - 'ntp5.*.com'
    - 'ntp6.*.com'
    - 'ntp7.*.com'
    - '*.msftconnecttest.com'
    - '*.msftncsi.com'
    - '*.steamcontent.com'
    - '*.*.xboxlive.com'
    - 'xbox.*.*.microsoft.com'
    - 'localhost.ptlogin2.qq.com'
    - 'localhost.sec.qq.com'
sniffer:
  enable: true
  sniff:
    HTTP:
      ports: [80, 8080-8880]
      override-destination: true
    TLS:
      ports: [443, 8443]
    QUIC:
      ports: [443, 8443]
  • prefer-h3: false:由于 H3 使用 UDP 传输层,容易被 QoS 限制,因此不建议开启。
  • enhanced-mode:如果你有特殊需求,如 BT 下载、使用电视盒子,或担心 DNS 缓存被污染,建议使用 redir-host 并开启 sniffer:。若无此类需求,可使用 fake-ip 并关闭 sniffer:
  • default-nameservernameserverfallback:这些公共 DNS 服务器仅为示例,请根据自身网络情况增删条目。
  • fake-ip-filter:特别注意第 1 条 - '+.*',添加此条后,即使使用 fake-ip 模式,所有 DNS 解析也会回退到 redir-host 模式。添加此条仅为示例说明。

增加 geox-url 字段

DNS 字段之后 {% endif %} 之前插入以下内容,以自定义 GeoIP GeoSite MMDB。

geox-url:
  geoip: "https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip-lite.dat"
  geosite: "https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
  mmdb: "https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb"

这里采用 meta-rules-dat 作为规则数据源。你可以通过替换配置文件来自定义规则集。

snippets

Sunconverter 的 emoji 配置文件位于 snippets/emoji.tomlsnippets/emoji.txt 中,但默认提供的配置似乎存在一点问题。

emoji.toml:

[[emoji]]
match = "(?i:\\bTW[N]?\\b|Taiwan|新北|彰化|\\bCHT\\b|台湾|[^-]台|\\bHINET\\b)"
emoji = "🇹🇼"

emoji.txt:

(?i:\bTW[N]?\b|Taiwan|新北|彰化|\bCHT\b|台湾|[^-]台|\bHINET\b),🇹🇼

重启

配置完成后重启 Subconverter。该服务会在 IP地址:25500 监听转换请求。

systemctl restart subconverter

转换

打开任意一个订阅转换网站,这里以 ACL4SSR 为例。

  • 远程配置:选择“不选,由接口提供方提供”
  • 后端地址:填入 http://IP地址:25500/sub?。如果你开启了 API 模式并配置了 api_access_token=,则应填入 http://IP地址:25500/sub?token=密码

如果配置文件没有问题,就说明 Subconverter 后端已成功搭建。

反向代理

一般来说,即便使用了 API模式 并配置了Token,这种方法仍然存在安全隐患。为了提高安全性,可以配置Nginx并进行反向代理Sunconverter。

前提条件

  1. 已购买域名,并将域名解析至服务器IP地址。
  2. 已通过certbot为即将使用的域名申请SSL证书。

由于Nginx的安装与配置并非本文重点,因此仅提供站点配置文件供参考。

配置

新建一个站点配置文件 sub.example.com

server {
    listen 80;
#    listen [::]:80;

    server_name sub.example.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
#    listen [::]:443 ssl ipv6only=on;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

#    root /var/www/sub.humanristos.top/html;
#    index index.html index.htm index.nginx-debian.html;

    server_name sub.example.com;

    location / {
        proxy_redirect off;
        proxy_pass http://localhost:25500;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
    }

}

转换

重新打开任意一个订阅转换网站,这里以 ACL4SSR 为例。

  • 远程配置:选择“不选,由接口提供方提供”
  • 后端地址:填入 https://sub.example.com/sub?。如果你开启了 API 模式并配置了 api_access_token=,则应填入 https://sub.example.com/sub?token=密码

如果配置文件没有问题,就说明 Subconverter 后端已成功搭建。

[发帖际遇]: 一个袋子砸在了 btpanel 头上,btpanel 赚了 4 点数. 幸运榜 / 衰神榜
爱生活,爱奶昔~

Powered by Nyarime. Licensed

GMT+8, 2025-1-19 08:24 , Processed in 0.043511 second(s), 18 queries , Gzip On, Redis On
发帖际遇 ·手机版 ·小黑屋 ·RSS ·奶昔网 | 沪ICP备13020230号-1 |  沪公网安备 31010702007642号

登录切换风格
快速回复 返回顶部 返回列表