Contents
一、写脚本的理由
搬瓦工机器被盯上,流量稍大就被封端口。最短封禁时间不到一天,手动换端口很麻烦。
在 ChatGpt 的帮助下,写了一个定时脚本,每半个小时更新 V2ray 与 Clash 配置。当然,不止搬瓦工,其他主机商比如Vultr也可以如法炮制。
虽然实际结果是不如ipv6稳……
二、Linux自动校准时间
不管是 v2 还是的自动脚本,都要求系统时间准确,所以需要设置一下自动校准时间。
用的是 systemd 自带的时间同步服务。
# 编辑设置文件:
sudo nano /etc/systemd/timesyncd.conf
# 修改时间服务器部分如下
[Time]
NTP=time.google.com ntp.aliyun.com ntp.ntsc.ac.cn 0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
FallbackNTP=0.pool.ntp.org 1.pool.ntp.org 0.fr.pool.ntp.org 0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
# 时间同步服务开机启动,并立即启动:
sudo systemctl --now enable systemd-timesyncd
# 查看时间同步服务状态
sudo systemctl status systemd-timesyncd
三、自动换端口的bash脚本
#!/bin/bash
# 端口数组,后三位,随便敲
port_array=(610 991 202 443 224 505 216 637 208 209 150 101 902 133 904 155 706 107 538 229 500 431 550 663 504 805 804 497 758 519)
# 获取当前小时数,减号的作用是去掉前导的 0(09 =» 9)
hour=$(date +%-H)
# 计算当前半小时段
if [ $(date +%-M) -lt 30 ]; then
index=$((hour * 2))
else
index=$((hour * 2 + 1))
fi
echo "候补IP: 23${port_array[@]}"
echo "候补IP数: ${#port_array[@]}"
# 获取当前需要使用的端口
port=${port_array[$index % ${#port_array[@]}]}
# 打印新端口
echo "New port = 23"$port
# 停止 v2ray 服务
systemctl stop v2ray
# 更改 v2ray 服务端口。端口初始值,需要是23XXX
sed -i "s/\"port\": 23[0-9]\+/\"port\": 23$port/" /usr/local/etc/v2ray/config.json
# 重新启动 v2ray 服务
systemctl start v2ray
# 更改 clash 订阅文件里的端口,端口初始值,需要是23XXX
sed -i "s/port: 23[0-9]\+/port: 23$port/" /home/user/config.yaml
解释一下脚本的含义
1. port_array 定义了所允许的端口数组的后三位(为了不影响其他配置的端口,限定为23开头的五位数)。
2. hour 使用 date +%-H 获取当前小时数。
3. 计算出当前半小时段:如果当前分钟数小于 30,使用当前小时数 * 2 作为半小时段的索引,否则使用当前小时数 * 2 + 1 作为索引。
4. 使用 % 运算符循环地选出使用的端口。
5. 使用 sed 更改 v2ray 配置文件中的端口号。
6. 停止和重新启动 v2ray 服务以应用更改。同时更新clash订阅文件里的端口。
四、定时运行脚本
使用Linux 的 cron 任务,让脚本每半小时运行一次,自动更改端口。在终端中输入 crontab -e 打开您的 crontab 编辑器。在文件末尾添加以下行:
0,30 * * * * /usr/bin/bash /path/to/change-port-script.sh
当然,不要忘记启动定时任务:
systemctl enable --now cronie.service
# or
systemctl enable --now cron.service
五、Clash 订阅设置
手机端的Clash for Android ,设置每30分钟更新一次设置,然后在1分或31分手动更新一次即可。
PC端的Clash For Windows,可以使用 cron 更新订阅。在对应的 Profile 文件上右键,点Settings,然后在“Update Cron”下面的文本框里贴入如下内容,就可以在1分与31分自动更新。
1,31 * * * *
文章评论