Debian 11 上部署 Hysteria2 服务端并配置 Clash.Meta 客户端实现安全高效代理的指南
本报告旨在提供一份在 Debian 11 操作系统上部署 Hysteria2 服务端,并为 Android 手机上的 Clash.Meta 客户端配置详尽分流规则的教程。Hysteria2 以其高速、高效和易于集成的特性而闻名,结合 Clash.Meta 强大的规则引擎,能够为用户提供一个安全、高效且智能化的代理解决方案。报告将涵盖服务端安装、证书配置、客户端配置以及安全性最佳实践,旨在实现“傻瓜式开箱即用”的目标,同时确保代理连接的高度安全性。
I. Hysteria2 服务端部署 (Debian 11)
在 Debian 11 上部署 Hysteria2 服务端是构建安全代理环境的第一步。Hysteria2 作为一个基于 QUIC 协议的代理工具,旨在提供高速且可靠的通信能力 。
A. 环境准备
Hysteria2 本身对 Linux 发行版没有严格的特定要求,但其官方安装脚本设计用于满足特定条件的系统。建议使用 Debian 11 或更高版本、Ubuntu 22.04 LTS 或更高版本,或 Rocky Linux 8 及更高版本等主流稳定发行版 。确保系统具备 systemd
服务管理能力,并且安装了 bash
、curl
和 grep
等 GNU Coreutils 工具,这些工具不应通过 BusyBox 提供,以确保脚本的兼容性和稳定性 。
B. 一键安装脚本
Hysteria2 官方提供了一个便捷的 Bash 脚本,用于在常见的 Linux 发行版上安装、升级和卸载 Hysteria 服务及其 systemd
服务 。该脚本能够自动处理依赖关系和系统服务配置。
要安装最新版本的 Hysteria2,只需在 Debian 11 服务器上执行以下命令:
1bash <(curl -fsSL https://get.hy2.sh/)
执行此命令后,脚本将自动下载并安装 Hysteria2 核心程序,并配置相应的 systemd
服务。安装完成后,可以使用 hys2
命令启动管理面板,无需再次执行安装命令 。
C. 防火墙配置
为了允许客户端连接到 Hysteria2 服务端,必须在服务器的防火墙上开放 Hysteria2 监听的端口。Hysteria2 默认监听 443 端口 。
如果服务器上启用了 ufw
(Uncomplicated Firewall),可以通过以下命令开放端口:
1sudo ufw allow 443/udp
2sudo ufw allow 443/tcp # 尽管Hysteria2主要基于QUIC (UDP),但为ACME HTTP-01/TLS-ALPN挑战或某些伪装模式,TCP 443也可能需要
3sudo ufw enable
如果使用其他防火墙(如 firewalld
或 iptables
),请根据其具体语法进行配置。确保 UDP 端口的开放至关重要,因为 Hysteria2 的核心协议基于 QUIC,而 QUIC 运行在 UDP 之上 。
D. Hysteria2 服务端核心配置 (config.yml
)
Hysteria2 安装脚本会生成一个示例配置文件,但仍需要手动修改以正确启动服务 。核心配置文件位于 /etc/hysteria/config.yaml
。
以下是 Hysteria2 服务端 config.yml
的核心参数及其作用:
listen
: 此参数指定 Hysteria 服务器监听传入连接的网络地址和端口。默认情况下,服务器监听 443 端口 。如果仅指定端口号(例如:443
),服务器将监听所有 IPv4 和 IPv6 地址。若需仅监听 IPv4,可使用0.0.0.0:端口号
;若仅监听 IPv6,则使用[::]:端口号
。更改默认端口时,务必在配置文件中取消注释listen
行。auth
: 此部分定义客户端连接 Hysteria 服务器的认证方法。通常使用type: password
和一个强密码。此密码是客户端连接的凭证,其安全性直接影响代理的整体安全性 。masquerade
: 伪装功能是 Hysteria 协议的关键特性。它允许服务器伪装成标准的 HTTP/3 流量,并像常规 Web 服务器一样响应 HTTP 请求,从而在网络中显得真实可信 。建议配置type: proxy
并指定一个真实的、可访问的网站 URL(例如https://www.bing.com
),并保持rewriteHost: true
。如果省略此配置,Hysteria 将始终返回“404 Not Found”,这可能增加被检测的风险 。obfs
: 混淆配置提供了一个额外的流量混淆层,进一步增强流量的隐蔽性 。Hysteria 提供了“Salamander”混淆实现,它将数据包转换为看似随机的字节,消除可识别的模式 。启用混淆需要一个密码,且该密码必须与客户端配置完全一致 。需要注意的是,启用混淆将使 Hysteria 服务器与标准 QUIC 连接不兼容,并且不再作为有效的 HTTP/3 服务器运行 。bandwidth
: 服务器端的带宽参数用作速度限制,控制每个客户端的最大发送和接收速率 。服务器的上传速度对应客户端的下载速度,反之亦然 。这些值可以省略或设置为零,表示没有带宽限制 。Hysteria 支持bps
,kbps
,mbps
,gbps
,tbps
等多种带宽单位 。ignoreClientBandwidth
: 默认值为false
,表示服务器会考虑客户端的带宽设置 。如果设置为true
,服务器将忽略客户端设置的任何带宽提示,强制使用 BBR(Bottleneck Bandwidth and RTT)拥塞控制算法 。对于个人使用,通常可以在服务器端省略bandwidth
和ignoreClientBandwidth
,仅在客户端配置带宽,以简化设置 。
以下是 Hysteria2 服务端核心配置参数的概览:
参数名称 | 目的/作用 | 类型 | 示例值 | 重要注意事项 |
---|---|---|---|---|
listen |
服务器监听地址和端口 | 字符串 | ":443" |
默认 443。可指定 IPv4/IPv6 地址。务必在防火墙开放此端口。 |
auth.type |
客户端认证类型 | 字符串 | password |
目前主要支持密码认证。 |
auth.password |
客户端连接密码 | 字符串 | "YOUR_STRONG_PASSWORD_HERE" |
务必使用强密码! 客户端连接的凭证。 |
masquerade.type |
伪装类型 | 字符串 | proxy |
推荐使用 proxy 类型。 |
masquerade.proxy.url |
伪装目标 URL | 字符串 | "https://www.bing.com" |
务必替换为真实的、可访问的网站 URL。 |
masquerade.proxy.rewriteHost |
是否重写 Host 头 | 布尔值 | true |
建议保持 true 。 |
obfs.type |
混淆类型 | 字符串 | salamander |
提供额外混淆层。启用后服务器不再兼容标准 HTTP/3。 |
obfs.salamander.password |
混淆密码 | 字符串 | "YOUR_OBFS_PASSWORD_HERE" |
务必使用强密码,且与客户端配置一致。 |
bandwidth.up |
服务器上传速度限制 (对应客户端下载) | 字符串 | 100 mbps |
可选。不设置或设为 0 表示无限制。支持 bps , kbps , mbps 等单位。 |
bandwidth.down |
服务器下载速度限制 (对应客户端上传) | 字符串 | 100 mbps |
可选。不设置或设为 0 表示无限制。 |
ignoreClientBandwidth |
是否忽略客户端带宽设置 | 布尔值 | false |
默认 false 。设为 true 将强制使用 BBR 拥塞控制。 |
YAML
1# Hysteria2 服务端配置文件示例
2# 文件路径: /etc/hysteria/config.yaml
3
4listen: ":443" # 服务器监听地址和端口,默认443。如果需要其他端口,请修改并确保防火墙开放。
5# listen: "0.0.0.0:端口号" # 仅监听IPv4
6# listen: "[::]:端口号" # 仅监听IPv6
7
8auth:
9 type: password
10 password: "YOUR_STRONG_PASSWORD_HERE" #!!! 务必修改为强密码,这是客户端连接的凭证
11
12# masquerade 伪装配置,使Hysteria流量看起来像正常的HTTP/3网站流量
13# 强烈建议配置此项,替换为真实的、可访问的网站URL
14masquerade:
15 type: proxy
16 proxy:
17 url: "https://www.bing.com" # 替换为任意一个真实的网站,例如 https://www.google.com 或 https://www.microsoft.com
18 rewriteHost: true # 建议保持为 true
19
20# obfs 混淆配置,提供额外的流量混淆层,进一步增强流量的隐蔽性
21# 注意:启用混淆会使服务器不再兼容标准HTTP/3连接
22obfs:
23 type: salamander
24 salamander:
25 password: "YOUR_OBFS_PASSWORD_HERE" #!!! 务必修改为强密码,且与客户端配置一致
26
27# bandwidth 带宽限制,可限制每个客户端的上传和下载速度。
28# 对于个人使用,通常可以省略服务器端限制,仅在客户端配置。
29# bandwidth:
30# up: 100 mbps # 服务器上传速度限制 (对应客户端下载速度)
31# down: 100 mbps # 服务器下载速度限制 (对应客户端上传速度)
32
33# ignoreClientBandwidth: false # 默认false,表示会考虑客户端的带宽设置。
34 # 如果设置为true,服务器将强制使用BBR拥塞控制,忽略客户端设置。
II. ACME 证书自动生成
用户明确询问 Hysteria2 是否能自动生成 ACME 证书而无需 Caddy。答案是肯定的。Hysteria2 内置了 ACME 客户端,可以直接与 Let’s Encrypt 或 ZeroSSL 等证书颁发机构交互,自动获取和续订 SSL/TLS 证书,无需额外安装和配置 Caddy 或 Nginx 等 Web 服务器来处理证书 。
重要提示:端口占用
Hysteria2 默认监听 443 端口 。如果您的服务器上已有其他服务(例如 Web 服务器 Nginx、Apache 或 Caddy)占用了 80 或 443 端口,您需要在安装 Hysteria2 并配置其监听这些端口之前,暂停或禁用这些服务,以避免端口冲突。例如,您可以使用 sudo systemctl stop nginx 或 sudo systemctl disable nginx 来停止或禁用 Nginx 服务。
A. Hysteria2 内置 ACME 客户端优势 (无需 Caddy)
Hysteria2 内置 ACME 客户端极大地简化了部署流程,消除了对 Caddy 等额外组件的依赖,从而减少了软件栈的复杂性 。这种集成减少了潜在的配置错误点和安全漏洞,因为需要管理的组件更少。此外,ACME 的自动续期功能减少了手动干预,降低了证书过期导致服务中断的风险,提升了服务的稳定性和可用性。
B. 推荐 DNS-01 挑战方式 (不依赖 80/443 端口)
ACME 证书验证有两种主要方式:HTTP-01 和 DNS-01 。HTTP-01 挑战需要开放服务器的 TCP 80 端口,以便 Let’s Encrypt 验证域名所有权 。然而,在某些网络环境下,80 端口可能受到限制或干扰,这可能会影响代理服务器的正常运行 。
相比之下,DNS-01 挑战通过在域名 DNS 记录中添加 TXT 记录来验证域名所有权,因此不依赖于服务器的 80/443 端口开放 。这种方法对于服务部署和端口隐藏具有显著优势。验证过程发生在 DNS 层面,使得 Hysteria2 服务器可以运行在任意端口,且无需暴露 80/443 端口,极大地提高了其灵活性 。此外,DNS-01 挑战还支持泛域名证书,这对于管理多个子域名的代理服务非常有用 。因此,DNS-01 挑战是 Hysteria2 在复杂网络环境下保持服务稳定性的重要策略,是实现“高代理安全性”的关键一环。
关于 DNS 服务商 API Token 的获取与配置,以及 ACME 配置的详细示例,请参阅本报告末尾的“VI. 补充说明”部分。
保存并退出文件后,重启 Hysteria2 服务以应用新配置:
1sudo systemctl restart hysteria-server.service
首次启动可能需要一些时间来获取证书。可以通过 sudo journalctl --no-pager -e -u hysteria-server.service
查看日志,确认证书是否成功获取。
III. Clash.Meta 客户端 config.yml
配置 (安卓)
Clash.Meta 是 Clash 核心的一个增强版本,提供了对 Hysteria2 等新协议的更好支持,并支持多种代理协议和强大的规则分流功能 。在安卓手机上,Clash.Meta 通常以 APK 形式提供,用户可以从其 GitHub Release 页面或第三方应用商店(如 F-Droid)获取并安装 。
A. Hysteria2 代理节点配置
在 Clash.Meta 的 config.yml
文件中,需要在 proxies
部分定义 Hysteria2 代理节点。
以下是 Clash.Meta 中 Hysteria2 代理节点的核心参数:
参数名称 | 目的/作用 | 类型 | 示例值 | 与服务端配置的对应关系 |
---|---|---|---|---|
name |
代理节点名称 | 字符串 | "MyHysteria2Node" |
自定义,用于代理组引用。 |
type |
协议类型 | 字符串 | hysteria2 |
必须为 hysteria2 。 |
server |
Hysteria2 服务器域名 | 字符串 | "xxxx.com" |
务必替换为您的域名。 |
port |
Hysteria2 服务器端口 | 整数 | 443 |
务必与服务端 listen 配置一致。 |
password |
客户端认证密码 | 字符串 | "YOUR_STRONG_PASSWORD_HERE" |
务必与服务端 auth.password 完全一致。 |
obfs |
混淆类型 | 字符串 | "salamander" |
如果服务端启用了 obfs ,这里也需配置。 |
obfs-password |
混淆密码 | 字符串 | "YOUR_OBFS_PASSWORD_HERE" |
务必与服务端 obfs.salamander.password 完全一致。 |
up |
客户端上传带宽限制 | 字符串 | 50mbps |
可选,但建议设置。支持 mbps , kbps 等单位 。 |
down |
客户端下载带宽限制 | 字符串 | 100mbps |
可选,但建议设置。支持 mbps , kbps 等单位 。 |
sni |
TLS SNI (Server Name Indication) | 字符串 | "xxxx.com" |
务必替换为您的域名,建议与服务端 masquerade.proxy.url 域名一致,以优化性能 。 |
tls |
启用 TLS | 布尔值 | true |
Hysteria2 强制使用 TLS。 |
skip-cert-verify |
是否跳过证书验证 | 布尔值 | false |
如果使用 ACME 证书,通常保持 false 。 |
fast-open |
启用 TCP Fast Open | 布尔值 | true |
减少连接延迟 。 |
lazy |
启用懒惰模式 | 布尔值 | true |
仅在需要时才建立连接,节省资源 。 |
需要特别强调的是,如果服务端启用了 obfs
混淆,客户端的 obfs-password
必须与服务端的 obfs.salamander.password
完全一致 。任何不匹配都将导致连接失败。确保密码的一致性是确保代理正常工作的关键细节,这可以避免用户在调试时陷入困境。
代理节点配置示例:
YAML
1# Clash.Meta 代理节点配置示例
2proxies:
3 - name: "MyHysteria2Node" # 代理节点名称,可自定义
4 type: hysteria2 # 协议类型,Hysteria2 [11, 12, 13]
5 server: "xxxx.com" #!!! 替换为您的域名
6 port: 443 #!!! 替换为您的Hysteria2服务器端口
7 password: "YOUR_STRONG_PASSWORD_HERE" #!!! 替换为服务端 auth.password
8 obfs: "salamander" # 如果服务端启用了 obfs,这里也需配置
9 obfs-password: "YOUR_OBFS_PASSWORD_HERE" #!!! 替换为服务端 obfs.salamander.password
10 up: 50mbps # 客户端上传带宽限制,可根据需求调整 [6, 7]
11 down: 100mbps # 客户端下载带宽限制,可根据需求调整 [6, 7]
12 sni: "xxxx.com" #!!! 替换为您的域名,与服务端 masquerade.proxy.url 域名一致 [15]
13 tls: true # 启用 TLS
14 skip-cert-verify: false # 如果使用ACME证书,通常保持为 false
15 fast-open: true # 启用TCP Fast Open [6]
16 lazy: true # 启用懒惰模式 [6]
B. 详尽分流配置:傻瓜式开箱即用
分流配置是 Clash.Meta 的核心功能,它决定了哪些流量通过代理,哪些直连,哪些被拒绝 。实现“傻瓜式开箱即用”的分流,需要合理利用 rule-providers
、GEOIP
和 GEOSITE
等高级规则类型 。
分流规则原理 (DIRECT, PROXY, REJECT):
DIRECT
: 流量直接发送,不通过代理 。PROXY
: 流量通过代理节点发送 。REJECT
: 拒绝流量 。
以下是 Clash.Meta 常用规则类型及其用途:
规则类型 | 描述 | 典型用途 | 示例 |
---|---|---|---|
DOMAIN |
匹配完整域名 | 精确匹配特定网站 | DOMAIN,google.com,PROXY |
DOMAIN-SUFFIX |
匹配域名后缀(包括子域名) | 匹配某个域名的所有子域名 | DOMAIN-SUFFIX,bilibili.com,DIRECT |
DOMAIN-KEYWORD |
匹配域名中的关键词 | 匹配包含特定关键词的域名 | DOMAIN-KEYWORD,baidu,DIRECT |
IP-CIDR |
匹配 IP 地址范围 | 直连或代理特定 IP 段 | IP-CIDR,127.0.0.0/8,DIRECT |
SRC-IP-CIDR |
匹配源 IP 地址范围 | 针对特定来源 IP 的规则 | SRC-IP-CIDR,192.168.0.0/16,DIRECT |
DST-PORT |
匹配目标端口 | 针对特定端口的流量 | DST-PORT,3389,DIRECT |
GEOIP |
基于 IP 地理位置匹配 | 根据 IP 归属地进行分流 | GEOIP,cn,DIRECT |
GEOSITE |
基于域名地理位置分类匹配 | 根据网站归属地进行分流 | GEOSITE,category-ads-all,REJECT |
PROCESS |
基于进程名称匹配 | 针对特定应用程序的流量 | PROCESS,com.tencent.mm,DIRECT |
RULE-SET |
引用外部规则集 | 导入预定义的复杂规则列表 | RULE-SET,ads,REJECT |
MATCH |
匹配所有未被前面规则匹配的流量 | 作为兜底规则,通常放在最后 | MATCH,Proxy |
GeoIP/GeoSite 数据库配置与使用:
Clash.Meta 依赖 GeoIP 和 GeoSite 数据库进行基于地理位置的分流。这些数据库包含全球 IP 地址的地理信息和常见网站的域名分类 。为了实现精确分流,需要在 config.yml
中指定这些数据库的下载地址 。
引入外部 rule-providers
和 geox-url
数据库是实现“傻瓜式开箱即用”详尽分流的关键。手动编写所有规则非常复杂且难以维护,而通过指定这些外部资源,Clash.Meta 可以自动下载并加载大量常用规则(如广告、恶意软件、国内直连),这极大地简化了用户的配置工作,实现了真正的“开箱即用”体验 。利用社区维护的规则集和地理数据库是实现高效、低维护成本的智能分流的关键。
完整 config.yml
模板 (包含代理组和规则):
以下是一个包含 Hysteria2 节点、代理组和详尽分流规则的 Clash.Meta config.yml
模板。请根据实际情况修改占位符。
YAML
1# Clash.Meta 客户端配置文件示例
2# 文件名: config.yml
3
4port: 7890 # HTTP代理监听端口
5socks-port: 1080 # SOCKS5代理监听端口
6allow-lan: false # 是否允许局域网设备连接此代理,个人使用建议保持 false
7mode: rule # 代理模式:rule (规则), global (全局代理), direct (全局直连)
8log-level: info # 日志级别:silent, error, warning, info, debug
9
10# GeoIP/GeoSite 数据库下载地址,用于地理位置分流
11# 建议使用稳定可靠的源,例如来自 Chocolate4U/Iran-v2ray-rules 项目 [19]
12geox-url:
13 geoip: "https://raw.githubusercontent.com/Chocolate4U/Iran-v2ray-rules/release/geoip.dat"
14 geosite: "https://raw.githubusercontent.com/Chocolate4U/Iran-v2ray-rules/release/geosite.dat"
15 mmdb: "https://raw.githubusercontent.com/Chocolate4U/Iran-clash-rules/release/geoip.metadb"
16 asn: "https://raw.githubusercontent.com/Chocolate4U/Iran-v2ray-rules/geolite2/GeoLite2-ASN.mmdb"
17
18# 代理节点配置
19proxies:
20 - name: "MyHysteria2Node" # 代理节点名称
21 type: hysteria2
22 server: "xxxx.com" #!!! 替换为您的域名
23 port: 443 #!!! 替换为您的Hysteria2服务器端口
24 password: "YOUR_STRONG_PASSWORD_HERE" #!!! 替换为服务端 auth.password
25 obfs: "salamander"
26 obfs-password: "YOUR_OBFS_PASSWORD_HERE" #!!! 替换为服务端 obfs.salamander.password
27 up: 50mbps
28 down: 100mbps
29 sni: "xxxx.com" #!!! 替换为您的域名
30 tls: true
31 skip-cert-verify: false
32 fast-open: true
33 lazy: true
34
35# 代理组配置
36proxy-groups:
37 - name: "Proxy" # 主要代理组,用于选择代理节点
38 type: select
39 proxies:
40 - "MyHysteria2Node" # 引用上面定义的代理节点名称
41 - "DIRECT" # 直连选项,用于规则分流
42
43 - name: "AdBlock" # 广告拦截组
44 type: select
45 proxies:
46 - "REJECT" # 拒绝流量
47 - "DIRECT"
48
49 - name: "Global" # 全局代理/直连选择组
50 type: select
51 proxies:
52 - "Proxy"
53 - "DIRECT"
54
55# 规则提供者 (Rule Providers)
56# 自动从远程URL下载规则集,实现动态更新 [19]
57rule-providers:
58 # 广告和恶意软件拦截规则
59 ads:
60 type: http
61 format: text # 或 yaml
62 behavior: domain # 或 ipcidr
63 url: "https://raw.githubusercontent.com/Chocolate4U/Iran-clash-rules/release/ads.txt"
64 path: "./ruleset/ads.txt" # 规则文件保存路径,相对路径
65 interval: 86400 # 更新间隔,单位秒 (86400秒 = 24小时)
66 malware:
67 type: http
68 format: text
69 behavior: domain
70 url: "https://raw.githubusercontent.com/Chocolate4U/Iran-clash-rules/release/malware.txt"
71 path: "./ruleset/malware.txt"
72 interval: 86400
73 phishing:
74 type: http
75 format: text
76 behavior: domain
77 url: "https://raw.githubusercontent.com/Chocolate4U/Iran-clash-rules/release/phishing.txt"
78 path: "./ruleset/phishing.txt"
79 interval: 86400
80 cryptominers:
81 type: http
82 format: text
83 behavior: domain
84 url: "https://raw.githubusercontent.com/Chocolate4U/Iran-clash-rules/release/cryptominers.txt"
85 path: "./ruleset/cryptominers.txt"
86 interval: 86400
87 # 国内域名和IP直连规则
88 cn_domains:
89 type: http
90 format: text
91 behavior: domain
92 url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/gfw.txt" # 示例,可替换为其他国内规则源
93 path: "./ruleset/cn_domains.txt"
94 interval: 86400
95 cn_ips:
96 type: http
97 format: text
98 behavior: ipcidr
99 url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/cncidr.txt" # 示例,可替换为其他国内IP规则源
100 path: "./ruleset/cn_ips.txt"
101 interval: 86400
102
103# 分流规则 (规则顺序至关重要,从上到下匹配,匹配到即停止)
104rules:
105 # 1. 系统和私有网络直连 (优先级最高)
106 - GEOIP,private,DIRECT,no-resolve # 私有IP地址直连,不解析域名 [15, 19]
107 - IP-CIDR,127.0.0.0/8,DIRECT # 本地回环地址直连 [15]
108 - SRC-IP-CIDR,192.168.0.0/16,DIRECT # 源IP为局域网地址直连 [15]
109 - DST-PORT,3389,DIRECT # 远程桌面端口直连 [15]
110 - DST-PORT,445,DIRECT # SMB端口直连 [15]
111
112 # 2. 广告、恶意软件、钓鱼、挖矿网站拦截 (高优先级)
113 - RULE-SET,ads,REJECT # 拒绝广告域名 [19]
114 - RULE-SET,malware,REJECT # 拒绝恶意软件域名 [19]
115 - RULE-SET,phishing,REJECT # 拒绝钓鱼网站域名 [19]
116 - RULE-SET,cryptominers,REJECT # 拒绝加密货币挖矿域名 [19]
117 - GEOSITE,category-ads-all,REJECT # 拒绝所有广告分类域名 [15, 19]
118 - GEOIP,malware,REJECT # 拒绝恶意IP [19]
119 - GEOIP,phishing,REJECT # 拒绝钓鱼IP [19]
120
121 # 3. 国内流量直连 (高优先级,确保国内服务正常访问)
122 - GEOSITE,cn,DIRECT # 中国大陆网站直连 [15]
123 - GEOIP,cn,DIRECT # 中国大陆IP直连 [15]
124 - RULE-SET,cn_domains,DIRECT # 通过规则提供者加载的国内域名直连
125 - RULE-SET,cn_ips,DIRECT # 通过规则提供者加载的国内IP直连
126 # 针对特定国内服务,可添加更具体的规则
127 - DOMAIN-SUFFIX,bilibili.com,DIRECT,tcp # B站直连 [15]
128 - DOMAIN-KEYWORD,baidu,DIRECT # 百度关键词域名直连 [15]
129 - GEOSITE,icloud@cn,DIRECT # 中国区iCloud直连 [15]
130 - GEOSITE,apple@cn,DIRECT # 中国区Apple服务直连 [15]
131 - GEOSITE,microsoft@cn,DIRECT # 中国区微软服务直连 [15]
132
133 # 4. 国外流量走代理 (默认规则,优先级最低)
134 - GEOSITE,geolocation-!cn,Proxy # 非中国大陆的地理位置网站走代理 [15]
135 - MATCH,Proxy # 所有未匹配的流量都走 Proxy 组 [15]
关于进程规则的注意事项:Clash.Meta 支持基于进程名称的规则 (PROCESS
类型) 。然而,研究表明,在 ClashMetaForAndroid 2.8.6 及更高版本中,匹配 Android 包名(例如 RULE-SET,apps,DIRECT
)可能完全无效 。为了确保“傻瓜式开箱即用”的稳定性,本教程主要依赖域名和 IP 规则进行分流,避免引入已知问题,从而确保教程的实用性和稳定性。
C. 导入与激活
将 config.yml
导入 Clash.Meta:
- 将上述完整的
config.yml
内容保存为config.yaml
文件(注意文件名和扩展名)。 - 将此文件传输到您的安卓手机。
- 打开 Clash.Meta 应用。通常,可以在“配置”或“Profiles”部分找到导入配置的选项。选择“从文件导入”或类似选项,然后选择您传输的
config.yaml
文件。 - 成功导入后,选择该配置并激活它。
常见问题与排查:
- 无法连接: 检查服务端 Hysteria2 服务是否正在运行 (
systemctl status hysteria-server.service
),防火墙端口是否开放,以及服务端和客户端的password
和obfs-password
是否完全一致。 - 证书错误: 检查服务端 ACME 证书是否成功获取并续订 (
journalctl -u hysteria-server.service
),确保域名解析正确。 - 分流不生效: 检查
config.yml
中规则的顺序和语法,规则是按顺序匹配的,一旦匹配到就停止。
IV. 安全性增强与最佳实践
为了确保代理服务的长期稳定运行和高度安全性,以下最佳实践至关重要:
- 强密码与混淆 (Obfuscation) 的重要性: 为
auth
和obfs
设置的密码必须是强密码,包含大小写字母、数字和特殊符号,且长度足够。这将大大降低被暴力破解的风险。混淆(Salamander)虽然会牺牲一些标准兼容性,但在复杂网络环境下能提供额外的保护层,使其流量难以被识别和阻断 。 - 定期更新 Hysteria2 与 Clash.Meta: 代理软件的开发者会不断修复漏洞、优化性能并更新策略。定期使用官方脚本更新 Hysteria2 服务端 ,并关注 Clash.Meta 客户端的最新版本,是确保代理安全性和有效性的关键。更新可以修复已知漏洞,增强协议的鲁棒性,并适应不断变化的网络环境。
- 日志监控与流量管理: 定期查看 Hysteria2 服务端的日志 (
journalctl --no-pager -e -u hysteria-server.service
),可以帮助发现异常连接尝试或潜在的安全问题 。在 Clash.Meta 客户端中,也可以监控流量使用情况,了解哪些应用或网站正在使用代理,这有助于识别异常流量或潜在的滥用。 - 分流规则的持续优化: 尽管本教程提供了“开箱即用”的分流规则,但网络环境和策略会不断变化。建议用户根据自身需求和实际使用情况,定期审查和调整 Clash.Meta 的分流规则,例如添加新的直连域名或更新广告拦截列表,以保持最佳的代理体验和安全性 。
V. 总结与展望
通过本教程,用户已成功在 Debian 11 服务器上部署了最新版本的 Hysteria2,并配置了支持详尽分流的 Clash.Meta 客户端。Hysteria2 凭借其基于 QUIC 的高速特性和 HTTP/3 伪装的流量处理能力 ,结合 Clash.Meta 强大的规则引擎 ,提供了一个安全、高效且智能化的代理解决方案。特别是值得一提的是,Hysteria2 内置的 ACME 客户端能够自动生成和续订证书,并通过 DNS-01 挑战避免了对 80/443 端口的依赖,极大地提升了服务的灵活性和部署便捷性 。
为了确保代理服务的持续稳定运行和高安全性,用户应牢记安全性最佳实践,包括使用强密码、启用混淆、定期更新软件以及持续优化分流规则。通过这些措施,可以有效应对不断变化的网络环境,保障通信的自由和安全。
VI. 补充说明
A. DNS 服务商 API Token 获取与配置 (以 Cloudflare 为例)
要使用 DNS-01 挑战,需要向 Hysteria2 提供 DNS 服务商的 API 凭证。以 Cloudflare 为例,用户需要在 Cloudflare 账户中生成一个 API Token,并赋予其编辑 DNS 记录的权限 。
Cloudflare API Token 获取步骤(简述):
- 登录 Cloudflare 仪表板。
- 进入“我的个人资料” -> “API Token” -> “创建 Token”。
- 选择“编辑区域 DNS”模板,或创建自定义 Token,确保其对您的域名具有“区域 - DNS - 编辑”权限。
- 复制生成的 API Token。
B. ACME 配置示例 (集成到 config.yml
)
将以下 acme
配置块添加到 /etc/hysteria/config.yaml
文件中,与 listen
, auth
等同级。
YAML
1# ACME 证书自动生成配置
2# Hysteria2 将自动获取并续订SSL/TLS证书
3acme:
4 domains:
5 - "xxxx.com" #!!! 替换为您的域名
6 # - "*.xxxx.com" # 如果需要泛域名证书,请取消注释并确保DNS服务商支持
7 email: "your@email.com" #!!! 替换为您的有效邮箱地址
8 type: dns # 使用DNS-01挑战方式
9 dns:
10 name: cloudflare # 替换为您的DNS服务商,例如:cloudflare, duckdns, godaddy 等 [8]
11 config:
12 cloudflare_api_token: "YOUR_CLOUDFLARE_API_TOKEN" #!!! 替换为您的Cloudflare API Token [8]