> For the complete documentation index, see [llms.txt](https://docs.st0722.top/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.st0722.top/proxy/ke-xue-shang-wang-da-jian/hysteria-xie-si-di-li.md).

# Hysteria（歇斯底里）

暴力的歇斯底里协议（强力推荐，又稳又快）

### Hysteria1

安装脚本：

`bash <(curl -fsSL https://git.io/hysteria.sh)`&#x20;

若遇到作者emptysuns删库，可以将网址替换成我们在2023.12.16的备份：

`https://raw.githubusercontent.com/shentong0722/list/main/installsh/hysteria.sh`

推荐选择自签证书（安装方便）

域名可以用（当然也可以用其他的随意）[www.whitehouse.gov](http://www.whitehouse.gov)

协议UDP&#x20;

电脑端V2RayN使用时需要下载Hysteria-core和两个acl文件，并且配置文件中的动态端口可能无法使用（可以直接去下面的作者源地址下载作者配置好的包）

使用Clash-Verge直接从服务器下载yaml文件导入local配置即可，包同样可以去作者主页下载

安装完成之后管理脚本运行命令：`hihy`&#x20;

原作者项目地址：<https://github.com/emptysuns/Hi_Hysteria>

### Hysteria2

目前Hysteria协议已经更新到了v2版本，不过严格意义上来讲并不是更新而是重做，两个版本完全不兼容也不冲突，可以同时并存，相对来说v2更加暴力，速度更快（理论上，实测不一定，而且两者可以并存建议可以都安装试试），增加了混淆和伪装也更安全，功能性更丰富（比如支持了流量统计api），但是与之同时性能负载也更大配置也要复杂的多，项目官网：<https://v2.hysteria.network/zh/>

理论上v2版本也提供一键安装脚本，但是整体的配置流程还是要复杂很多而且客户端方面的配置也很麻烦，而且另一方面来说Hysteria本身专为垃圾VPS打造，对于性能够用的VPS完全没有意义，因此我们一直都没有将其作为主力，但是作为一种性能可观的直连方案，我们还是讲解一下Hysteria2的搭建方法

这里再插一个内容，因为Hysteria本身就是为垃圾VPS打造的，比如我们前面提到的Duckyci的超低配机器，因此我们这边写了一个脚本可以最大化精简你的Debian系统，仅保留运行Hysteria的环境，删除一切无关内容（警告：运行该脚本后你的系统几乎只能用来运行hysteria）：

```sh
#!/bin/bash

# 检查是否为root用户
if [ "$(id -u)" -ne 0 ]; then
    echo "请使用root用户运行此脚本"
    exit 1
fi

# 更新软件包列表
apt-get update

# 安装Hysteria2运行所需的最小依赖
echo "安装Hysteria2运行所需的最小依赖..."
apt-get install -y --no-install-recommends \
    ca-certificates \
    iptables \
    iproute2 \
    net-tools \
    libcap2-bin

# 移除所有非必要软件包（保留SSH相关）
echo "移除所有非必要软件包..."
apt-get purge -y --auto-remove \
    $(apt list --installed | grep -v -E 'openssh|ca-certificates|iptables|iproute2|net-tools|libcap2|systemd|udev|dbus|logrotate|bash|coreutils|grep|sed|awk|tar|gzip|xz-utils|libc6|libstdc++|zlib1g|libgcc|perl-base|debconf|dpkg|apt|adduser|passwd|base-files|sysvinit-utils|init|systemd-sysv|libsystemd0|libudev1|libdbus-1-3|libapparmor1|libseccomp2|libcap-ng0|libaudit1|libpam0g|libselinux1|libtinfo6|libncursesw6|libacl1|libattr1|libblkid1|libbz2-1.0|libcom-err2|libcrypt1|libext2fs2|libffi7|libgmp10|libgnutls30|libhogweed6|libidn2-0|liblz4-1|liblzma5|libmnl0|libnettle8|libp11-kit0|libpcre3|libpsl5|libsepol1|libsmartcols1|libssl1.1|libtasn1-6|libunistring2|libuuid1|libxtables12|libzstd1' | cut -d'/' -f1)

# 清理系统
echo "清理系统..."
apt-get autoremove -y
apt-get clean
rm -rf /var/lib/apt/lists/*
rm -rf /usr/share/doc/*
rm -rf /usr/share/man/*
rm -rf /usr/share/locale/*
rm -rf /var/cache/apt/archives/*.deb
rm -rf /var/cache/apt/*.bin
rm -rf /tmp/*

# 优化内核参数（提升Hysteria2性能）
echo "优化内核参数..."
cat > /etc/sysctl.d/99-hysteria-optimize.conf <<EOF
# 网络性能优化
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_sack = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_window_scaling = 1

# 内存优化
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
EOF

sysctl -p /etc/sysctl.d/99-hysteria-optimize.conf

# 禁用不必要的内核模块
echo "禁用不必要的内核模块..."
cat > /etc/modprobe.d/blacklist.conf <<EOF
blacklist bluetooth
blacklist btusb
blacklist uvcvideo
blacklist videobuf2_core
blacklist videodev
blacklist media
blacklist soundcore
blacklist snd
blacklist snd_pcm
blacklist snd_timer
blacklist snd_hwdep
blacklist snd_rawmidi
EOF

# 更新initramfs
update-initramfs -u

echo "系统最小化完成！已专门为Hysteria2优化，您的SSH配置保持不变。"
echo "建议重启服务器以使所有更改生效。"
```

脚本使用方法：

```bash
#新建脚本文件，然后将上面的内容粘贴进去
minimize-for-hysteria2.sh
#赋予最高权限
chmod +x minimize-for-hysteria2.sh
#运行脚本
./minimize-for-hysteria2.sh
```

首先使用一键脚本安装Hysteria2：

```bash
bash <(curl -fsSL https://get.hy2.sh/)
```

安装完成后会提示操作命令：

```
+ Take a look at the differences between Hysteria 2 and Hysteria 1 at https://hysteria.network/docs/misc/2-vs-1/
+ Check out the quick server config guide at https://hysteria.network/docs/getting-started/Server/
+ Edit server config file at /etc/hysteria/config.yaml
+ Start your hysteria server with systemctl start hysteria-server.service
+ Configure hysteria start on system boot with systemctl enable hysteria-server.service
```

我们以后需要用到的命令我都整理出来了，后续可能会需要：

```bash
#启动Hysteria2
systemctl start hysteria-server.service
#重启Hysteria2
systemctl restart hysteria-server.service
#查看Hysteria2状态
systemctl status hysteria-server.service
#停止Hysteria2
systemctl stop hysteria-server.service
#设置开机自启
systemctl enable hysteria-server.service
#查看日志
journalctl -u hysteria-server.service
```

然后我们到`/etc/hysteria/config.yaml`这个文件中进行配置的修改，一般来说最简单的配置示例如下，大家可以直接照搬（密码生成器推荐：[https://www.avast.com/zh-cn/random-password-generator](https://www.avast.com/zh-cn/random-password-generator#pc)）：

```yaml
listen: :44334

tls:
  cert: /etc/hysteria/server.crt
  key: /etc/hysteria/server.key

auth:
  type: password
  password: 1AXyCz6Xc9

masquerade: 
  type: proxy
  proxy:
    url: https://bing.com/ 
    rewriteHost: true

obfs:
  type: salamander
  salamander:
    password: 59fD7J8I5u
```

当然我们后期还可以添加更多其他的配置项，现在先用最简单的的配置让他能跑起来，修改完配置保存后，我们需要生成我们用的域名的自签证书（当然也可以用自己的真实域名的真实证书，不过不推荐，防止域名被墙），我们这边用bing的域名，国内国外效果都比较好，然后用下面的命令直接一键生成证书：

```bash
openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) -keyout /etc/hysteria/server.key -out /etc/hysteria/server.crt -subj "/CN=bing.com" -days 36500 && sudo chown hysteria /etc/hysteria/server.key && sudo chown hysteria /etc/hysteria/server.crt
```

这个命令会用OpenSSL服务生成自签证书并放到`/etc/hysteria/`目录下，也就是我们在上方配置文件中写的，然后用上面的命令启动Hysteria2,并设置开机自启，然后查看运行状态，如果一切正常应该会显示active (running)，这样我们服务端的配置就暂时完成了

然后就是客户端的配置，如果之前习惯用V2RayN等图形化客户端的，可以使用NekoBox，新建一个Hysteria2配置，然后按照你的配置填写，下面是我们的一个示例：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2FQNwQnqyxZwhCNOXPSgLA%2Fimage.png?alt=media&amp;token=0d19bb0f-762c-463c-9194-c330a208e9c4" alt=""><figcaption></figcaption></figure>

注意勾选不检查证书，因为如果使用自签证书的话我们的证书是假的（如果需要验证的话自己导入即可），另外这里的上传和下载速度，如果不填（或者填0）就表示使用BBR流控（不抢资源，相对柔和），如果填写具体的速度则会使用Brutal流控（暴力争抢资源以达到你填写的速度），可以根据自己具体的需求选择，配置完成后在首选项设置中将核心改成sing-box即可（目前XRay核心暂时还不支持Hysteria协议）

对于之前习惯使用Clash类软件的用户可以直接使用配置文件，下面是一个示例，在这个示例中我们就使用了Brutal流控，如果想要用BBR就将速度改称0即可，同样注意需要跳过证书检查，否则你需要在本地端有同样的证书：

```yaml
  - name: hys2_Brutal
    type: hysteria2
    server: yourIP
    port: 60002
    #  up和down均不写或为0则使用BBR流控
    up: "30 Mbps"
    down: "200 Mbps"
    password: yourpassword
    obfs: salamander # 默认为空，如果填写则开启obfs，目前仅支持salamander
    obfs-password: yourpassword
    sni: youku.com
    skip-cert-verify: true
    # fingerprint: xxxx
    alpn:
      - h3
    # ca: "./my.ca"
    # ca-str: "xyz"
```

到这里我们的基本配置就完成了，现在你已经可以用上Hysteria2了，下面是一些进阶配置

### 进阶配置

#### 关于混淆

Hysteria2默认是没有开启混淆加密的，不过我们在上面的配置文件中已经开启了混淆，也就是obfs字段，示例如下：

```yaml
obfs:
  type: salamander
  salamander:
    password: 59fD7J8I5u
```

这里需要注意的是，混淆会占用更多的系统资源，并且理论上会影响速度，但是会更安全并且抗封锁能力更强，不过混淆有一个巨大的劣势就是一旦开启了obfs加密，你的数据包就会变成没有特征的UDP包而不是默认的HTTP3流量，在这种情况下你的伪装也会失效

#### 关于带宽

我们可以在服务端设置一个带宽，具体的字段如下：

```yaml
bandwidth:
  up: 1 gbps
  down: 1 gbps
ignoreClientBandwidth: false
```

这里的单位可以是gbps、mbps、kbps等，注意这里是服务端的配置，与上面讲的客户端的配置无关，这里设置的相当于是所有连接的最大速率的限速。另外还有一个ignoreClientBandwidth选项，默认为false，如果改称true则表示忽略忽略客户端设置的带宽选项，此时强制所有连接使用BBR流控

#### 关于DNS

Hysteria2还提供服务端DNS解析，虽然我们不建议这么做，因为clash等几乎所有的客户端软件都可以在本地指定DNS服务器，又方便又好用（对于直连的流量也会通过你指定的DNS，而如果在服务端设置则只会对于通过代理的流量使用指定的DNS），服务端DNS配置字段示例如下：

```yaml
resolver:
  type: udp
  tcp:
    addr: 8.8.8.8:53 
    timeout: 4s 
  udp:
    addr: 8.8.4.4:53 
    timeout: 4s
  tls:
    addr: dns.google 
    timeout: 10s
    sni: dns.google.com 
    insecure: false 
  https:
    addr: https://dns.google/dns-query
    timeout: 10s
    sni: dns.google.com
    insecure: false
```

#### 端口跳跃（重要）

在默认情况下，Hysteria2连接服务器的某一个端口进行UDP传输，比如在我们上面的配置中就是使用了44334端口，但是运营商经常会阻断长时间大流量的单一端口UDP连接，因此我们建议一定要开启端口跳跃功能，相比于Hysteria可以直接监听一段端口，Hysteria2并不能在配置中设置多端口，因此需要通过iptables配置进行端口转发，示例如下：

```bash
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j DNAT --to-destination :443
ip6tables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j DNAT --to-destination :443
```

在这里就将20000-50000端口转发到了443端口，可以通过自己的需求进行配置比如我们一般推荐将60000-61000端口转发到我们配置的44334端口，因为最后的端口段往往使用的概率较低，另外还需要注意的是在配置项中，我们修改的是网卡eth0的端口，这是Linux系统的默认端口，一般保持不变即可，但是有的服务厂商会修改网卡名称，我们需要通过`ifconfig`命令，查找真正绑定到我们的公网IP的网卡名称，然后修改这里的配置

在服务端配置完成后需要修改客户端的配置，在NekoBox的Hysteria2中可以直接设置端口跳跃，但是在Clash配置中Hysteria2暂时还不可以设置多端口，此时可以将端口设置成我们配置的60000-61000中的任意一个端口，并且在遭到阻断时手动修改端口即可

进阶问题：

* 端口跳跃的原理是随机选择我们配置的端口跳跃列表中的某一个端口，然后根据服务端配置的跳跃时间间隔（比如我们上面在nekoBox中配置的10秒），再随机跳跃到另一个列表中的端口，注意是随机不是顺序选择
* 这个端口跳跃的配置相当于直接占用了一串端口，有的时候我们后期会需要用到这其中的某个端口，这时我们需要修改这个配置，在已经配置的情况下，将原命令中的-A参数改成-D即可删除之前的配置项（-A表示add添加规则，-D表示delete删除规则）
* Hysteria虽然可以进行端口跳跃，但是无法检测这些端口的可用性，比如在我们上面的配置中使用20000-50000端口，假设其中的22000端口被运营商阻断了或者被其他服务占用了，然后我们的客户端跳跃到该端口时，就会导致10秒的断流（根据你客户端设置的跳跃时间间隔），这会非常影响使用体验，因此我们可以通过配置负载均衡来解决（因为负载均衡会检测某条节点是否可用），配置负载均衡同样可以解决Clash暂时无法配置端口跳跃的问题，配置负载均衡的方法我们在客户端配置章节中讲过，最终呈现的效果示例：

<figure><img src="https://620835535-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz13CX9Yv5tWADdJ6iySU%2Fuploads%2FzAyfZd4NVBCT8yf0GnRx%2Fimage.png?alt=media&amp;token=6b7c29d0-926c-4679-89c3-afc508e2133c" alt=""><figcaption></figcaption></figure>

#### 缓存提升

可以通过下面的命令将系统缓冲区的发送和接收缓冲都设置为16MB：

```bash
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
```

理论上来讲缓冲区越大Hysteria2的性能越强，但是不建议设置的太大因为会占用过多的资源导致出现其他网络问题
