基本框架
主要功能
利用VPS宽带拨号获取的公网IP提供代理IP服务.
插件运行后,一旦VPS连接网络,主动连接至服务端,服务端存储IP地址,宽带账号,上线时间,MAC地址,VPS名称信息,省份,城市,服务器节点名称;
然后由服务端通过多个端口转发到具体的VPSIP地址,即:隧道代理
如服务端公网IP:1.1.1.1
代理IP:1.1.1.1:10001-->指向其中一个VPS的IP地址:111.111.111.1
代理IP:1.1.1.1:10002-->指向其中一个VPS的IP地址:111.111.112.2
客户使用必须使用白名单才允许访问。
信息收集/编辑/API
- 收集VPS的信息 并存储字段如下 | IP地址 | VPS名称 | 拨号口MAC | 宽带账号 | 省份 | 城市 | 上线时间 | 离线时间 | 代理端口 | 最大速率 | 是否活跃 | | —- | —- | —- | —- | —- | —- | —- | —- | —- | —- | —- | | ipAddr | vpsname | mac | adslname | province | city | conntime | disctime | proxyPort | rateLimit | active |
注意:
情况1,如果VPS宽带重拨直接更新数据库对应的IP地址即可。
情况2,如果VPS更换了宽带,则更新数据库对应的宽带账号
情况3,如获取省份城市VPS名称时被访问的API可能会压力过大,因为有些VPS拨号的频率太大。
- 提供API用于设定某一台VPS所获取IP地址的最大可利用的速率。(字段参数自定)
- 提供API用于删除某一个IP地址(VPS)(字段参数自定)
提供API用于获取可用的IP地址,如province=12&count=100 则返回省份为12的可用IP地址+端口,数量100个
如province=0&count=100 则随机返回100个可用IP地址,如province=12&city=2&count=100 则返回 指定城市的100个可用IP。
数据返回格式:
1.1.1.1:10001
1.1.1.1:10003
1.1.1.1:10010~~执行任意命令行命令: ~~(取消)
- 提供API用于(卸载/停止)/重启客户端服务(之前本打算执行自定义命令来停止或者卸载客户端)(字段参数自定)
- VPS离线时,标记对应数据库IP地址不可用
提供白名单添加API
数据库存储白名单 字段至少包含如下:
网站用户名 | 白名单IP | 添加时间 | 失效时间 | 添加人 | 添加人的IP地址 | 编辑时间 |
---|---|---|---|---|---|---|
username | whiteip | addtime | expiertime | admin | opipaddr | edittime |
- 提供API用地修改白名单IP(字段参数自定)
- 提供API用于删除白名单(字段参数自定)
- 客户端生成的访问日志发送到ELK
日志发送协议使用TCP 如tcp:XXX.LOG.CN:5555 直接发送JSON数据即可;(真实地址稍晚提供)
字段如下:
日志类型(固定值) | 用户地址(IP+端口) | 宽带地址(IP+端口) | 访问的目的IP+端口/URL | 宽带拨号设备MAC地址 | 系统版本/windows/linux | 时间戳(2020-05-06 23:00:02) |
---|---|---|---|---|---|---|
type | userAddr | adslAddr | targetAddr | mac | os | timestamp |
{
"type":"proxy-log", //固定字段,固定值,不能修改
"userAddr":"114.104.173.66:2365",
"adslAddr":"2.2.2.2:5565",
"targetAddr":"https://www.baidu.com",
"timestamp":"2022-05-16 23:20:20",
"mac":"00:11:22:33:55:66",
"os":"linux"
}
注意:每一条发送的日志JSON字符串末尾加上换行符”\r\n”