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"