Git Product home page Git Product logo

v2raypool's Introduction

简介

  • 同时接入多个v2ray节点,使用多个本地端口,组成简单的IP代理池服务。可供爬虫等程序调用。

  • 可以选一个节点设为系统代理,作为普通的v2ray客户端使用。

  • 提供通用gRPC控制接口,参看数据定义文件 v2raypool.proto

项目文档: https://iotames.github.io/v2raypool/

用户界面

提供 gRPC接口Web网页 两种交互方式。

代理池节点列表: WebUI面板1

v2ray服务进程列表: WebUI面板2

Windows代理设置: 网络和Internet -> 代理 -> 手动设置代理

使用说明

不想自己编译项目源码,可下载Release压缩包直接使用,再看第4-5步的使用说明。

1. 下载依赖

运行命令: go mod tidy

1.1 如因网络问题下载失败,可设置模块代理。运行命令:

go env -w GOPROXY=https://goproxy.cn,direct
# 或者 go env -w GOPROXY=https://goproxy.io,direct

1.2 若出现依赖包版本冲突,请删除 go.mod 文件,再运行命令:

go mod init github.com/iotames/v2raypool
go mod tidy

2. 编译可执行文件

2.1 编译

# 进入项目 main 目录,并执行go编译命令
cd main

# linux或mac 运行: go build -o v2raypool -trimpath -ldflags "-s -w -buildid=" .
go build -o v2raypool.exe -trimpath -ldflags "-s -w -buildid=" .

编译出二进制可执行文件 v2raypool(linux or max) 或 v2raypool.exe(windows)

2.2 生成配置文件

命令行运行可执行文件(v2raypool.exe 或 ./v2raypool),会生成配置文件 .env。并提示找不到v2ray核心文件:

v2raypool.exe
请检查配置文件,路径:(.env)
VP_V2RAY_PATH 配置项错误,找不到可执行文件。
请下载v2ray核心文件(https://github.com/v2fly/v2ray-core/releases)

3. 下载v2ray核心文件

3.1 官网下载核心文件Zip压缩包: https://github.com/v2fly/v2ray-core/releases

3.2 解压到 main/bin 目录,并删除或改名解压后的 config.json 文件,防止程序错误读取。

3.3 检查或修改v2ray 可执行文件路径: 查看 .env 配置文件的 VP_V2RAY_PATH 配置项。

4. 设置订阅地址

设置代理节点的订阅源地址,请更改 .env 文件的 VP_SUBSCRIBE_URL 配置项,配置值为http网络地址。

若网络地址访问异常,可使用 VP_SUBSCRIBE_DATA_FILE 配置项。设法查看订阅地址的响应结果,保存到文件 subscribe_data.txt

5. 运行服务端和客户端

5.1 服务端

可执行文件直接运行,会启动 gRPCWebUI 服务端。 首次运行,会自动生成 .envdefault.env 配置文件。

# linux 或 mac 执行 ./v2raypool
v2raypool.exe

5.2 客户端

gRPC 客户端交互命令:

# 启动v2ray代理池,激活所有代理节点。
v2raypool.exe --startproxynodes

# 查看v2ray代理池信息(包括:本地代理端口号,测速结果,运行状态,测速时间,节点名,节点索引)
v2raypool.exe --getproxynodes

# 临时设置默认的URL测速地址。默认为 .env 文件中 VP_TEST_URL 配置项的值。
v2raypool.exe --setproxytesturl

# 测速(测速基准使用https://www.google.com)。测速结束后,会自动选择最快的节点作为系统代理节点。
v2raypool.exe --testproxynodes

# 指定已测速过的域名,按速度从快到慢,查看代理节点信息
v2raypool.exe --getproxynodesbydomain=www.google.com

# 根据索引值激活某个节点为系统代理的端口(--getproxynodes 命令可查看索引值,系统代理端口从VP_HTTP_PROXY的值读取)
v2raypool.exe --activeproxynode=16

# 更新订阅。更新节点的同时,也会更新 subscribe_data.txt 数据文件
v2raypool.exe --updateproxynodes

# 停止所有节点
v2raypool.exe --stopproxynodes

WebUI 网页面板: http://127.0.0.1:8087. windows 环境下网页会自动打开。

6. Linux配置systemd系统服务(可选)

Linux平台通过配置 v2raypool.service ,可使用 systemctl 系统命令来管理 v2raypool。 可使用环境变量 VP_ENV_FILE 定义配置文件的路径。不设置默认为 .env

  1. 新建 v2raypool.service 文件:
vim /usr/lib/systemd/system/v2raypool.service

v2raypool.service内容示例(/root/v2raypool/main 为可执行文件所在路径):

[Unit]
Description=v2ray proxy pool
After=network.target

[Service]
WorkingDirectory=/root/v2raypool/main
ExecStart=/root/v2raypool/main/v2raypool
User=root
Restart=on-failure
RestartSec=300
# KillSignal=SIGQUIT
TimeoutStopSec=10
StandardOutput=file:/root/v2raypool/main/output.log
StandardError=file:/root/v2raypool/main/output.err.log

[Install]
WantedBy=multi-user.target
  1. 重载systemd配置
systemctl daemon-reload
  1. 使用 systemctl 管理v2raypool的gRPC服务端
systemctl status v2raypool
systemctl start v2raypool
systemctl stop v2raypool

配置说明

main 目录编译生成可执行文件,首次运行会生成2个文件:

  • default.env: 显示所有配置项的默认值,不应修改此文件。
  • .env: 程序配置文件。更改后可覆盖 default.env 文件中的默认值。
# 该目录存放程序运行时产生的文件
VP_RUNTIME_DIR = "runtime"

# 傻瓜模式。当配置满足条件时,应用启动后,自动运行所有节点,执行测速,并设置速度最快的节点为系统代理。
# 适合打包现成的配置和应用,直接分享给小白用。
VP_AUTO_START = true

# Web服务器端口。设置为0可禁用Web面板
VP_WEB_SERVER_PORT = 8087

# 代理池的gRPC服务端口
VP_GRPC_PORT = 50051

# v2ray可执行文件路径
# 例: "D:\\Users\\yourname\\v2ray-windows-64\\v2ray.exe" or "/root/v2ray-linux64/v2ray"
VP_V2RAY_PATH = "bin/v2ray.exe"

# 代理节点订阅地址
# 支持 http:// 和 socks5:// 协议
VP_SUBSCRIBE_URL = ""

# 若订阅地址无法直接访问,可指定订阅数据文件,数据文件内容为访问订阅地址获取的原始数据。
# 若有设置订阅数据文件,且文件内容不为空。则优先从该文件读取订阅节点信息。
VP_SUBSCRIBE_DATA_FILE = "subscribe_data.txt"

# 设置HTTP代理,代理池每个节点的本地端口号,往后开始累加。为防止与常用端口冲突,尽量设大点。
VP_HTTP_PROXY = "http://127.0.0.1:30000"

# 节点测速的URL
VP_TEST_URL = "https://www.google.com"

订阅节点

已支持的出站协议

出站协议 订阅数据格式 是否支持
vmess:// base64
ss:// base64
trojan:// -
ssr:// -
  • ✅ 已支持
  • ⛏️ 开发中
  • ❌ 不支持

订阅数据格式

  1. VP_SUBSCRIBE_URL: 订阅源的地址配置。填写 http 开头的URL网址。

  2. 订阅数据: 访问订阅源的URL地址得到的原始数据。数据可能被BASE64编码过,可保存为 subscribe_data.txt 文件,并配置 VP_SUBSCRIBE_DATA_FILE 选项。

订阅数据 经过 base64解码 后,得到以 \n 换行符分割的多个代理节点信息。

每个节点信息,可能都被Base64编码过(vmess://),也可能是明文(vless://),或者二者混合(ss://)。如下所示:

vmess://eyJhZGQiOiAiMjAyLjc4LjE2Mi41IiwgImFpZCI6IDAsICJob3N0IjogImlyc29mdC5zeXRlcy5uZXQiLCAiaWQiOiAiMmZmOTdjNmQtODU1Ny00MmE0LWI0M2YtMTljNzdjNTk1OWVhIiwgIm5ldCI6ICJ3cyIsICJwYXRoIjogIi9AZm9yd2FyZHYycmF5IiwgInBvcnQiOiA0NDMsICJwcyI6ICJnaXRodWIuY29tL2ZyZWVmcSAtIFx1NTM3MFx1NWVhNiAgMiIsICJ0bHMiOiAidGxzIiwgInR5cGUiOiAiYXV0byIsICJzZWN1cml0eSI6ICJhdXRvIiwgInNraXAtY2VydC12ZXJpZnkiOiB0cnVlLCAic25pIjogIiJ9
vless://[email protected]:443?encryption=none&security=reality&sni=azure.microsoft.com&fp=safari&pbk=c7qU9-_0WflwIKUiZFxSss_xw-2AP3jB1ENxKLI0OTw&type=tcp&headerType=none#u9un-US-Xr1
ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTozNlpDSGVhYlVTZktqZlFFdko0SERW@185.242.86.156:54170#github.com/freefq%20-%20%E4%BF%84%E7%BD%97%E6%96%AF%20%201
ss://[email protected]:40368#github.com/freefq%20-%20%E6%B3%A2%E5%85%B0%20%205
vmess://eyJhZGQiOiAic2VydmVyMzEuYmVoZXNodGJhbmVoLmNvbSIsICJhaWQiOiAwLCAiaG9zdCI6ICJzZXJ2ZXIzMS5iZWhlc2h0YmFuZWguY29tIiwgImlkIjogIjQxNTQxNDNjLWJiYmEtNDdhNC05Zjc5LWMyZWQwODdjYmNjOSIsICJuZXQiOiAid3MiLCAicGF0aCI6ICIvIiwgInBvcnQiOiA4ODgwLCAicHMiOiAiZ2l0aHViLmNvbS9mcmVlZnEgLSBcdTdmOGVcdTU2ZmRDbG91ZEZsYXJlXHU1MTZjXHU1M2Y4Q0ROXHU4MjgyXHU3MGI5IDYiLCAidGxzIjogIiIsICJ0eXBlIjogImF1dG8iLCAic2VjdXJpdHkiOiAiYXV0byIsICJza2lwLWNlcnQtdmVyaWZ5IjogdHJ1ZSwgInNuaSI6ICIifQ==
  1. 由于协议不支持,数据格式不兼容,等原因造成的节点解析失败,都会被忽略,然后继续解析下个节点。

  2. vmess 节点信息再次经过 BASE64解码 后,解析为JSON字符串格式。如下所示:

{"add":"us0.xxx.top","host":"","id":"93EA57CE-EA21-7240-EE7F-317F4A6A8B65","net":"ws","path":"","port":"444","ps":"xxx-v2-US-LosAngeles0","tls":"","type":"none","v":2,"aid":0}

调试工具

路由规则

支持自定义域名和IP列表配置:

  • PROXY_DOMAIN_LIST 代理域名列表
  • DIRECT_DOMAIN_LIST 直连域名列表
  • PROXY_IP_LIST 代理IP列表
  • DIRECT_IP_LIST 直连IP列表

域名匹配规则:

  • 纯字符串:当此字符串匹配目标域名中任意部分,该规则生效。比如 sina.com 可以匹配 sina.comsina.com.cnsina.companywww.sina.com,但不匹配 sina.cn
  • 正则表达式:由 regexp: 开始,余下部分是一个正则表达式。当此正则表达式匹配目标域名时,该规则生效。例如 regexp:\.goo.*\.com$ 匹配 www.google.comfonts.googleapis.com,但不匹配 google.com
  • 子域名(推荐):由 domain: 开始,余下部分是一个域名。当此域名是目标域名或其子域名时,该规则生效。例如 domain:v2ray.com 匹配 www.v2ray.comv2ray.com,但不匹配 xv2ray.com
  • 完整匹配:由 full: 开始,余下部分是一个域名。当此域名完整匹配目标域名时,该规则生效。例如 full:v2ray.com 匹配 v2ray.com 但不匹配 www.v2ray.com
  • 预定义域名列表:由 geosite: 开头,余下部分是一个类别名称(域名列表),如 geosite:google 或者 geosite:cn。名称及域名列表参考预定义域名列表
  • 从文件中加载域名:形如 ext:file:tag,必须以 ext: 开头,后面跟文件名和标签,文件存放在资源目录中,文件格式与 geosite.dat 相同,标签必须在文件中存在。

IP匹配规则:

  • IP:形如 127.0.0.1
  • CIDR:形如 10.0.0.0/8
  • GeoIP: 形如 geoip:cn 为正向匹配,即为匹配「**大陆 IP 地址」。后面跟双字符国家或地区代码,支持所有可以上网的国家和地区。

形如 geoip:!cn 为反向匹配,即为匹配「非**大陆 IP 地址」。后面跟双字符国家或地区代码,支持所有可以上网的国家和地区。

特殊值:geoip:private(V2Ray 3.5+),包含所有私有地址,如 127.0.0.1

  • 从文件中加载 IP: 形如 ext:file:tagext-ip:file:tag 为正向匹配,即为匹配 「tag 内的 IP 地址」。

形如 ext:file:!tagext-ip:file:!tag 为反向匹配,即为匹配「非 tag 内的 IP 地址」。

必须以 ext:ext-ip: 开头,后面跟文件名、标签!标签,文件存放在资源目录中,文件格式与 geoip.dat 相同,标签必须在文件中存在。

具体请参看 v2ray路由规则

开发相关

gRPC接口

  1. 使用proto数据格式定义文件: ./v2raypool.proto 可实现跨语言调用
  2. Go语言的gRPC接口文件位于 ./grpc 目录。引用包名: github.com/iotames/v2raypool/grpc
  3. 调用过程参考代码文件: ./main/main_grpc.go
# 从proto数据格式文件生成可供Go语言调用的代码包
protoc --go_out=./ --go-grpc_out=./ v2raypool.proto

v2raypool's People

Contributors

iotames avatar yzqzss avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

v2raypool's Issues

WEB面板中,一直显示不出来节点

你好,.env 中改好v2ray路径和订阅连接后 打开软件,subscribe_data.txt 获取原始数据成功,网页面板中获取不到节点信息。
是哪个环节出问题了?

image

1710596031119

启动代理池时报错

http: panic serving 127.0.0.1:1234: dot not support tcp only support ws or websocket

单独设置代理是可以的。windows 系统。

几个使用上的问题

1,如果订阅源是txt
比如
http://127.0.0.1/socks5.txt
内容为
socks5://8.8.8.8:1080
socks5://9.9.9.9:1080
这样是否能做到。
2,会考虑多个订阅源吗?
3,会考虑加入http以及https代理作为池子节点吗
感谢开发者开发出这么好的软件。

提示出现‘fork/exec bin/v2ray.exe: exec format error’

节点可以解析出来。

在webui中,占击启动单个节点,会出现‘fork/exec bin/v2ray.exe: exec format error’错误。

如果占击表头上方的‘启动’,命令行中会给出:

 error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:15492: connect: connection refused")

感觉是权限或者端口设置上有问题?

删除选定的代理

有些代理无法正常运行,因此我们需要将其删除。最简单的方法是从用户界面 (UI) 中选择并删除它们。这是一个前端修改,比删除所有代理、删除损坏的代理和修改整个“subscribe_data.txt”要好。

最后,我们应该跳过任何死的或损坏的代理,因为它们可能会导致整个脚本停止并导致错误。

"("500错误
rpc error: code = Unknown desc = app/proxyman/inbound: failed to listen TCP on 30001 > transport/internet: failed to listen on address: 0.0.0.0:30001 > transport/internet/tcp: failed to listen TCP on 0.0.0.0:30001 > listen tcp 0.0.0.0:30001: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.")"

---ParseV2rayNodesErr--(0)--err(parseNodeInfo err(json: cannot unmarshal number into Go struct field V2rayNode.Port

I use subscribe_data.txt, the subscription address inside is the address in the format provided by your "README":

vmess://eyJhZGQiOiAiMjAyLjc4LjE2Mi41IiwgImFpZCI6IDAsICJob3N0IjogImlyc29mdC5zeXRlcy5uZXQiLCAiaWQiOiAiMmZmOTdjNmQtODU1Ny00MmE0LWI0M2YtMTljNzdjNTk1OWV hIiwgIm5ldCI6ICJ3cyIsICJwYXRoIjogIi9AZm9yd2FyZHYycmF5IiwgInBvcnQiOiA0NDMsICJwcyI6ICJnaXRodWIuY29tL2ZyZWVmcSAtIFx1NTM3MFx1NWVhNiAgMiIsICJ0bHMiOiAidGxzIi wgInR5cGUiOiAiYXV0byIsICJzZWN1cml0eSI6ICJhdXRvIiwgInNraXAtY2VydC12ZXJpZnkiOiB0cnVlLCAic25pIjogIiJ9
vless://[email protected]:443?encryption=none&security=reality&sni=azure.microsoft.com&fp=safari&pbk=c7qU9-_0WflwIKUiZFxSss_xw-2AP3jB1ENxKLI0OT w&type=tcp&headerType=none#u9un-US-Xr1
ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTozNlpDSGVhYlVTZktqZlFFdko0SERW@185.242.86.156:54170#github.com/freefq%20-%20%E4%BF%84%E7%BD%97%E6%96%AF%20%201
ss://[email protected]:40368#github.com/freefq%20-%20%E6%B3%A2%E5%85%B0%20%205
vmess://eyJhZGQiOiAic2VydmVyMzEuYmVoZXNodGJhbmVoLmNvbSIsICJhaWQiOiAwLCAiaG9zdCI6ICJzZXJ2ZXIzMS5iZWhlc2h0YmFuZWguY29tIiwgImlkIjogIjQxNTQxNDNjLWJiYmEt NDdhNC05Zjc5LWMyZWQwODdjYmNjOSIsICJuZXQiOiAid3MiLCAicGF0aCI6ICIvIiwgInBvcnQiOiA4ODgwLCAicHMiOiAiZ2l0aHViLmNvbS9mcmVlZnEgLSBcdTdmOGVcdTU2ZmRDbG91ZEZsYXJ lXHU1MTZjXHU1M2Y4Q0ROXHU4MjgyXHU3MGI5IDYiLCAidGxzIjogIiIsICJ0eXBlIjogImF1dG8iLCAic2VjdXJpdHkiOiAiYXV0byIsICJza2lwLWNlcnQtdmVyaWZ5IjogdHJ1ZSwgInNuaSI6ICIifQ ==

Then perform base64 results at https://base64.us/. The v2ray-core used is the latest version v5.15.1, but the error is reported as follows:

v2raypool.exe
------LoadEnv--env-files([.env default.env])
---Begin---parseSubscribeByRaw---
-----Begin--ParseV2rayNodes-------

---ParseV2rayNodesErr--(0)--err(parseNodeInfo err(json: cannot unmarshal number into Go struct field V2rayNode.Port of type string) for vmess json Unmarshal({"add": "202.78.162.5", "aid": 0, "host": "irsoft.sytes.net", "id": "2ff97c6d-8557-42a4-b43f-19c77c5959ea", "net": "ws", "path": "/@FORWARDV2RAY", "port": 443, "ps": "github.com/freefq - \u5370\u5ea6 2", "tls": "tls", "type": "auto", "security": "auto", "skip-cert-verify": true, "sni": ""}))---RAW(vmess://eyJhZGQiOiAiMjAyLjc4LjE2Mi41IiwgImFpZCI6IDAsICJob3N0IjogImlyc29mdC5zeXRlcy5uZXQiLCAiaWQiOiAiMmZmOTdjNmQtODU1Ny00MmE0LWI0M2YtMTljNzdjNTk1OWVhIiwgIm5ldCI6ICJ3cyIsICJwYXRoIjogIi9AZm9yd2FyZHYycmF5IiwgInBvcnQiOiA0NDMsICJwcyI6ICJnaXRodWIuY29tL2ZyZWVmcSAtIFx1NTM3MFx1NWVhNiAgMiIsICJ0bHMiOiAidGxzIiwgInR5cGUiOiAiYXV0byIsICJzZWN1cml0eSI6ICJhdXRvIiwgInNraXAtY2VydC12ZXJpZnkiOiB0cnVlLCAic25pIjogIiJ9)

---ParseV2rayNodesErr--(1)--err(protocol not support vless)---RAW(vless://[email protected]:443?encryption=none&security=reality&sni=azure.microsoft.com&fp=safari&pbk=c7qU9-_0WflwIKUiZFxSss_xw-2AP3jB1ENxKLI0OTw&type=tcp&headerType=none#u9un-US-Xr1)

---ParseV2rayNodesErr--(2)--err(protocol not support ss)---RAW(ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTozNlpDSGVhYlVTZktqZlFFdko0SERW@185.242.86.156:54170#github.com/freefq%20-%20%E4%BF%84%E7%BD%97%E6%96%AF%20%201)

---ParseV2rayNodesErr--(3)--err(protocol not support ss)---RAW(ss://[email protected]:40368#github.com/freefq%20-%20%E6%B3%A2%E5%85%B0%20%205)

Please check the reason.

ss节点导入不显示或者没有用

如题,节点信息一起以base64的的格式写在配置里,其中trojan节点正常导入了,所有的ss节点全部没有显示(节点信息是一起从v2rayN中导出的),作者如果有测试的需要可以联系我提供节点信息

Good Jobs~~!

This is the function I have always wanted. I have tested it and will make suggestions.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.