2023-09-30
过眼云烟
00
请注意,本文编写于 476 天前,最后修改于 6 天前,其中某些信息可能已经过时。

目录

Hysteria2代理:服务端配置整理
简介
配置整理
赞助

Hysteria2代理:服务端配置整理

简介

本文将Hysteria2官方全部服务器配置说明使用yaml格式整理为一个整体(All in one)。

官方文档地址:https://v2.hysteria.network/zh/docs/advanced/Full-Server-Config/

注意:本文将截止至2023-9-30官方所有说明示例全部整理了,所以会有不同情况的重复配置示例,需要自行阅读进行修改后才可使用!

配置整理

yaml
# Hysteria2 配置文件 #------------------------------------------------------------------------- # 监听地址 # # listen 是服务器的监听地址。 # 如果省略,服务器将默认监听 :443 端口,这是 HTTP/3 的默认端口。 #------------------------------------------------------------------------- listen: :443 # 当只有端口没有 IP 地址时,服务器将监听所有可用的 IP 地址。 #------------------------------------------------------------------------- # TLS 自定义域名证书 # # 可以选择使用 tls 或 acme,但不能同时包含两者。 #------------------------------------------------------------------------- tls: cert: some.crt key: some.key #------------------------------------------------------------------------- # acme 自动申请域名证书 # # 如何申请失败,会导致服务不可用 #------------------------------------------------------------------------- acme: domains: - your.domain.net email: [email protected] #------------------------------------------------------------------------- # 混淆 # # 默认 Hysteria 协议伪装为 HTTP/3。如果你的网络针对性屏蔽了 QUIC 或 HTTP/3 流量(但允许其他 UDP 流量), # 可以使用混淆来解决此问题。目前有一个名为 "Salamander" 的混淆实现,将数据包混淆成没有特征的 UDP 包。 # 此功能需要一个混淆密码,密码在客户端和服务端必须相同。 # # 注意: 启用混淆将使服务器与标准的 QUIC 连接不兼容,失去 HTTP/3 伪装的能力。 #------------------------------------------------------------------------- obfs: type: salamander salamander: password: cry_me_a_r1ver # 替换为你的混淆密码。 #------------------------------------------------------------------------- # QUIC 参数 # # 默认的流和连接接收窗口大小分别为 8MB 和 20MB。 # 除非你完全明白自己在做什么,否则不建议修改这些值。 # 如果要改,建议保持流接收窗口与连接接收窗口的比例为 2:5。 #------------------------------------------------------------------------- quic: initStreamReceiveWindow: 8388608 # 初始的 QUIC 流接收窗口大小。 maxStreamReceiveWindow: 8388608 # 最大的 QUIC 流接收窗口大小。 initConnReceiveWindow: 20971520 # 初始的 QUIC 连接接收窗口大小。 maxConnReceiveWindow: 20971520 # 最大的 QUIC 连接接收窗口大小。 maxIdleTimeout: 30s # 最长空闲超时时间。服务器会在多长时间没有收到任何客户端数据后关闭连接。 maxIncomingStreams: 1024 # 最大并发传入流的数量。 disablePathMTUDiscovery: false # 禁用 MTU 探测。 #------------------------------------------------------------------------- # 带宽 # # 服务器端带宽值的作用是最高速度限制,限制服务器对每个客户端发送和接收的最大速率。 # 注意,服务器上传速度对应的是客户端下载速度,反之亦然。 # 可以选择不写这个字段,或者在一边或两边设为零,零代表没有限制。 # # 支持的单位有: # - bps 或 b(每秒比特数) # - kbps 或 kb 或 k(每秒千比特) # - mbps 或 mb 或 m(每秒兆比特) # - gbps 或 gb 或 g(每秒吉比特) # - tbps 或 tb 或 t(每秒太比特) #------------------------------------------------------------------------- bandwidth: up: 1 gbps down: 1 gbps #------------------------------------------------------------------------- # 忽略客户端带宽设置 # ignoreClientBandwidth 启用后,服务器将忽略客户端设置的任何带宽,永远使用传统的拥塞控制算法(目前为 BBR)。 # # 这个功能主要为不希望让用户自己设置带宽的服务器提供。 #------------------------------------------------------------------------- ignoreClientBandwidth: false #------------------------------------------------------------------------- # 带宽行为详解 # (本节中的信息是 Hysteria 的内部实现细节,可能会在不同版本之间发生变化) # # 目前,Hysteria 有两种拥塞控制算法: # # BBR: 由 Google 为 TCP 开发,我们对其进行了修改以移植到 QUIC。 # BBR 是标准的拥塞控制算法,包括慢启动和基于 RTT 变化的带宽估算。 # BBR 能独立运行,不需要用户手动设置带宽。 # # Brutal: 这是 Hysteria 自有的拥塞控制算法。 # 与 BBR 不同,Brutal 采用固定速率模型,丢包或 RTT 变化不会降低速度。 # 相反,如果无法达到预定的目标速率,反而会根据计算的丢包率提高发送速率来进行补偿。 # Brutal 只在你知道(并正确设置了)当前网络的理论最大速度时才能正常运行。 # 其擅长在拥塞的网络中抢占带宽,因此得名。 # # Brutal 如果带宽设置低于实际最大值也能正常运行;相当于限速。 # 重要的是不要将其设置得高于实际最大值,否则会因为补偿机制导致连接速度更慢且不稳定。 # # 拥塞控制控制的是连接的发送部分。 # 从客户端的视角,如果没有设置 down 带宽值(但提供了 up),Hysteria 服务器会使用 BBR 向客户端发送数据, # 但客户端会使用 Brutal 向服务器上传数据,反之亦然。 # 客户端可以提供两者,这样两个方向都会使用 Brutal,或者都不提供,这样两个方向都会使用 BBR。 # # 如上所述,一个特殊情况是当服务器启用了 ignoreClientBandwidth 选项,无论客户端的带宽值如何,双方始终都会使用 BBR。 # # 目前,服务端的带宽限制限制的只是 Brutal 最大速率。因此在使用 BBR 的情况下并不会生效。 #------------------------------------------------------------------------- #------------------------------------------------------------------------- # UDP # # disableUDP 启用后服务端禁用 UDP 转发,只支持 TCP。 # # udpIdleTimeout 用于指定服务器对于每个 UDP 会话,在没有流量时保持本地 UDP 端口的时间长度。 # 概念上与 NAT 的 UDP 会话超时时间相似。 #------------------------------------------------------------------------- disableUDP: false udpIdleTimeout: 60s #------------------------------------------------------------------------- # 验证 #------------------------------------------------------------------------- auth: type: password password: your_password # 用自己选的强密码进行替换。 userpass: # 用户名-密码映射表。 user1: pass1 user2: pass2 user3: pass3 http: url: http://your.backend.com/auth # 处理验证的后端 URL。 insecure: false # 禁用后端服务器的 TLS 验证(仅适用于 HTTPS)。 command: /etc/some_command # 处理验证的命令路径。 #------------------------------------------------------------------------- # 验证示例 # # HTTP 验证 # 当使用 HTTP 验证,客户端尝试连接时,服务器会向后端服务器发送一个带有以下 JSON 的 POST 请求: # { # "addr": "123.123.123.123:44556", # "auth": "something_something", # "tx": 123456 # } # 后端服务器必须返回以下 JSON: # { # "ok": true, # "id": "john_doe" # } # 注意: HTTP 状态码必须为 200,才认为验证成功。其他状态码会被认为是验证失败。 # # 命令验证 # 当使用命令验证,客户端尝试连接时,服务器将执行指定的命令并附带以下参数: # /etc/some_command addr auth tx # 该命令必须将客户 ID 输出到 stdout,如果允许客户端连接,则返回退出代码 0;如果客户端被拒绝,则返回非零。 # 如果命令执行失败,客户端将被拒绝。 #------------------------------------------------------------------------- #------------------------------------------------------------------------- # DNS 解析 # # 可以指定用于解析客户端请求中的域名的 DNS 服务器。 # 如果省略,Hysteria 将使用系统默认的 DNS 服务器。 #------------------------------------------------------------------------- resolver: type: udp tcp: addr: 8.8.8.8:53 # TCP DNS 服务器地址。 timeout: 4s # DNS 查询超时时间。 udp: addr: 8.8.4.4:53 # UDP DNS 服务器地址。 timeout: 4s tls: addr: 1.1.1.1:853 # DNS over TLS 服务器地址。 timeout: 10s sni: cloudflare-dns.com # DNS over TLS 服务器的 SNI。 insecure: false # 禁用 TLS 证书验证。 https: addr: 1.1.1.1:443 # DNS over HTTPS 服务器地址。 timeout: 10s sni: cloudflare-dns.com insecure: false #------------------------------------------------------------------------- # ACL # # ACL 是 Hysteria 服务端中一个非常强大的功能,可以用来自定义处理客户端请求的方式,往往配合出站规则(outbounds)使用。 # 例如,可以使用 ACL 来屏蔽某些地址,或者针对不同网站使用不同的出口。 # 关于语法、使用方法以及其他信息,请参考 ACL 文档(https://v2.hysteria.network/zh/docs/advanced/ACL/)。 # # 可以选择使用 file 或者 inline,但不能同时使用两者。 # # 注意: Hysteria 只支持 MaxMind 的 GeoLite2 Country MMDB 格式的数据库来实现 GeoIP 功能。 # 如果你不知道如何获取正确的文件,可以省略 geoip 字段,让 Hysteria 自动下载最新版本。 # 只有在 ACL 中至少有一个 GeoIP 规则时,才会下载数据库。 #------------------------------------------------------------------------- # 文件 acl: file: some.txt # ACL 文件的路径。 # geoip: GeoLite2-Country.mmdb # 可选。取消注释以启用。GeoIP 数据库文件的路径。如果省略这个字段,Hysteria 会自动下载最新的数据库。 # 内联 #acl: # inline: # - reject(v2ex.com) # - reject(*.v2ex.com) # - reject(all, udp/443) # - reject(geoip:cn) # geoip: GeoLite2-Country.mmdb # 可选。取消注释以启用。GeoIP 数据库文件的路径。如果省略这个字段,Hysteria 会自动下载最新的数据库。 #------------------------------------------------------------------------- # 出站规则 (Outbounds) # # 出站规则用于定义连接应通过哪个“出口”。 # 例如,与 ACL 结合使用时,可以实现除 Netflix 外的所有流量都直接使用服务器本地网络,而 Netflix 流量通过另一个 SOCKS5 代理连接。 # # 目前,Hysteria 支持以下几种出站类型: # - direct:通过本地网络直接连接。 # - socks5:SOCKS5 代理。 # 如果不使用 ACL,所有连接将始终通过列表中的第一个(“默认”)出站规则进行路由,所有其他出站规则将被忽略。 #------------------------------------------------------------------------- outbounds: - name: my_outbound_1 # 出站规则的名称。在 ACL 中使用。 type: direct - name: my_outbound_2 type: socks5 socks5: addr: shady.proxy.ru:1080 # SOCKS5 代理地址。 username: hackerman # 可选。SOCKS5 代理用户名。 password: Elliot Alderson # 可选。SOCKS5 代理密码。 #------------------------------------------------------------------------- # 关于 direct 出站 # # direct 出站规则有一些额外的选项,可以用来定制其行为: # 注意: bindIPv4、bindIPv6 和 bindDevice 三者是互斥的。 # 可以只指定 bindIPv4 和/或 bindIPv6,或者只使用 bindDevice。 # # 支持的 mode 值包括: # - auto:默认值。双栈模式。客户端会同时尝试使用 IPv4 和 IPv6 地址连接目标,选择第一个成功的。 # - 64:优先使用 IPv6,如果没有可用的 IPv6 地址,使用 IPv4。 # - 46:优先使用 IPv4,如果没有可用的 IPv4 地址,使用 IPv6。 # - 6:始终使用 IPv6。如果没有可用的 IPv6 地址,连接失败。 # - 4:始终使用 IPv4。如果没有可用的 IPv4 地址,连接失败。 #------------------------------------------------------------------------- outbounds: - name: hoho type: direct direct: mode: auto bindIPv4: 2.4.6.8 # 要绑定的本地 IPv4 地址。 bindIPv6: 0:0:0:0:0:ffff:0204:0608 # 要绑定的本地 IPv6 地址。 bindDevice: eth233 # 要绑定的本地网卡。 #------------------------------------------------------------------------- # 流量统计 API (HTTP) # # 流量统计 API 允许你通过 HTTP API 查询服务器的流量统计信息,以及踢用户下线。 # 具体使用方法请参考 流量统计 API 文档(https://v2.hysteria.network/zh/docs/advanced/Traffic-Stats-API/)。 # # 注意: 此 API 没有验证,注意不要暴露在公网上。另外建议通过 ACL 阻止客户端访问。 #------------------------------------------------------------------------- trafficStats: listen: :9999 #------------------------------------------------------------------------- # 伪装 (Masquerade) # # Hysteria 抵抗审查的关键之一就是它能伪装成标准的 HTTP/3 流量。 # 这意味着数据包不仅对中间设备(middleboxes)看起来像是 HTTP/3,服务器还会像普通网站服务器一样真的响应 HTTP 请求。 # 然而,这意味着你的服务器必须实际提供一些内容,以便看起来是真实的。 # # 如果审查不是你需要担心的问题,可以从配置文件中完全删除 masquerade 部分。 # 这种情况下,Hysteria 将对所有 HTTP 请求始终返回 404 Not Found 。 # # 目前 Hysteria 提供以下几种伪装模式: # - file:作为一个静态文件服务器,从一个目录提供内容。 # - proxy:作为一个反向代理,从另一个网站提供内容。 #------------------------------------------------------------------------- # 可以通过特定参数启动 Chrome 以强制使用 QUIC,测试你的伪装配置: # chrome --origin-to-force-quic-on=your.site.com:443 # 注意: 在用参数启动 Chrome 之前,请先确保完全退出了 Chrome,没有任何 Chrome 进程还在后台运行。 # 否则参数可能不会生效。 # # 然后访问 https://your.site.com 验证伪装是否生效。 #------------------------------------------------------------------------- masquerade: type: proxy file: dir: /www/masq proxy: url: https://some.site.net rewriteHost: true #------------------------------------------------------------------------- # 伪装举例:HTTP/HTTPS 伪装 # # 通常支持 HTTP/3 的网站只是将其作为一个升级选项,在 80/443 端口上也提供 TCP 的 HTTP/HTTPS。 # 如果希望模仿这种模式,可以使用 listenHTTP 和 listenHTTPS 选项来启用 HTTP/HTTPS 伪装。 # 这种情况下,不需要用上述特殊参数启动 Chrome,和普通的网站一样访问即可验证伪装。 #------------------------------------------------------------------------- # 注意: 目前没有迹象表明有任何政府/商业防火墙在利用 "缺少 TCP HTTP/HTTPS" 这点来检测 Hysteria 服务器。 # 本功能仅为执着于 "做戏做全套" 的用户提供。 # 既然要 "做戏做全套",就没有理由将 HTTP/HTTPS 监听在 80/443 之外的自定义端口上(虽然 Hysteria 允许自定义监听地址)。 #------------------------------------------------------------------------- masquerade: # ... (上述其他字段) listenHTTP: :80 listenHTTPS: :443 forceHTTPS: true

赞助

建站不易,以下是一个广告,还请动动您的小拇指,点击一次以示鼓励,谢谢!

就目前的访问量,即便每个访客都点一次广告,收入也不足以支付运营成本,如果看不到广告,可能是网络原因或被拦截了,那就无所谓了~

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!