Files
2023-04-23 14:50:02 +08:00

211 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# rakshasa
rakshasa是一个使用Go语言编写的强大多级代理工具,专为实现**多级代理**,**内网穿透**而设计。它可以在节点群里面任意两个节点之间转发TCP请求和响应,同时支持**socks5代理**,**http代理**,并且可以**引入外部http、socks5代理池,自动切换请求IP**。
节点之间使用内置证书的TLS加密TCP通讯,再叠加一层自定义秘钥的AES加密,可以在所有Go支持的平台使用。可以在你所有的的Windows和Linux服务器上搭建节点并组成节点群网络。
节点分为普通节点(node)与控制节点(fullnode)
- 普通节点,无法控制其他节点进行代理、shell等操作
- 控制节点,全功能节点
## 项目结构示例和截图
[点击查看更多介绍](./readme/rakshasa项目设计.md)
[win10+Proxifier实现内网穿透](./readme/rakshasa内网穿透--win10+Proxifier使用案例.md)
[rakshasa主被控设计说明](./readme/rakshasa主被控设计说明.md)
## 版本迭代
- **v0.1.0** 2023-03-28
- 首次发布
- **v0.2.0** 2023-04-02
- 更改为fullnode版本,fullnode为全功能版本可以控制别人也能被控
- 增加node版本,去掉私钥,无法发起代理等关键操作,适合被控
- 增加lite版本,在上面版本的基础上,精简cli交互与http代理池,体积缩小2mb
- 优化节点连接逻辑,并且遍历网卡ip进行net.Dail,解决多网卡下,无法连接的问题
- **v0.2.2** 2023-04-08
- 增加http_proxy重连逻辑,节点掉线后重连http代理能够正常重连使用
- 优化节点重连逻辑
- 增加uuid选项,默认uuid使用网卡mac作为随机数种子,进行生成
- **v0.2.3** 2023-04-22
- 优化了连接逻辑,尝试解决连接失败导致nil的bug
- 修改一个map为sync.Map,减少代码上lock的使用量
- 增加了 主控端、被控端说明的md文档
## 编译与使用
生成新的证书,编译所有版本节点
```shell
go run build.go -all
```
编译所有版本节点(不更新证书)
```shell
go run build.go -all -nocert
```
生成覆盖证书
```shell
go run build.go -gencert
```
生成控制节点与普通节点
```shell
go run build.go -fullnode
```
只生成普通节点
```shell
go run build.go -node
```
证书保存在cert目录下,可以使用第三方工具生成,请使用RSA PKCS1-V1.5
```shell
private.go --编译普通节点的时候要删除此文件
private.pem --与public.pem对应的公钥私钥,普通节点不包含私钥
public.pem
server.crt --tls通讯证书
server.key --tls通讯私钥
```
## 版本区别
| | fullnode | node|fullnode_lite|node_lite|
| ---- | ---- |---- |---- |---- |
|连接其他节点 | √ |√ |√ |√ |
|启动本地socks5代理 | √ |√ |√ |√ |
|启动本地http代理 | √ |√ |√ |√ |
|启动多层代理 | √ |× |√ |× |
|远程shell| √ |× |√ |× |
|其他远程功能| √ |× |√ |× |
| 交互式CLI | √ |√ |× |× |
| check_proxy | √ |√ |× |× |
简单来讲
- fullnode 完全版,能控制别人,也能被控
- node 能连接其他节点,但是不能对其他节点操控,适合作为被控端
- lite版本,精简掉cli和net/http,与一些debug的代码
## 使用图示
![image](https://user-images.githubusercontent.com/128351726/226882870-f4f3cbc0-61df-486c-afc0-511d87586402.png)
## 使用方法
### 启动一个带CLI节点
不带任何参数即可启动:
```shell
d:\>rakshasa.exe
start on port: 8883
rakshasa>
rakshasa>help
Commands:
bind 进入bind功能
clear clear the screen
config 配置管理
connect 进入connect功能
exit exit the program
help display help
httpproxy 进入httpProxy功能
new 与一个或者多个节点连接,使用方法 new ip:端口 多个地址以,间隔 如1080 127.0.0.1:1081,127.0.0.1:1082
ping ping 节点
print 列出所有节点
remoteshell 远程shell
remotesocks5 进入remotesocks5功能
shellcode 执行shellcode
socks5 进入socks5功能
rakshasa>
```
请查阅[CLI使用说明](./readme/cli.md)了解详细信息
## 其他启动参数说明
### -nocli
在无法后台执行的情况下,启动一个不带 CLI 的节点:
```shell
nohup /root/rakshasa -nocli > /root/rakshasa.log 2>&1 &
#Linux下配合nohup后台执行
```
### -p 端口
以指定端口启动:
```shell
rakshasa -p 8883
```
### -d ip:port,ip:port...
连接下一层代理或更多层代理,多个地址以逗号隔开,生效在最后一个 ip:port:
```shell
rakshasa -d 192.168.1.1:8883,192.168.1.2:8883,192.168.1.3:8883 -socks5 1080
#从本地1080端口启动一个socks5代理,流量通过三层转发ip最后在192.168.1.3请求目标数据
```
### -socks5 用户名:密码@ip:端口
本地开启SOCKS5代理穿透到远程节点,可以不带-d:
```shell
rakshasa -socks5 1080
#不使用-d参数,则表示直接在本机启动一个socks5代理
```
### -remotesocks5 端口
远程开启SOCKS5代理流量出口到本地:
```shell
rakshasa -remotesocks5 1081 -d 192.168.1.2:1080,192.168.1.3:1080
#方向从右往左(加上本机是3个节点),在192.168.1.3这台机器开启一个socks5端口1081,流量穿透到本地节点出去
```
### -connect ip:port,remote_ip:remote_port
本地监听并转发到指定 IP 端口,使用场景为本机连接 teamserver,隐藏本机 IP
```shell
rakshasa -connect 127.0.0.1:50050,192,168,1,2:50050 -d 192.168.1.3:1080,192.168.1.4:1080
#本机cs连接127.0.0.1:50050实际上通过1.3,1.4节点后,再连接到192.168.1.2:50050 teamserverteamserver看到你的ip是最后一个节点的ip
```
### -bind ip:port,remote_ip:remote_port
反向代理模式,必须配合-d使用:
```shell
rakshasa -bind 192.168.1.2:50050,0,0,0.0:50050 -d 192.168.1.3:1080,192.168.1.4:1080
#与上面相反,在最右端节点监听端口50050,流量到本机节点后,最终发往192.168.1.2,最终上线ip为本机ip
```
### -http_proxy 用户名:密码@ip:端口
启动一个http代理,可以不使用-d,建议配合-http_proxy_pool使用代理池,自动切换代理ip:
```shell
rakshasa -http_proxy 8080 -http_proxy_pool out.txt
```
### -password 密钥
各节点除了证书校验之外,还额外支持密钥连接,建议使用并定期更换密钥,以避免二进制泄露后被别人连上
```shell
rakshasa -password 123456
```
### -f yaml文件 [详细说明](./readme/config.md)
指定配置文件启动。
### -help
更多启动参数使用帮助
## 关于开源
本作品使用MPL 2.0许可证,您可以下载、修改和使用本代码。然而,您必须明确表示,任何此类担保、支持、赔偿或责任义务均由您单独提供,与本作者无关。本人不承担您在使用或修改本程序所造成的任何后果或责任。
在遵循MPL 2.0许可证的基础上,您可以自由地对rakshasa进行修改和扩展,以满足您的特定需求。同时,您可以将改进和新功能贡献给社区,让更多人受益。但请注意,确保在分享和发布修改后的代码时遵守许可证要求,并尊重原作者的版权。
## 联系方式
联系我加入微信群聊
QQ: 2252233695
WeChat/微信: Mob20045