xjdrew / kone

Transparent proxy for home/enterprise network
MIT License
704 stars 127 forks source link

原理大概是什么样的。 #1

Closed replive closed 7 years ago

replive commented 8 years ago

原理大概是什么样的,能大概讲下吗,没学过go.

xjdrew commented 8 years ago

原理跟go没关系,什么语言都可以实现。 简单说是通过dns欺骗把需要代理的流量重定向到虚拟网卡,虚拟网卡对流量重整后走代理出去。

pypypystudy commented 8 years ago

那这个只能处理http请求了?

ls0f commented 8 years ago

@yesme2000 TCP/UDP/ICMP 都可以

Coneboy-k commented 5 years ago

kone启动流程

  1. 读取config文件
  2. 监听82端口
  3. 开启dns服务监听53端口

client访问kone流程

1.查询DNS记录

  1. kone从table中读取nat地址,否则生成nat地址

2.client拿到dns给的IP进行访问

  1. 判断table中是否存在nat地址,否则关闭链接
  2. 生成session,绑定src.ip src.port 和 outerIP port
  3. kone建立访问链接,此时判断是否需要进行代理。
  4. 修改kone访问链接的checksum等信息。
  5. 关联client-》kone和kone-》目的主机的数据流。
  6. 完成后关闭双向链接。

注意:

  1. TUN是工作在第三层。TAP工作在第二层。 tun可以操作读写虚拟网卡。所以是协议无关的。
  2. kone采用的是DNAT,会根据目标IP进行生成。单也不是完全的DNAT。

没搞过go,硬着头皮看的,勿喷哈。