Hysteria2 代理迁移实战方案

2026年1月18日 server 9 分钟阅读 23 次阅读
📖 文章摘要

本文已对所有敏感信息进行脱敏处理,包括服务器 IP 地址、域名、SSH 端口等个人标识信息均已替换为通用占位符。读者可根据自身实际环境替换对应参数即可复现完整流程。本文仅用于技术学习与交流,请遵守所在国家和地区的法律法规。

Hysteria2 代理迁移实战方案

  • 模拟场景:原服务器被封锁,迁移到新服务器
  • 原服务器:旧服务器IP(韩国)保持不动
  • 新服务器:新服务器IP(香港)
  • 新域名:your-domain.com

一、学习目标

  • 掌握 Docker 容器化部署代理服务
  • 理解 TCP 443 与 UDP 443 共存原理
  • 学会 SSL 证书复用
  • 实践完整的服务器迁移流程

二、前置条件

  • 新服务器已部署静态页面(your-domain.com
  • SSL 证书已申请(certbot)
  • 域名 A 记录已指向 新服务器IP

三、核心概念:TCP 443 与 UDP 443 共存

                 ┌─────────────────────────────────────┐
                 │           服务器 新服务器IP            │
                 ├─────────────────────────────────────┤
  TCP 443  ─────│──> Nginx(静态页面)                  │
                 │    index.html / preview.html         │
                 ├─────────────────────────────────────┤
  UDP 443  ─────│──> Hysteria2(代理服务)              │
                 │    流量伪装成 QUIC 协议              │
                 └─────────────────────────────────────┘
  • TCP 443:正常 HTTPS 网站访问(静态页面)
  • UDP 443:Hysteria2 代理流量(伪装成 QUIC)
  • 两者不冲突,可以同时运行

四、迁移步骤

第一步:创建项目目录

# 登录新服务器
ssh -p SSH端口 用户名@新服务器IP

# 创建目录
mkdir -p ~/hysteria2/{config,certs,subscribe}

第二步:编写配置文件

cat > ~/hysteria2/config/config.yaml << 'EOF'
listen: :443
tls:
  cert: /etc/hysteria/certs/fullchain.pem
  key: /etc/hysteria/certs/privkey.pem
quic:
  initStreamReceiveWindow: 8388608
  initConnReceiveWindow: 20971520
  maxIdleTimeout: 30s
  keepAlivePeriod: 10s
auth:
  type: password
  password: 你的代理密码
masquerade:
  type: proxy
  proxy:
    url: https://your-domain.com
    rewriteHost: true
EOF

第三步:复制 SSL 证书

# 复制证书(复用已有的 Let's Encrypt 证书)
sudo cp /etc/letsencrypt/live/your-domain.com/fullchain.pem ~/hysteria2/certs/
sudo cp /etc/letsencrypt/live/your-domain.com/privkey.pem ~/hysteria2/certs/
sudo chown -R 用户名:用户名 ~/hysteria2/certs/

第四步:创建订阅文件

cat > ~/hysteria2/subscribe/clash.yaml << 'EOF'
port: 7890
socks-port: 7891
allow-lan: true
mode: rule
log-level: info
proxies:
  - name: "香港自建"
    type: hysteria2
    server: your-domain.com
    port: 443
    password: 你的代理密码
    sni: your-domain.com
    skip-cert-verify: false
rules:
  - MATCH, DIRECT
EOF

第五步:Docker 部署

# 创建 Dockerfile
cat > ~/hysteria2/Dockerfile << 'EOF'
FROM alpine:latest
RUN apk add --no-cache hysteria
COPY config/config.yaml /etc/hysteria/config.yaml
COPY certs/ /etc/hysteria/certs/
EXPOSE 443/udp
CMD ["hysteria", "server", "-c", "/etc/hysteria/config.yaml"]
EOF

# 构建镜像
cd ~/hysteria2
docker build -t hysteria2-server .

# 运行容器
docker run -d \
  --name hysteria2 \
  --restart=always \
  -p 443:443/udp \
  -v ~/hysteria2/config/config.yaml:/etc/hysteria/config.yaml \
  -v ~/hysteria2/certs:/etc/hysteria/certs \
  hysteria2-server

第六步:配置订阅链接服务

# 修改 nginx 配置,添加订阅链接路由
sudo nano /etc/nginx/conf.d/html.conf

添加 location 块:

server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /home/用户名/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # 订阅链接
    location /clash.yaml {
        alias /home/用户名/hysteria2/subscribe/clash.yaml;
        add_header Content-Type "text/yaml";
    }
}

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$host$request_uri;
}

重启 nginx:

sudo nginx -t
sudo systemctl reload nginx

五、测试验证

1. 测试代理连通

# 在服务器上测试
docker logs hysteria2 --tail 20
# 看是否有连接日志

2. 测试订阅链接

# 本地测试
curl https://your-domain.com/clash.yaml

3. 更新 Clash 客户端

  1. 打开 Clash Verge
  2. Profiles → Import
  3. 输入订阅链接:https://your-domain.com/clash.yaml
  4. 选择对应节点
  5. 测试访问

六、验证清单

  • Docker 容器正常运行:docker ps | grep hysteria2
  • UDP 443 端口监听:ss -ulpn | grep 443
  • 静态页面正常访问:https://your-domain.com/
  • 订阅链接可访问:https://your-domain.com/clash.yaml
  • Clash 客户端连接成功
  • 可以正常上网

七、回滚方案

如果出问题,删除容器即可:

# 停止并删除容器
docker stop hysteria2
docker rm hysteria2

# nginx 配置会自动恢复(没有代理,只有静态页面)
sudo systemctl reload nginx

八、注意事项

  1. 防火墙:确保云服务商控制台开放 UDP 443 端口
  2. 密码安全:配置文件中的密码要替换成自己的强密码
  3. 证书权限:确保容器可以读取证书文件
  4. 日志排查:出问题先看 docker logs hysteria2
  5. 不影响原服务器:新服务器独立运行,旧服务器保持不动
文章创建于:2026年1月18日CC BY-NC-SA 4.0

评论

暂无评论,来写第一条吧

别老叽霸扫描爆破后台了,个人博客能存啥有价值的东西,有这时间不如去扫俩放片的网站