UFW 防火墙配置端口转发实现 Hysteria 2 端口跳跃

✨ 文章记录了 Hysteria 2 协议的简单配置,为了解决国内运营商对 UDP 连接的限制,文章介绍了端口跳跃的配置方法,涵盖了系统端口转发的开启、UFW 转发规则的配置和防火墙规则的设置。此外,还提供了故障排查建议和相关参考资源。

TOC

背景

早前曾简单体验过 Hysteria 2 协议

https://okhk.net/hysteria2-protocol-simple-config

前段时间整理了个人的订阅服务,将 VPS 缩减了一下,成本倒是降了,但相对的体验也下滑了些——线路变差了。于是好好配置了下 Hysteria 2 协议,此处简要记录下。其实只是在原有的记录上扩充了些

Hysteria 2 服务端配置

服务端安装过程此处就不再赘述,如下为大致的配置

listen: :8443

tls:
  cert: /etc/ssl/cert.pem
  key: /etc/ssl/private.key

auth:
  type: password
  password: your-hysteria2-password

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

disableUDP: false
udpIdleTimeout: 60s

quic:
  initStreamReceiveWindow: 8388608 
  maxStreamReceiveWindow: 8388608 
  initConnReceiveWindow: 20971520 
  maxConnReceiveWindow: 20971520 
  maxIdleTimeout: 30s 
  maxIncomingStreams: 1024 
  disablePathMTUDiscovery: false

# https://github.com/Loyalsoldier/v2ray-rules-dat
acl:
  file: /etc/hysteria/acl.txt 
  geoip: /etc/hysteria/geoip.dat 
  geosite: /etc/hysteria/geosite.dat

outbounds:
  - name: direct 
    type: direct
	
	# Cloudflare Warp 的 SOCKS5 代理
  - name: warp
    type: socks5
    socks5:
      addr: 127.0.0.1:1234

端口跳跃

国内运营商部分地区存在阻断或限速 UDP 连接的行为。不过,这些限制往往仅限单个端口。端口跳跃可用作此情况的解决方法。

开启系统端口转发

首先需要修改系统配置以启用端口转发功能:

# 编辑 sysctl.conf 文件
sudo vim /etc/sysctl.conf

# 添加或修改以下行,如已开启则跳过此步骤
net.ipv4.ip_forward=1

# 应用更改
sudo sysctl -p

配置 UFW 转发规则

编辑 UFW 的 before.rules 文件:

sudo vim /etc/ufw/before.rules

在文件开头的 *filter 部分之前添加以下内容:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# 端口转发规则
# 将入站流量从端口范围转发到指定端口
-A PREROUTING -p udp --dport 10000:10010 -j REDIRECT --to-port 8443
-A PREROUTING -p udp --dport 18443 -j REDIRECT --to-port 8443

# 确保流量可以正确路由
-A POSTROUTING -j MASQUERADE

COMMIT

4. 配置防火墙规则

允许相关端口通过防火墙:

# 允许 Hysteria 2 主端口
sudo ufw allow 8443/udp

# 允许端口跳跃范围
sudo ufw allow 10000:10010/udp
sudo ufw allow 18443/udp

5. 重启 UFW 使配置生效

sudo ufw disable
sudo ufw enable

sudo ufw reload

验证配置

可以使用以下命令检查配置是否生效:

# 查看防火墙规则
sudo ufw status verbose

# 查看端口转发规则
sudo iptables -t nat -L -n -v

Clash Meta Hysteria 2 配置示例

在 Clash Meta 的配置文件中,可以这样配置 Hysteria 2 协议端口跳跃:

  - name: "Hysteria2"
    type: hysteria2
    server: your.server.ip.addr
    port: 8443
    ports: 18443,10000-10010
    hop-interval: 30
    password: your-hysteria2-password
    up: "100 Mbps"
    down: "100 Mbps"
    sni: amazon.com
    skip-cert-verify: true
    alpn:
      - h3

故障排查

如果配置后发现端口转发不生效,可以检查:

系统端口转发是否已启用:

cat /proc/sys/net/ipv4/ip_forward

UFW 规则是否正确加载:

sudo ufw status numbered

iptables 规则是否生效:

sudo iptables -t nat -L PREROUTING --line-numbers

注意事项

  1. 请确保端口范围不会与系统其他服务冲突
  2. 建议定期检查日志文件以监控转发状态
  3. 配置更改后必须重启 UFW 才能生效
  4. 建议在配置前备份相关配置文件

参考资源

https://v2.hysteria.network/zh/docs/advanced/Port-Hopping/https://wiki.metacubex.one/config/proxies/hysteria2/