update docs

This commit is contained in:
Page Fault
2020-06-29 04:50:17 +00:00
parent 9ece8d8ff1
commit a485836d6c
15 changed files with 105 additions and 146 deletions
+1 -1
View File
@@ -4,4 +4,4 @@ draft: false
weight: 30
---
这一部分内容将介绍更复杂的Trojan-Go配置方法。对于Trojan-GFW版本不支持和不兼容的功能,将在小节中明确标明。
这一部分内容将介绍更复杂的Trojan-Go配置方法。对于与Trojan原版不兼容的特性,将在小节中明确标明。
+1 -1
View File
@@ -4,7 +4,7 @@ draft: false
weight: 8
---
### 注意,Trojan-GFW版本不支持这个特性
### 注意,Trojan不支持这个特性
Trojan协议本身无加密,其安全性依赖于下层的TLS。在一般情况下,TLS安全性很好,并不需要再次加密Trojan流量。但是,某些场景下,你可能无法保证TLS隧道的安全性:
+1 -1
View File
@@ -4,7 +4,7 @@ draft: false
weight: 10
---
### 注意,Trojan-GFW版本不支持这个特性
### 注意,Trojan不支持这个特性
Trojan-Go使用gRPC提供了一组API,API支持以下功能:
@@ -4,7 +4,7 @@ draft: false
weight: 8
---
### 注意,Trojan-GFW版本不支持这个特性
### 注意,Trojan不支持这个特性
Trojan-Go允许高级用户自定义协议栈。在自定义模式下,Trojan-Go将放弃对协议栈的控制,允许用户操作底层协议栈组合。例如
@@ -26,22 +26,22 @@ Trojan-Go将所有协议抽象为隧道,每个隧道可能提供客户端,
下面是Trojan-Go支持的隧道和他们的属性:
|隧道 | 需要下层提供流 | 需要下层提供包 | 向上层提供流 | 向上层提供包 | 可以作为入站 | 可以作为出站 |
|-------------------|--------------|-------------|-------------|------------|------------|------------|
|transport | n | n | y | y | y | y |
|dokodemo | n | n | y | y | y | n |
|tproxy | n | n | y | y | y | n |
|tls | y | n | y | n | y | y |
|trojan | y | n | y | y | y | y |
|mux | y | n | y | n | y | y |
|simplesocks | y | n | y | y | y | y |
|shadowsocks | y | n | y | n | y | y |
|websocket | y | n | y | n | y | y |
|freedom | n | n | y | y | n | y |
|socks | y | y | y | y | y | n |
|http | y | n | y | n | y | n |
|router | y | y | y | y | n | y |
|adapter | n | n | y | y | y | n |
| 隧道 | 需要下层提供流 | 需要下层提供包 | 向上层提供流 | 向上层提供包 | 可以作为入站 | 可以作为出站 |
| ----------- | -------------- | -------------- | ------------ | ------------ | ------------ | ------------ |
| transport | n | n | y | y | y | y |
| dokodemo | n | n | y | y | y | n |
| tproxy | n | n | y | y | y | n |
| tls | y | n | y | n | y | y |
| trojan | y | n | y | y | y | y |
| mux | y | n | y | n | y | y |
| simplesocks | y | n | y | y | y | y |
| shadowsocks | y | n | y | n | y | y |
| websocket | y | n | y | n | y | y |
| freedom | n | n | y | y | n | y |
| socks | y | y | y | y | y | n |
| http | y | n | y | n | y | n |
| router | y | y | y | y | n | y |
| adapter | n | n | y | y | y | n |
自定义协议栈的工作方式是,定义树/链上节点并分别它们起名(tag)并添加配置,然后使用tag组成的有向路径,描述这棵树/链。例如,对于一个典型的Trojan-Go服务器,可以如此描述:
+1 -1
View File
@@ -4,7 +4,7 @@ draft: false
weight: 1
---
### 注意,Trojan-GFW版本不支持这个特性
### 注意,Trojan不支持这个特性
Trojan-Go支持使用多路复用提升网络并发性能。
+49
View File
@@ -0,0 +1,49 @@
---
title: "透明代理"
draft: false
weight: 11
---
### 注意,Trojan不完全支持这个特性(UDP)
Trojan-Go支持基于tproxy的透明TCP/UDP代理。
要开启透明代理模式,将一份正确的客户端配置(配置方式参见基本配置部分)其中的```run_type```修改为```nat```,并按照需求修改本地监听端口即可。
之后需要添加iptables规则。这里假定你的网关具有两个网卡,下面这份配置将其中一个网卡(局域网)的入站包转交给Trojan-Go,由Trojan-Go通过隧道,通过另一个网卡(互联网)发送到远端Trojan-Go服务器。你需要将下面的```$SERVER_IP```,```$TROJAN_GO_PORT```,```$INTERFACE```替换为自己的配置。
```shell
# 新建TROJAN_GO链
iptables -t mangle -N TROJAN_GO
# 绕过Trojan-Go服务器地址
iptables -t mangle -A TROJAN_GO -d $SERVER_IP -j RETURN
# 绕过私有地址
iptables -t mangle -A TROJAN_GO -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A TROJAN_GO -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A TROJAN_GO -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A TROJAN_GO -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A TROJAN_GO -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A TROJAN_GO -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A TROJAN_GO -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A TROJAN_GO -d 240.0.0.0/4 -j RETURN
# 未命中上文的规则的包,打上标记
iptables -t mangle -A TROJAN_GO -j TPROXY -p tcp --on-port $TROJAN_GO_PORT --tproxy-mark 0x01/0x01
iptables -t mangle -A TROJAN_GO -j TPROXY -p udp --on-port $TROJAN_GO_PORT --tproxy-mark 0x01/0x01
# 从$INTERFACE网卡流入的所有TCP/UDP包,跳转TROJAN_GO链
iptables -t mangle -A PREROUTING -p tcp -i $INTERFACE -j TROJAN_GO
iptables -t mangle -A PREROUTING -p udp -i $INTERFACE -j TROJAN_GO
# 添加路由,打上标记的包重新进入本地回环
ip route add local default dev lo table 100
ip rule add fwmark 1 lookup 100
```
配置完成后以root权限启动Trojan-Go客户端:
```shell
sudo trojan-go
```
+1 -1
View File
@@ -4,7 +4,7 @@ draft: false
weight: 7
---
### 注意,Trojan-GFW版本不支持这个特性
### 注意,Trojan不支持这个特性
Trojan-Go支持可插拔的传输层。原则上,Trojan-Go可以使用任何有TCP隧道功能的软件作为传输层,如v2ray、shadowsocks、kcp等。同时,Trojan-Go也兼容Shadowsocks的SIP003插件标准,如GoQuiet,v2ray-plugin等。也可以使用Tor的传输层插件,如obfs4,meek等。
+1 -1
View File
@@ -4,7 +4,7 @@ draft: false
weight: 3
---
### 注意,Trojan-GFW版本不支持这个特性
### 注意,Trojan不支持这个特性
Trojan-Go内建的路由模块可以帮助你实现国内直连,即客户端对于国内网站不经过代理,直接连接。
+2 -2
View File
@@ -4,7 +4,7 @@ draft: false
weight: 2
---
### 注意,Trojan-GFW版本不支持这个特性
### 注意,Trojan不支持这个特性
Trojan-Go支持使用TLS+Websocket承载Trojan协议,使得利用CDN进行流量中转成为可能。
@@ -40,7 +40,7 @@ Trojan协议本身不带加密,安全性依赖外层的TLS。但流量一旦
],
"websocket": {
"enabled": true,
"path": "/imaurlpath",
"path": "/your-websocket-path",
"hostname": "www.your_awesome_domain_name.com"
},
"shadowsocks": {
+16 -33
View File
@@ -34,8 +34,6 @@ weight: 30
"log_level": 1,
"log_file": "",
"password": [],
"buffer_size": 32,
"dns": [],
"disable_http_check": false,
"udp_timeout": 10,
"ssl": {
@@ -143,17 +141,17 @@ weight: 30
```log_level```指定日志等级。等级越高,输出的信息越少。合法的值有
- 0输出Debug以上日志(所有日志)
- 0 输出Debug以上日志(所有日志)
- 1输出Info及以上日志
- 1 输出Info及以上日志
- 2输出Warning及以上日志
- 2 输出Warning及以上日志
- 3输出Error及以上日志
- 3 输出Error及以上日志
- 4输出Fatal及以上日志
- 4 输出Fatal及以上日志
- 5完全不输出日志
- 5 完全不输出日志
```log_file```指定日志输出文件路径。如果未指定则使用标准输出。
@@ -161,21 +159,7 @@ weight: 30
```buffer_size```为单个连接缓冲区大小,单位KiB,默认32KiB。适当提升这个数值可以提升网络吞吐量和效率,但是也会增加内存消耗。对于路由器等嵌入式系统,建议根据实际情况,适当减小该数值。
```dns```指定trojan-go使用的DNS服务器列表,如果不指定则使用主机默认DNS。如果指定了服务器,按照列表顺序依次查询,支持UDP/TCP/DOT类型的DNS,查询结果会被缓存五分钟。使用URL格式描述服务器,例如
- "udp://1.1.1.1",基于UDP的DNS服务器,默认53端口
- "udp://1.1.1.1:53",与上一项等价
- "1.1.1.1",与上一项等价
- "tcp://1.1.1.1",基于TCP的DNS服务器,默认53端口
- "dot://1.1.1.1",基于DOT(DNS Over TLS)的DNS服务器,默认853端口
使用DOT可以防止DNS请求泄露,但由于TLS的握手耗费更多时间,查询速度也会有一定的下降,请自行斟酌性能和安全性的平衡。
```disable_http_check```是否禁用HTTP可用性检查。
```disable_http_check```是否禁用HTTP伪装服务器可用性检查。
```udp_timeout``` UDP会话超时时间。
@@ -189,15 +173,7 @@ weight: 30
```sni```指的是TLS客户端请求中的服务器名字段,一般和证书的Common Name相同。如果你使用let'sencrypt等机构签发的证书,这里填入你的域名。如果这一项未填,将使用```remote_addr```填充。你应当指定一个有效的SNI(和远端证书CN一致),否则客户端可能无法验证远端证书有效性从而无法连接。
```alpn```为TLS的应用层协议协商指定协议。在TLS Client/Server Hello中传输,协商应用层使用的协议,仅用作指纹伪造,并无实际作用。**如果使用了CDN,错误的alpn字段可能导致与CDN协商得到错误的应用层协议**。
```prefer_server_cipher```客户端是否偏好选择服务端在协商中提供的密码学套件。
```cipher```TLS使用的密码学套件。```cipher13``字段与此字段合并。只有在你明确知道自己在做什么的情况下,才应该去填写此项以修改trojan-go使用的TLS密码学套件。**正常情况下,你应该将其留空或者不填**,trojan-go会根据当前硬件平台以及远端的情况,自动选择最合适的加密算法以提升性能和安全性。如果需要填写,密码学套件名用分号(":")分隔,按优先顺序排列。Go的TLS库中弃用了TLS1.2中部分不安全的密码学套件,并完全支持TLS1.3。默认情况下,trojan-go将优先使用更安全的TLS1.3。
```curves```指定TLS在ECDHE中偏好使用的椭圆曲线。只有你明确知道自己在做什么的情况下,才应该填写此项。曲线名称用分号(":")分隔,按优先顺序排列。
```fingerprint```用于指定TLS Client Hello指纹伪造类型,以抵抗GFW对于TLS Client Hello指纹的特征识别和阻断。trojan-go使用[utls](https://github.com/refraction-networking/utls)进行指纹伪造,默认伪造Firefox的指纹。合法的值有
```fingerprint```用于指定客户端TLS Client Hello指纹伪造类型,以抵抗GFW对于TLS Client Hello指纹的特征识别和阻断。trojan-go使用[utls](https://github.com/refraction-networking/utls)进行指纹伪造,默认伪造Firefox的指纹。合法的值有
- "",不使用指纹伪造
@@ -207,7 +183,14 @@ weight: 30
- "ios",伪造iOS指纹
一旦指纹的值被设置,```cipher```,```curves```,```alpn```,```session_ticket```等有可能影响指纹的字段将使用该指纹的特定设置覆写。
一旦指纹的值被设置,客户端的```cipher```,```curves```,```alpn```,```session_ticket```等有可能影响指纹的字段将使用该指纹的特定设置覆写。
```alpn```为TLS的应用层协议协商指定协议。在TLS Client/Server Hello中传输,协商应用层使用的协议,仅用作指纹伪造,并无实际作用。**如果使用了CDN,错误的alpn字段可能导致与CDN协商得到错误的应用层协议**。
```prefer_server_cipher```客户端是否偏好选择服务端在协商中提供的密码学套件。
```cipher```TLS使用的密码学套件。```cipher13``字段与此字段合并。只有在你明确知道自己在做什么的情况下,才应该去填写此项以修改trojan-go使用的TLS密码学套件。**正常情况下,你应该将其留空或者不填**,trojan-go会根据当前硬件平台以及远端的情况,自动选择最合适的加密算法以提升性能和安全性。如果需要填写,密码学套件名用分号(":")分隔,按优先顺序排列。Go的TLS库中弃用了TLS1.2中部分不安全的密码学套件,并完全支持TLS1.3。默认情况下,trojan-go将优先使用更安全的TLS1.3。
```curves```指定TLS在ECDHE中偏好使用的椭圆曲线。只有你明确知道自己在做什么的情况下,才应该填写此项。曲线名称用分号(":")分隔,按优先顺序排列。
```plain_http_response```指服务端TLS握手失败时,明文发送的原始数据(原始TCP数据)。这个字段填入该文件路径。推荐使用```fallback_port```而不是该字段。