简介

前段时间发现我这边的运营商对端口进行了限速,好像是对长时间上传的端口进行了限速,但是限速不是永久的,过一段时间就解除了,那么只要我们的frp可以一直在更换端口就可以不被限速了

找了一下,还真有,hysteria有个端口跳跃,这就可以实现了切换端口传输了

frpc里面配置一个代理,使用hysteria2代理,这样frpc的流量就走hysteria2了,然后让hysteria2端口跳跃。

这里跳过frp的安装和具体配置,只讲hysteria2

hysteria2项目地址/下载地址

github地址:https://github.com/apernet/hysteria

本站下载地址【点击下载

也可以前往资源库搜索hysteria



hysteria2服务端安装与配置

下载服务端

hysteria其实没有区分服务端和客户端的,下载的都是同一个文件,只是启动的时候使用不同的命令启动

打开项目地址

1.png

点击顶部的标签

2.png

点击app/v.x.x.x

3.png

找到适合自己服务器架构的文件,右键,复制链接地址

4.png

使用ssh链接到服务器,然后wget命令下载

wget 粘贴刚刚复制的链接

wget https://github.com/apernet/hysteria/releases/download/app%2Fv2.6.2/hysteria-linux-amd64

图片5

下载完成后可以使用ls命令查看

图片6

根据自己的习惯创建一个文件夹,用来存放hysteria的执行文件,配置文件,例如我习惯自己安装的服务都放在/usr/local目录下

mkdir /usr/local/hysteria

图片7

把刚刚下载的文件移动到刚刚创建的文件夹里面,顺便重命名一下

mv hysteria-linux-amd64 /usr/local/hysteria/hysteria

图片8


配置服务端

进入刚刚创建的目录

cd /usr/local/hysteria/

9.png

使用vim创建一个配置文件,文件名称随意,文件后缀是.yaml

vi config.yaml

10.png

然后把下面内容粘贴进去,也可以自己到hysteria官方文档里面去看一下官方文档,然后自己写配置文件

官方文档地址:https://v2.hysteria.network/zh/

# 监听地址和端口,当只有端口没有 IP 地址时,服务器将监听所有可用的 IPv4 和 IPv6 地址。要仅监听 IPv4,可以使用 0.0.0.0:443。要仅监听 IPv6,可以使用 [::]:443。
listen: :443

# TLS 证书配置(如果不使用 ACME,可以手动指定证书和密钥)
tls:
  cert: ./fullchain.cer
  key: ./private.key
  sniGuard: strict  #验证客户端发送的 SNI。 与证书信息匹配时才建立连接, 否则终止 TLS 握手。设置为 strict 以启用该功能。设置为 disable 以禁用该功能。默认为 dns-san, 仅当证书中包含「证书主题背景的备用名称」扩展且该扩展中包含域名时才启用该功能。

# 认证配置,使用简单的密码认证
auth:
  type: password
  password: 123456  # 替换为你的强密码,建议使用复杂随机字符串

# QUIC 协议设置,优化性能
quic:
  initStreamReceiveWindow: 1258291
  maxStreamReceiveWindow: 1258291
  initConnReceiveWindow: 3145728
  maxConnReceiveWindow: 3145728

# 混淆(可选),如果网络封锁 QUIC/HTTP/3 流量
obfs:
  type: salamander
  salamander:
    password: 123456  # 替换为你的混淆密码

根据自己的情况配置好配置文件后,保存文件,按【ESC】,然后输入:wq回车

11.png

修改hysteria的权限,让hysteria可执行

chmod +x hysteria

12.png

配置好了之后,尝试启动一下看看是否成功

./hysteria server -c config.yaml

看到下面这种说明启动成功了,当然端口肯定不一样,配置文件没问题

13.png


服务端开机自启

配置文件没有问题,可以正常启动,这时候就可以配置开机自启了

使用下面命令进入服务目录

cd /etc/systemd/system/

14.png

然后使用vim创建一个服务文件,文件名为xxx.service

vi hysteria.service

15.png

把下面内容粘贴进去,根据自己实际情况把ExecStart=路径改一下,并:wq保存退出

[Unit]
Description=hysteria daemon
After=syslog.target  network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/Hysteria/hysteria server -c /usr/local/Hysteria/config.yaml
Restart= always
RestartSec=1min
ExecStop=/usr/bin/killall hysteria

[Install]
WantedBy=multi-user.target

16.png

使用chmod授权

chmod +x hysteria.service

17.png

使用下面命令启动

systemctl start hysteria

使用下面命令重启

systemctl start hysteria

使用下面命令停止

systemctl stop hysteria

使用下面命令设置开机自启

systemctl enable hysteria

服务端配置端口转发

因为hysteria只监听一个端口,所以我们需要使用iptables来做端口转发,把多个端口的流量都转发到hysteria监听的端口,但是注意的是,如果使用了iptables的话,firewall就不能使用了

首先判断自己的系统是否存在iptables,如果返回的是空则没有,需要安装

rpm -qa | grep iptables

下面这个就是有的,无需安装

18.png

如果没有,可以使用下面命令安装,如果你的系统使用的不是yum请自行更换命令,例如apt,把yum改成apt,如果有了,则跳过下面三个步骤,跳到“打开iptables规则文件”

yum -y install iptables iptables-services

然后把防火墙切换成iptables

systemctl stop firewalld
systemctl disable firewalld

之后保存生成规则文件,设置开机自启,启动iptables,待会方便修改

service iptables save
systemctl enable iptables
systemctl start iptables

打开iptables规则文件

vi /etc/sysconfig/iptables

19.png

把下面这条规则修改后加进去,记得去云服务器厂商的防火墙里面开放跳跃端口组和监听端口

-A PREROUTING -p udp -m udp --dport 20000:20019 -j REDIRECT --to-ports 443

-A PREROUTING -p udp -m udp --dport 跳跃端口组开始端口号:跳跃端口组结束端口号 -j REDIRECT --to-ports hysteria服务监听的端口

20.png

然后保存退出,重启服务器或者是iptables,这样服务端就配置完成了

可以使用下面命令查看转发规则

iptables -t nat -L -n -v


hysteria2客户端安装与配置

客户端的下载

上面我们说过,hysteria的执行文件是没有客户端和服务端的区别的,只是启动命令不同而已,所以这里不再重述下载方法,和上面一样,复制对应系统和架构的文件链接,然后使用wget命令下载,如果是windows直接点击下载。


配置客户端

和服务端一样,进入到hysteria所在的目录,然后使用vi命令创建一个config.yaml文件,然后把下面内容修改和自己符合的,粘贴进去

# 服务器地址和端口
server: 服务器绑定的域名:端口组开始-端口组结束  # 替换为你的服务端 IP 或域名

# 端口跳跃时间
transport:
  udp:
    hopInterval: 5s

# 认证配置,与服务端保持一致
auth: 123456

# TLS 设置
tls:
  sni: www.ersansi.top  # 与服务端伪装的域名一致
  insecure: false  # 建议为 false,确保验证服务端证书
  # 如果使用自签名证书,可设置 insecure: true(仅限测试)

# 混淆设置,与服务端保持一致
obfs:
  type: salamander
  salamander:
    password: 123456

# QUIC设置

quic:
  initStreamReceiveWindow: 4194304
  maxStreamReceiveWindow: 4194304
  initConnReceiveWindow: 10485760
  maxConnReceiveWindow: 10485760

# SOCKS5 代理设置(本地代理端口)
socks5:
  listen: 127.0.0.1:10099  # 本地 SOCKS5 代理端口

21.png

然后使用下面命令测试看看是否可以启动

./hysteria client -c config.yaml

下面这种就是启动成功了

图片22


客户端开机自启

和服务端一样,进入服务文件目录

cd /etc/systemd/system/

23.png

然后使用vi创建一个服务文件,文件名称为xxx.service

vi hysteria.service

24.png

把下面内容修改一下自己存放hysteria和config.yaml的路径,并:wq保存退出,修改ExecStart=字段

[Unit]
Description=hysteria daemon
After=syslog.target  network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/hysteria2/hysteria client -c /usr/local/hysteria2/config.yaml
Restart= always
RestartSec=1min
ExecStop=/usr/bin/killall hysteria

[Install]
WantedBy=multi-user.target

25.png

修改hysteria.service文件的权限,让这个文件可执行

chmod +x hysteria.service

26.png

使用下面命令启动

systemctl start hysteria

使用下面命令重启

systemctl start hysteria

使用下面命令停止

systemctl stop hysteria

使用下面命令设置开机自启

systemctl enable hysteria


frpc配置代理

frpc.toml里面加入下面这行,让frpc走hysteria的代理

transport.proxyURL = "socks5://127.0.0.1:10099"

socks5://127.0.0.1:10099这个地址是我们写在hysteria客户端配置文件里面的,修改成你自己的即可

27.png



查看frpc是否走代理

直接查看frpc的日志即可

28.png



查看hysteria2是否进行端口跳跃

使用vi创建一个.sh文件,把下面内容修改一下粘贴进去

#!/bin/bash

SERVER_IP="服务器ip地址"
PORT_RANGE_START=端口组开始端口号
PORT_RANGE_END=端口组结束端口号

echo "[INFO] Starting live capture for UDP traffic to $SERVER_IP ports $PORT_RANGE_START-$PORT_RANGE_END ..."

sudo tcpdump -i any udp and host $SERVER_IP and portrange $PORT_RANGE_START-$PORT_RANGE_END -nn -l 2>/dev/null | \
while read -r line; do
  # tcpdump 输出中提取目标端口,格式示例:
  # 13:19:50.618180 eno1  In  IP 192.168.99.2.54123 > 47.239.226.246.10106: UDP, length 67
  # 正则匹配目标IP和端口部分,拿目标端口
  if [[ $line =~ ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+)[[:space:]]\>[[:space:]]([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+) ]]; then
    dst_ip="${BASH_REMATCH[3]}"
    dst_port="${BASH_REMATCH[4]}"
    if [[ "$dst_ip" == "$SERVER_IP" && "$dst_port" -ge $PORT_RANGE_START && "$dst_port" -le $PORT_RANGE_END ]]; then
      echo "Dest port: $dst_port"
    fi
  fi
done

29.png

然后保存,之后和上面一样,使用chmodf +x 文件名称授权执行权限,然后使用./文件名称运行

30.png

然后访问一下你穿透的内容,在回来看一下显示的端口号会不会变,会的话就跳跃成功了

31.png

二维码

发表评论