Hysteria2 支持端口跳跃,通过端口跳跃可以提升可用性,当一个端口被运营商阻塞时,可以切换到另一个端口继续使用,提升代理的稳定性。本方案结合 UFW 实现端口跳跃,通过端口跳跃提升可用性

关于 Hysteria2 的配置,可以参考 使用 Docker 在 Linux 服务器搭建 Hysteria2 作为代理

服务端

服务端需要使用 iptables 或者 nftables 通过 DNAT 将端口转发到服务器的监听端口,可以参考 端口跳跃,以使用 iptables 的 UFW 为例:

开启端口转发

编辑 /etc/sysctl.conf,将以下配置添加到文件中

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

执行以下命令使配置生效

sysctl -p

添加 NAT 转发规则

需要将跳跃的端口添加到 ufw 的 NAT 转发规则中,编辑 /etc/ufw/before.rules,将以下内容添加到文件的最前面,注意将网卡名称替换为实际的网卡名称;这样 Hysteria2 实际只监听 9443 一个端口,但客户端可以随机使用 20000-30000 范围内任意端口发包,由 iptables 在内核层透明转发

# hysteria2 端口跳跃配置,将 UDP 协议 20000-30000 端口转发到 9443 端口,网卡为 enp3s0
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -i enp3s0 -p udp --dport 20000:30000 -j REDIRECT --to-ports 9443
COMMIT

配置防火墙

因为 iptables PREROUTING 允许在数据包到达 INPUT 链之前对其进行修改, 所以 UFW 过滤时看到的已经是转换后的端口,因此防火墙仅需要配置放行 9443 端口即可:

ufw allow from 10.0.0.0/16 to any port 9443 proto udp

客户端配置

ClashX Meta

通过 proxy-providers 方式配置,详细可以参考 使用 Docker 部署 Clash Premium

proxies:
  - name: "hysteria2"
    type: hysteria2
    server: hysteria2.example.com
    password: password
    port: 9443
    ports: 20000-30000 # 随机使用 20000-30000 范围内任意端口发包
    up: "100 Mbps"
    down: "100 Mbps"