建一个socks5代理集群
背景
由于在线工具中部分工具有翻墙的需求,而又没有找到一个稳定的翻墙方案(支持集群),在此背景下产生了这个项目。
架构图
功能点
- 多账户支持, socks5密码验证
- 可用性,集群保证
- 流量计算,阈值限制
- Custom DNS, 可进行域名白名单的控制
- 安全,防止暴力破解socks5密码
表设计
CREATE TABLE `pre_accounts` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`accountname` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`password` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`used` int(10) unsigned NOT NULL DEFAULT '0',
`max` int(10) unsigned NOT NULL DEFAULT '0',
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_accountname` (`accountname`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Socks5的基础知识
这里就不重复写了,链接到 一个简单的Golang实现的Socks5 Proxy
功能点的实现
多账户支持, socks5密码验证
实现 github.com/armon/go-socks5/credentials.go
CredentialStore
接口,进行校验;注意:每次proxy都会进行验证,如果请求量比较大,自行选择缓存方式
可用性,集群保证
每台socks5 server心跳上报到etcd,通过阈值,判断socks5的存活
流量计算,阈值限制
github.com/armon/go-socks5/request.go:358
修改这个函数的调用函数
安全,防止暴力破解socks5密码
使用 ratelimit 来保证,如果错误次数过多,则直接将IP加入黑名单;原理可以看之前写过的一篇文章 使用 redis 做限流
站长能推荐几款免备案的vps吗 速度快的 谢谢你啦