Giter Club home page Giter Club logo

rakshasa's Introduction

rakshasa

rakshasa是一个使用Go语言编写的强大多级代理工具,专为实现多级代理内网穿透而设计。它可以在节点群里面任意两个节点之间转发TCP请求和响应,同时支持socks5代理http代理,并且可以引入外部http、socks5代理池,自动切换请求IP

节点之间使用内置证书的TLS加密TCP通讯,再叠加一层自定义秘钥的AES加密,可以在所有Go支持的平台使用。可以在你所有的的Windows和Linux服务器上搭建节点并组成节点群网络。

节点分为普通节点(node)与控制节点(fullnode)

  • 普通节点,无法控制其他节点进行代理、shell等操作
  • 控制节点,全功能节点

项目结构示例和截图

点击查看更多介绍

win10+Proxifier实现内网穿透

rakshasa主被控设计说明

版本迭代

  • 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文档

编译与使用

生成新的证书,编译所有版本节点

go run build.go -all

编译所有版本节点(不更新证书)

go run build.go -all -nocert

生成覆盖证书

go run build.go -gencert

生成控制节点与普通节点

go run build.go -fullnode

只生成普通节点

go run build.go -node

证书保存在cert目录下,可以使用第三方工具生成,请使用RSA PKCS1-V1.5

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

使用方法

启动一个带CLI节点

不带任何参数即可启动:

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使用说明了解详细信息

其他启动参数说明

-nocli

在无法后台执行的情况下,启动一个不带 CLI 的节点:

nohup /root/rakshasa -nocli > /root/rakshasa.log 2>&1 &
#Linux下配合nohup后台执行

-p 端口

以指定端口启动:

rakshasa -p 8883

-d ip:port,ip:port...

连接下一层代理或更多层代理,多个地址以逗号隔开,生效在最后一个 ip:port:

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:

rakshasa -socks5 1080 
#不使用-d参数,则表示直接在本机启动一个socks5代理

-remotesocks5 端口

远程开启SOCKS5代理流量出口到本地:

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:

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 teamserver,teamserver看到你的ip是最后一个节点的ip

-bind ip:port,remote_ip:remote_port

反向代理模式,必须配合-d使用:

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:

rakshasa -http_proxy 8080 -http_proxy_pool out.txt

-password 密钥

各节点除了证书校验之外,还额外支持密钥连接,建议使用并定期更换密钥,以避免二进制泄露后被别人连上

rakshasa -password 123456

-f yaml文件 详细说明

指定配置文件启动。

-help

更多启动参数使用帮助

关于开源

本作品使用MPL 2.0许可证,您可以下载、修改和使用本代码。然而,您必须明确表示,任何此类担保、支持、赔偿或责任义务均由您单独提供,与本作者无关。本人不承担您在使用或修改本程序所造成的任何后果或责任。

在遵循MPL 2.0许可证的基础上,您可以自由地对rakshasa进行修改和扩展,以满足您的特定需求。同时,您可以将改进和新功能贡献给社区,让更多人受益。但请注意,确保在分享和发布修改后的代码时遵守许可证要求,并尊重原作者的版权。

联系方式

联系我加入微信群聊

QQ: 2252233695

WeChat/微信: Mob20045

rakshasa's People

Contributors

mob2003 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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rakshasa's Issues

节点连接失败

image

image

两个虚拟机防火墙均已关闭,在节点时提示超时,这种是什么原因呢?是不是我操作有什么问题?

remoteSocks5启动失败 time out

服务端启动,然后客户端发来 remotesocks5

./rakshasa_fullnode_amd64_linux
start on  :8883
rakshasa>fromto <uuid1> 00000000-0000-0000-0000-000000000000 CMD_REG 157
client收到 CMD_REG
write <uuid2>  CMD_REG_RESULT 1580
nodeMap2 <uuid1> 0xc000242180
writeto <uuid1> 1580
writeto <uuid1> 1545
fromto <uuid1> <uuid2> CMD_GET_NODE 42
fromto <uuid1> <uuid2> CMD_GET_NODE_RESULT
6
client收到 CMD_GET_NODE
client收到 CMD_GET_NODE_RESULT
write <uuid2> <uuid1> CMD_GET_NODE_RESULT 1
47
writeto <uuid1> 1547
fromto <uuid1> 00000000-0000-0000-0000-000000000000 CMD_REG 1578
client收到 CMD_REG
write <uuid2>  CMD_REG_RESULT 1580
writeto 00000000-0000-0000-0000-000000000000 1580
writeto <uuid1> 1545
fromto <uuid1> <uuid2> CMD_GET_NODE 42
fromto <uuid1> <uuid2> CMD_REMOTE_SOCKS5 42
client收到 CMD_GET_NODE
client收到 CMD_REMOTE_SOCKS5
<IP>:<PORT> 关闭原因 read错误EOF
執行close1
write <uuid2> <uuid1> CMD_GET_NODE_RESULT 1
47
writeto <uuid1> 1547
fromto <uuid2> ffffffff-ffff-ffff-ffff-ffffffffffff CMD_ADD_NODE 1543
fromto <uuid1> 00000000-0000-0000-0000-000000000000 CMD_GET_NODE_RESULT
545
<IP>:<PORT> 关闭原因 read错误EOF
執行close1
Close  read错误EOF
upLevelNode 0

客户端

 .\rakshasa_node_amd64_win.exe -remotesocks5 1080 -d <vps_ip>:8883 -nocli
writeto 00000000-0000-0000-0000-000000000000 1580
fromto <uuid2> 00000000-0000-0000-0000-000000000000 CMD_REG_RESULT 1578
fromto <uuid2> ffffffff-ffff-ffff-ffff-ffffffffffff CMD_ADD_NODE 1543
client收到 CMD_REG_RESULT
广播do
client收到 CMD_ADD_NODE
write <uuid1> <uuid2> CMD_GET_NODE 44
start on  :8883
nodeMap6 <uuid2> 0xc000294000
write <uuid1> <uuid2> CMD_GET_NODE_RESULT 48
writeto <uuid2> 44
writeto <uuid2> 48
fromto <uuid2> <uuid1> CMD_GET_NODE_RESULT 1545
client收到 CMD_GET_NODE_RESULT
writeto 00000000-0000-0000-0000-000000000000 1580
fromto <uuid2> 00000000-0000-0000-0000-000000000000 CMD_REG_RESULT 1578
client收到 CMD_REG_RESULT
write <uuid1> <uuid2> CMD_GET_NODE 44
<vps_ip>:8883 关闭原因 重复注册
執行close1
write <uuid1> <uuid2> CMD_REMOTE_SOCKS5 44
writeto <uuid2> 44
writeto <uuid2> 44
fromto <uuid2> ffffffff-ffff-ffff-ffff-ffffffffffff CMD_ADD_NODE 1543
write <uuid1>  CMD_GET_NODE_RESULT 1547
广播do
writeto <uuid2> 1545
client收到 CMD_ADD_NODE
nodeMap6 <uuid2> 0xc000294000
writeto <uuid2> 1547
fromto <uuid2> <uuid1> CMD_GET_NODE_RESULT 1545
client收到 CMD_GET_NODE_RESULT
2023/09/08 09:24:50 remoteSocks5启动失败 time out

如果客户端通过 .\ rakshasa_node_amd64_win.exe -d <vps_ip>:8883 -nocli 启动,服务端使用 remote shell 功能是能进去客户端的powershell 的,也就是说客户端和服务端的通信是没问题的

是我的使用方式有误嘛?

媲美termite

感觉和termite好相似呀,但又觉的乱乱的... 还请大佬出个更详细的使用指南。

使用案例建议

师傅能多出点使用案例吗?这个文档看的有点懵啊。。

千里送人头?

这个设计理念不太符合安全要求吧!
假设A机器是自己的,B机器是别人的,C机器也是别人的。
1、B机器连上A以后,A直接就被控了,A原本只想要B和C的网络以及权限,我这不是千里送人头吗?
2、B、C机器被任何人攻陷后,直接能通过历史命令发现连接密码,A又直接被控了;
3、假设整个网中任何一台失陷,所有机器都惨了;

节点IP无法正常显示等问题

节点主机:甲骨文amd主机
节点IP无法正常显示,如下图:
image
远程shell也无法启动
image
另外,经常会出现 在线节点列表 在 各节点列表 不同步的问题,重新启动后才同步最新节点数据

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.