我用 go 做了一个类似 tor 去中心化多跳加密代理项目

查看 91|回复 9
作者:chenjia404   
最近自己做了实验性质的项目,想发出来和大家交流一下,也看看有没有人感兴趣一起讨论。
这个项目可以简单理解成:
一个类似 Tor 思路的多跳代理网络,但我不想走 Tor 那种中心化节点目录的路线,而是希望节点发现、节点广播、节点加入网络这部分尽量做成去中心化
我现在在做的整体方向大概是这样:

  • 每个节点启动后,本地直接提供一个 SOCKS5 代理

  • 节点分成两类角色:
  • Relay (中继节点)
  • Exit (出口节点)

  • 本地应用流量先进入本地 SOCKS5 ,再进入这个网络

  • 每个节点都是中继,但是出口节点需要手动开启。

  • 目前支持的路径思路包括:
  • Local -> Exit
  • Local -> Relay -> Exit
  • 后面会继续扩展多跳

  • 整体理念上有点像 Tor:
  • 多跳转发
  • Relay 和 Exit 分工
  • 客户端本地建电路

  • 但一个比较重要的区别是:
  • Tor 的节点目录本质上是中心化的
  • 我这个项目希望尽量不依赖中心目录,而是通过节点广播、去中心化发现、节点本地缓存等机制来做


    目前已经实现的功能:
    1. 去中心化加密多跳代理
  • 自动寻找网络的节点
  • 多跳分层加密(让 Relay 只知道下一跳,看不到最终目标)
  • 电路池
  • 自动重试与路径切换

    2. web 的控制台
  • 配置出口选择,你可以选择指定国家或者排除指定国家的出口节点
  • 配置出口政策,你可以只给一些服务提供出口网络。

    3. 少量测试节点
  • 数个 Relay 和 Exit

    我做这个项目的出发点主要是:
  • 想做一个使用 go 语言的多跳加密代理原型
  • 想尝试一下:
    如果不依赖 Tor 那种中心化目录,而是尽量做去中心化节点发现,这条路线能不能走通
  • 也想看看在 libp2p / 自定义电路协议 / 本地 SOCKS5 Agent 这套组合下,能不能做出一个比较像样的系统

    目前这个项目还比较早期,更偏:
  • 协议实验
  • 网络架构设计
  • 工程验证

    还不算成熟产品。
    如果大家感兴趣,我后面也可以继续整理一些内容,比如:
  • 架构图
  • 协议设计文档
  • 配置示例
  • 测试版仓库

    也想听听大家看法,比如:
  • 这种项目你们最在意的是匿名性、稳定性,还是运维能力?
  • 如果不走中心化目录,节点发现这块你们觉得最难的点会是什么?
  • 客户端出口选择和出口运营者策略这两个层次,这样拆分是不是合理?

    GitHub: https://github.com/chenjia404/meshproxy
  • zhang666   
    怎么发现节点?无无中心无公网太难了,除非做 ipv6 不过也难
    cyp0633   
    如何避免 honeypot 呢
    chenjia404
    OP
      
    @zhang666 #1 节点是基于 libp2p ,先连接引导节点,然后通过 dht 寻找节点,目前已经有一些节点在运行了,启动一分钟内就可以找到几个节点。
    chenjia404
    OP
      
    @cyp0633 #2 无法避免,类似 tor 推荐使用 https 这样的加密服务。
    surfyhou   
    匿名性方面,考虑加上每个节点自动销毁机制吗?还有就是运维本身的匿名性
    piaomiao0315   
    已 star ,期待后续完善与更新
    zisen   
    楼主人在国内吗,虽然只是实验性质,但还是小心喝茶
    uid106   
    考虑 socks5 + TLS 吧,并且 socks5 的 UDP 协商最好也魔改一下变成和 TCP 同端口(会增加一层会话管理)
    mfuuzy   
    @zhang666 IPv6 是一个不错的方案,不过现在很多家庭宽带虽然支持 IPv6 了,但是猫默认是有防火墙的,外面无法请求进来
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部