0. 前记题主 v2ray 是购买的 aws lightsail 自己搭建的, 3.5 刀一个月.
但是时不时会抽风, ip 被和谐.
因此, 研究了下, 基于云函数制作了 定时监测 以及挂了自动刷新 ip 的脚本,
感觉不错, share 出来
1. 原理整个流程, 比较简单.
首先云函数用的 阿里云的 python 允函数, 免费额度够用了,
其次监测 是 基于 v2ray 官方的 vmessping 工具实现的.
aws 的服务器有一点好的就是关闭后在启动, 服务区 ip 会变, 所以, 如果 ip 被墙, 重启换个 ip 就又复活了
这里我是每次服务器变更 ip 后, 自动把新 ip 指向我的域名, 我客户端也是直接使用的 域名.
所以当前 v2ray 服务端变更 ip 后, 手机/电脑上的 v2ray 客户端不需要做变更,也可正常使用
流程图 大概如下:
2. 具体实现2.1 云函数这里我用的阿里云的云函数, region 选的 北京,
必须选大陆的 region, 因为网络请求是在当前region下发起的, 如果选国外, 那么大概率你的梯子永远“健康”...
考虑到篇幅问题, 我把部分 refresh_ec2_ip 函数代码去掉了,其实就是调用 aws 官方接口把自己的实例, 关机在开机.
- # -*- coding: utf-8 -*-
- import logging
- import json
- import os
- import re
- regex = r"([0-9]+) requests made, ([0-9]+) success, total time ([0-9.]+)s"
- AWS_CONFIG = {
- "aws_access_key_id": "xxxx",
- "aws_secret_access_key": "xxxx",
- "region_name": "ap-southeast-1",
- "instanceName": "CentOS-1-V2ray",
- }
- LIGHTSAIL_CLIENT = boto3.client(
- 'lightsail',
- aws_access_key_id=AWS_CONFIG['aws_access_key_id'],
- aws_secret_access_key=AWS_CONFIG['aws_secret_access_key'],
- region_name=AWS_CONFIG['region_name']
- )
- def get_instance_vmess():
- item = LIGHTSAIL_CLIENT.get_instance(
- instanceName=AWS_CONFIG.get('instanceName')
- )
- detail = {
- "v": "2",
- "ps": "爱自由",
- "add": item['instance'].get('publicIpAddress'),
- "port": 3306,
- "id": "xxxx",
- "aid": 2,
- "net": "tcp",
- "type": "none",
- "host": "",
- "path": "",
- "tls": "none"
- }
- return detail, str(base64.b64encode(json.dumps(detail).encode('utf-8')), 'utf-8')
- def handler(event, context):
- logger = logging.getLogger()
- vmess = get_instance_vmess()
- output = os.popen(f'/opt/python/vmessping_amd64_linux -c 3 {vmess}')
- ping_resp = output.read()
- matches = re.search(regex, ping_resp, re.MULTILINE)
- matches.groups()
- matches = re.finditer(regex, ping_resp, re.MULTILINE)
- ping_result = matches.groups()
- if groups[1]=='0':
- refresh_ec2_ip(LIGHTSAIL_CLIENT)
- return ''
2.2 云函数触发器 2.3 vmesspingvmessping 这个是 v2ray 官方二进制程序,
Github Release 页面下载后直接打包进函数代码即可:
用法 : vmessping 'vmess://ew0KI ...'
vmess:// 后面那一串是自己节点信息的json串, 然后执行 base64 得到的.
这个命令 监测返回格式如下:
3 requests made, 3 success, total time 2.618939579s
代表 ping 了 三次, 成功 三次, 耗时 2.61秒, 如果 成功数为0,则检测失败, 我们就可以执行服务器重启的业务逻辑了.
- Vmessping ver[v0.3.4], A prober for v2ray (v2ray-core: 4.23.2)
- Net: tcp
- Addr: xxx.xxx.xxx.xxx
- Port: 3306
- UUID: xxxx
- Type: none
- TLS: none
- PS: xxx
- Ping http://www.google.com/gen_204: seq=1 time=208 ms
- Ping http://www.google.com/gen_204: seq=2 time=235 ms
- Ping http://www.google.com/gen_204: seq=3 time=174 ms
- --- vmess ping statistics ---
- 3 requests made, 3 success, total time 2.618939579s
后记关于 v2ray 的搭建, 其实下次也可出一片文章.
授人以鱼不如授人以渔
赞(40)