榴榴杂谈

基于云函数 制作 v2ray 节点监测 自动复活机制

榴榴杂谈 2023-08-28 07:24 出处:网络 作者:爱自由编辑:@榴榴
0. 前记
题主 v2ray 是购买的 aws lightsail 自己搭建的, 3.5 刀一个月.
但是时不时会抽风, ip 被和谐.
因此, 研究了下, 基于云函数制作了 定时监测 以及挂了自动刷新 ip 的脚本,
感觉不错, share 出来

1. 原理
整个流程, 比较简单.
首先云函数用的 阿里云的 python 允函数, 免费额度够用了,
其次监测 是 基于 v2ray 官方的 vmessping 工具实现的.
aws 的服务器有一点好的就是关闭后在启动, 服务区 ip 会变, 所以, 如果 ip 被墙, 重启换个 ip 就又复活了
这里我是每次服务器变更 ip 后, 自动把新 ip 指向我的域名, 我客户端也是直接使用的 域名.
所以当前 v2ray 服务端变更 ip 后, 手机/电脑上的 v2ray 客户端不需要做变更,也可正常使用
流程图 大概如下:

基于云函数 制作 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 云函数触发器

基于云函数 制作 v2ray 节点监测 自动复活机制 


2.3 vmessping
vmessping 这个是 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 的搭建, 其实下次也可出一片文章.
授人以鱼不如授人以渔




0

精彩评论