mirror of
https://github.com/p4gefau1t/trojan-go.git
synced 2024-04-21 12:21:34 +00:00
291 lines
13 KiB
HTML
291 lines
13 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head><meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||
<title>基本介绍 - Trojan-Go Docs</title>
|
||
<meta name="description" content="An unidentifiable mechanism that helps you bypass GFW.">
|
||
<meta name="generator" content="Hugo 0.69.2" />
|
||
<link href="https://p4gefau1t.github.io/trojan-goindex.xml" rel="alternate" type="application/rss+xml">
|
||
<link rel="canonical" href="https://p4gefau1t.github.io/trojan-go/developer/overview/">
|
||
<link rel="stylesheet" href="https://p4gefau1t.github.io/trojan-go/css/theme.min.css">
|
||
<script src="https://use.fontawesome.com/releases/v5.0.6/js/all.js"></script>
|
||
<link rel="stylesheet" href="https://p4gefau1t.github.io/trojan-go/css/chroma.min.css">
|
||
<script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script>
|
||
<script src="https://cdn.jsdelivr.net/npm/jquery.easing@1.4.1/jquery.easing.min.js"></script>
|
||
<script src="https://p4gefau1t.github.io/trojan-go/js/bundle.js"></script><style>
|
||
:root {}
|
||
</style>
|
||
<meta property="og:title" content="基本介绍" />
|
||
<meta property="og:description" content="Trojan-Go的核心部分有 tunnel 各个协议具体实现 proxy 代理核心 config 配置注册和解析模块 redirector 主动检测欺骗模块 statistics 用户认证和统计模块 可以在对应文件夹中找到相" />
|
||
<meta property="og:type" content="article" />
|
||
<meta property="og:url" content="https://p4gefau1t.github.io/trojan-go/developer/overview/" />
|
||
<meta property="og:image" content="https://p4gefau1t.github.io/trojan-go/images/og-image.png"/>
|
||
<meta property="og:site_name" content="Trojan-Go Docs" />
|
||
<meta name="twitter:card" content="summary_large_image"/>
|
||
<meta name="twitter:image" content="https://p4gefau1t.github.io/trojan-go/images/og-image.png"/>
|
||
|
||
<meta name="twitter:title" content="基本介绍"/>
|
||
<meta name="twitter:description" content="Trojan-Go的核心部分有 tunnel 各个协议具体实现 proxy 代理核心 config 配置注册和解析模块 redirector 主动检测欺骗模块 statistics 用户认证和统计模块 可以在对应文件夹中找到相"/>
|
||
<meta itemprop="name" content="基本介绍">
|
||
<meta itemprop="description" content="Trojan-Go的核心部分有 tunnel 各个协议具体实现 proxy 代理核心 config 配置注册和解析模块 redirector 主动检测欺骗模块 statistics 用户认证和统计模块 可以在对应文件夹中找到相">
|
||
|
||
<meta itemprop="wordCount" content="1727">
|
||
<meta itemprop="image" content="https://p4gefau1t.github.io/trojan-go/images/og-image.png"/>
|
||
|
||
|
||
|
||
<meta itemprop="keywords" content="" /></head>
|
||
<body><div class="container"><header>
|
||
<h1>Trojan-Go Docs</h1>
|
||
<a href="https://github.com/p4gefau1t/trojan-go" class="github"><i class="fab fa-github"></i></a>
|
||
<p class="description">An unidentifiable mechanism that helps you bypass GFW.</p>
|
||
|
||
</header>
|
||
<div class="global-menu">
|
||
<nav>
|
||
<ul>
|
||
<li><a href="/trojan-go/">Home</a></li>
|
||
<li><a href="https://github.com/p4gefau1t">GitHub</a></li></ul>
|
||
</nav>
|
||
</div>
|
||
<div class="content-container">
|
||
<main><h1>基本介绍</h1>
|
||
<p>Trojan-Go的核心部分有</p>
|
||
<ul>
|
||
<li>
|
||
<p>tunnel 各个协议具体实现</p>
|
||
</li>
|
||
<li>
|
||
<p>proxy 代理核心</p>
|
||
</li>
|
||
<li>
|
||
<p>config 配置注册和解析模块</p>
|
||
</li>
|
||
<li>
|
||
<p>redirector 主动检测欺骗模块</p>
|
||
</li>
|
||
<li>
|
||
<p>statistics 用户认证和统计模块</p>
|
||
</li>
|
||
</ul>
|
||
<p>可以在对应文件夹中找到相关源代码。</p>
|
||
<h2 id="tunneltunnel隧道">tunnel.Tunnel隧道</h2>
|
||
<p>Trojan-Go将所有协议(包括路由功能等)抽象为隧道(tunnel.Tunnel接口),每个隧道可开启服务端(tunnel.Server接口)和客户端(tunnel.Client)。每个服务端可以从其底层隧道中,剥离并接受流(tunnel.Conn)和包(tunnel.PacketConn)。客户端可以向底层隧道,创建流和包。</p>
|
||
<p>每个隧道并不关心其下方的隧道是什么,但是每个隧道清楚知道这个它上方的其他隧道的相关信息。</p>
|
||
<p>所有隧道需要下层提供流或包传输支持,或两者都要求提供。所有隧道必须向上层隧道提供流传输支持,但不一定提供包传输。</p>
|
||
<p>隧道可能只有服务端,也可能只有客户端,也可能两者皆有。两者皆有的隧道,可被用于作为Trojan-Go客户端和服务端间的传输隧道。</p>
|
||
<p>注意,请区分Trojan-Go的服务端/客户端,和隧道的服务端/客户端的区别。下面是一个方便理解的图例。</p>
|
||
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">
|
||
入站 GFW 出站
|
||
-------->隧道A服务端->隧道B客户端 ----------------> 隧道B服务端->隧道C客户端----------->
|
||
(Trojan-Go客户端) (Trojan-Go服务端)
|
||
|
||
</code></pre></div><p>最底层的隧道为传输层,即不从其他隧道获取或者创建流和包的隧道,充当上图中隧道A或者C的角色。</p>
|
||
<ul>
|
||
<li>
|
||
<p>transport,可插拔传输层</p>
|
||
</li>
|
||
<li>
|
||
<p>socks,socks5代理,仅隧道服务端</p>
|
||
</li>
|
||
<li>
|
||
<p>tproxy,透明代理,仅隧道服务端</p>
|
||
</li>
|
||
<li>
|
||
<p>dokodemo,反向代理,仅隧道服务端</p>
|
||
</li>
|
||
<li>
|
||
<p>freedom,自由出站,仅隧道客户端</p>
|
||
</li>
|
||
</ul>
|
||
<p>这几个隧道直接从TCP/UDP Socket创建流和包,不接受为其底层添加的任何隧道。</p>
|
||
<p>其他隧道,只要下层能满足上层对包和流传输的需求,则原则上可以任何方式,任何数量进行组合和堆叠。这些隧道在上图中充当隧道B的角色,他们有</p>
|
||
<ul>
|
||
<li>
|
||
<p>trojan</p>
|
||
</li>
|
||
<li>
|
||
<p>websocket</p>
|
||
</li>
|
||
<li>
|
||
<p>mux</p>
|
||
</li>
|
||
<li>
|
||
<p>simplesocks</p>
|
||
</li>
|
||
<li>
|
||
<p>tls</p>
|
||
</li>
|
||
<li>
|
||
<p>router,路由功能,仅隧道客户端</p>
|
||
</li>
|
||
</ul>
|
||
<p>他们都不关心其下层隧道实现。但可以根据到来的流和包,将其分发给上层隧道。</p>
|
||
<p>例如,在这张图中,是一个典型的Trojan-Go客户端和服务端,各个隧道自下往上堆叠的顺序是:</p>
|
||
<ul>
|
||
<li>
|
||
<p>隧道A: transport->socks</p>
|
||
</li>
|
||
<li>
|
||
<p>隧道B: transport->tls->trojan</p>
|
||
</li>
|
||
<li>
|
||
<p>隧道C: freedom</p>
|
||
</li>
|
||
</ul>
|
||
<p>实际上的隧道堆叠的情况会比这个更复杂一些。通常的入站的隧道是一棵多叉树的形式,而非一条链。具体解释参考下文。</p>
|
||
<h2 id="proxyproxy代理核心">proxy.Proxy代理核心</h2>
|
||
<p>代理核心的作用,是监听上述隧道进行组合堆叠并形成的协议栈,将所有的入站协议栈(多个隧道Server的终端节点,见下)中抽取的流和包,以及对应元信息,转送给出站协议栈(一个隧道Client)。</p>
|
||
<p>注意,这里的入站协议栈可以有多个,如客户端可以同时从Socks5和HTTP协议栈中抽取流和包,服务端可以同时从Websocket承载的Trojan协议,和TLS承载的Trojan协议中抽取流和包等。但是出站协议栈只能有一个,如只使用TLS承载的Trojan协议出站。</p>
|
||
<p>为了描述入站协议栈(隧道服务端)的组合和堆叠方式,使用一棵多叉树对所有协议栈进行描述。你可以在proxy文件夹中各组件,看到构建树的过程。</p>
|
||
<p>而出站协议栈则比较简单,使用一个简单列表即可描述。</p>
|
||
<p>所以实际上,对于一个典型的开启了Websocket和Mux的客户端/服务端,上图的隧道堆叠模型为:</p>
|
||
<p>客户端</p>
|
||
<ul>
|
||
<li>
|
||
<p>入站(树)</p>
|
||
<ul>
|
||
<li>transport (根)
|
||
<ul>
|
||
<li>adapter 能够识别HTTP和Socks流量并分发给上层协议
|
||
<ul>
|
||
<li>http (终端节点)</li>
|
||
<li>socks(终端节点)</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>出站(链)</p>
|
||
<ul>
|
||
<li>transport (根)</li>
|
||
<li>tls</li>
|
||
<li>websocket</li>
|
||
<li>trojan</li>
|
||
<li>mux</li>
|
||
<li>simplesocks</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<p>服务端</p>
|
||
<ul>
|
||
<li>
|
||
<p>入站(树)</p>
|
||
<ul>
|
||
<li>transport (根)
|
||
<ul>
|
||
<li>tls 能够识别HTTP和非HTTP流量并分发
|
||
<ul>
|
||
<li>websocket
|
||
<ul>
|
||
<li>trojan(终端节点)
|
||
<ul>
|
||
<li>mux
|
||
<ul>
|
||
<li>simplesocks (终端节点)</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>trojan 能够识别mux和普通trojan流量并分发(终端节点)
|
||
<ul>
|
||
<li>mux
|
||
<ul>
|
||
<li>simplesocks (终端节点)</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>出站(链)</p>
|
||
<ul>
|
||
<li>freedom</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<p>注意,代理核心只从隧道构成的树的终端节点抽取流和包,并转送到唯一的出站上。多个终端节点的设计的目的,是使Trojan-Go同时兼容Websocket和Trojan协议入站连接,开启/未开启Mux的入站连接,以及HTTP/Socks5自动识别的功能。每个拥有多个儿子的树上节点,具有精确识别和分发流和包给不同的儿子节点的能力。这符合我们假定每个协议了解其上层承载协议的假设。</p>
|
||
<div class="edit-meta">
|
||
|
||
<br><a href="https://github.com/p4gefau1t/trojan-go/docs/edit/master/content/developer/overview.md" class="edit-page"><i class="fas fa-pen-square"></i> Edit on GitHub</a></div><nav class="pagination"><a class="nav nav-prev" href="https://p4gefau1t.github.io/trojan-go/developer/" title="实现细节和开发指南"><i class="fas fa-arrow-left" aria-hidden="true"></i> Prev - 实现细节和开发指南</a>
|
||
<a class="nav nav-next" href="https://p4gefau1t.github.io/trojan-go/developer/build/" title="编译和自定义Trojan-Go">Next - 编译和自定义Trojan-Go <i class="fas fa-arrow-right" aria-hidden="true"></i></a>
|
||
</nav><footer><p class="powered">Powered by <a href="https://gohugo.io">Hugo</a>. Theme by <a href="https://themes.gohugo.io/hugo-theme-techdoc/">TechDoc</a>. Designed by <a href="https://github.com/thingsym/hugo-theme-techdoc">Thingsym</a>.</p>
|
||
</footer>
|
||
</main><div class="sidebar">
|
||
|
||
<nav class="open-menu">
|
||
<ul>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go">Home</a></li>
|
||
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/basic/">基本配置</a>
|
||
|
||
<ul class="sub-menu">
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/basic/trojan/">Trojan基本原理</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/basic/config/">正确配置Trojan-Go</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/basic/full-config/">完整的配置文件</a></li>
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/advance/">高级配置</a>
|
||
|
||
<ul class="sub-menu">
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/advance/mux/">启用多路复用提升网络并发性能</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/advance/websocket/">使用Websocket进行CDN转发和抵抗中间人攻击</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/advance/router/">国内直连和广告屏蔽</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/advance/forward/">隧道和反向代理</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/advance/nginx-relay/">一种基于SNI代理的多路径分流中继方案</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/advance/plugin/">使用Shadowsocks插件/可插拔传输层</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/advance/aead/">使用Shadowsocks AEAD进行二次加密</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/advance/customize-protocol-stack/">自定义协议栈</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/advance/api/">使用API动态管理用户</a></li>
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li class="parent"><a href="https://p4gefau1t.github.io/trojan-go/developer/">实现细节和开发指南</a>
|
||
|
||
<ul class="sub-menu">
|
||
<li class="active"><a href="https://p4gefau1t.github.io/trojan-go/developer/overview/">基本介绍</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/developer/build/">编译和自定义Trojan-Go</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/developer/trojan/">Trojan协议</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/developer/mux/">多路复用</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/developer/websocket/">Websocket</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/developer/simplesocks/">SimpleSocks协议</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/developer/api/">API开发</a></li>
|
||
<li class=""><a href="https://p4gefau1t.github.io/trojan-go/developer/plugin/">可插拔传输层插件开发</a></li>
|
||
</ul>
|
||
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
|
||
|
||
|
||
<div class="sidebar-footer"></div>
|
||
</div>
|
||
</div><a href="#" id="backtothetop-fixed" class="backtothetop"
|
||
data-backtothetop-duration="600"
|
||
data-backtothetop-easing="easeOutQuart"
|
||
data-backtothetop-fixed-fadeIn="1000"
|
||
data-backtothetop-fixed-fadeOut="1000"
|
||
data-backtothetop-fixed-bottom="10"
|
||
data-backtothetop-fixed-right="20">
|
||
<span class="fa-layers fa-fw">
|
||
<i class="fas fa-circle"></i>
|
||
<i class="fas fa-arrow-circle-up"></i>
|
||
</span></a>
|
||
</div>
|
||
</body>
|
||
</html>
|