简介
前段时间发现我这边的运营商对端口进行了限速,好像是对长时间上传的端口进行了限速,但是限速不是永久的,过一段时间就解除了,那么只要我们的frp可以一直在更换端口就可以不被限速了
找了一下,还真有,hysteria有个端口跳跃,这就可以实现了切换端口传输了
frpc里面配置一个代理,使用hysteria2代理,这样frpc的流量就走hysteria2了,然后让hysteria2端口跳跃。
这里跳过frp的安装和具体配置,只讲hysteria2
hysteria2项目地址/下载地址
github地址:https://github.com/apernet/hysteria
本站下载地址【点击下载】
也可以前往资源库搜索hysteria
hysteria2服务端安装与配置
下载服务端
hysteria其实没有区分服务端和客户端的,下载的都是同一个文件,只是启动的时候使用不同的命令启动
打开项目地址
点击顶部的标签
点击app/v.x.x.x
找到适合自己服务器架构的文件,右键,复制链接地址
使用ssh链接到服务器,然后wget命令下载
wget 粘贴刚刚复制的链接
wget https://github.com/apernet/hysteria/releases/download/app%2Fv2.6.2/hysteria-linux-amd64
下载完成后可以使用ls命令查看
根据自己的习惯创建一个文件夹,用来存放hysteria的执行文件,配置文件,例如我习惯自己安装的服务都放在/usr/local目录下
mkdir /usr/local/hysteria
把刚刚下载的文件移动到刚刚创建的文件夹里面,顺便重命名一下
mv hysteria-linux-amd64 /usr/local/hysteria/hysteria
配置服务端
进入刚刚创建的目录
cd /usr/local/hysteria/
使用vim创建一个配置文件,文件名称随意,文件后缀是.yaml
vi config.yaml
然后把下面内容粘贴进去,也可以自己到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
回车
修改hysteria的权限,让hysteria可执行
chmod +x hysteria
配置好了之后,尝试启动一下看看是否成功
./hysteria server -c config.yaml
看到下面这种说明启动成功了,当然端口肯定不一样,配置文件没问题
服务端开机自启
配置文件没有问题,可以正常启动,这时候就可以配置开机自启了
使用下面命令进入服务目录
cd /etc/systemd/system/
然后使用vim创建一个服务文件,文件名为xxx.service
vi hysteria.service
把下面内容粘贴进去,根据自己实际情况把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
使用chmod授权
chmod +x hysteria.service
使用下面命令启动
systemctl start hysteria
使用下面命令重启
systemctl start hysteria
使用下面命令停止
systemctl stop hysteria
使用下面命令设置开机自启
systemctl enable hysteria
服务端配置端口转发
因为hysteria只监听一个端口,所以我们需要使用iptables来做端口转发,把多个端口的流量都转发到hysteria监听的端口,但是注意的是,如果使用了iptables的话,firewall就不能使用了
首先判断自己的系统是否存在iptables,如果返回的是空则没有,需要安装
rpm -qa | grep iptables
下面这个就是有的,无需安装
如果没有,可以使用下面命令安装,如果你的系统使用的不是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
把下面这条规则修改后加进去,记得去云服务器厂商的防火墙里面开放跳跃端口组和监听端口
-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服务监听的端口
然后保存退出,重启服务器或者是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 代理端口
然后使用下面命令测试看看是否可以启动
./hysteria client -c config.yaml
下面这种就是启动成功了
客户端开机自启
和服务端一样,进入服务文件目录
cd /etc/systemd/system/
然后使用vi创建一个服务文件,文件名称为xxx.service
vi hysteria.service
把下面内容修改一下自己存放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
修改hysteria.service文件的权限,让这个文件可执行
chmod +x hysteria.service
使用下面命令启动
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客户端配置文件里面的,修改成你自己的即可
查看frpc是否走代理
直接查看frpc的日志即可
查看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
然后保存,之后和上面一样,使用chmodf +x 文件名称
授权执行权限,然后使用./文件名
称运行
然后访问一下你穿透的内容,在回来看一下显示的端口号会不会变,会的话就跳跃成功了