Skip to content

Commit

Permalink
update docs
Browse files Browse the repository at this point in the history
  • Loading branch information
p4gefau1t committed May 28, 2020
1 parent 3e6e870 commit b5b7845
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 16 deletions.
2 changes: 1 addition & 1 deletion docs/content/advance/router.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Trojan-Go内建的路由模块可以帮助你实现国内直连,即客户端
"your_password"
],
"ssl": {
"sni": "your_domain_name"
"sni": "your-domain-name.com"
},
"mux" :{
"enabled": true
Expand Down
13 changes: 7 additions & 6 deletions docs/content/basic/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,28 +65,29 @@ sudo ./trojan-go -autocert renew
"ssl": {
"cert": "server.crt",
"key": "server.key",
"sni": "your-domain-name.com",
"fallback_port": 1234
}
}
```

这个配置文件使Trojan-Go在服务器的所有IP地址上(0.0.0.0)监听443端口,分别使用server.crt和server.key作为证书和密钥进行TLS握手。你应该使用尽可能复杂的密码,同时确保客户端和服务端```password```是一致的。
这个配置文件使Trojan-Go在服务器的所有IP地址上(0.0.0.0)监听443端口,分别使用server.crt和server.key作为证书和密钥进行TLS握手。你应该使用尽可能复杂的密码,同时确保客户端和服务端```password```是一致的。注意,**Trojan-Go会检测你的HTTP服务器```http://remote_addr:remote_port```是否正常工作。如果你的HTTP服务器工作不正常,Trojan-Go将拒绝启动。**

当一个连接试图连接Trojan-Go的监听端口时,会发生下面的事情:
当一个客户端试图连接Trojan-Go的监听端口时,会发生下面的事情:

- 如果TLS握手成功,检测到TLS的内容非Trojan协议(有可能是HTTP请求,或者来自GFW的主动探测)。Trojan-Go将TLS连接代理到本地127.0.0.1:80上的HTTP服务。这时在远端看来,Trojan-Go服务就是一个HTTPS网站。

- 如果TLS握手成功,并且被确认是Trojan协议头部,并且其中的密码正确,那么服务器将解析来自客户端的请求并进行代理,否则和上一步的处理方法相同。

- 如果TLS握手失败,说明对方使用的不是TLS协议进行连接。此时Trojan-Go将这个TCP连接代理到本地127.0.0.1:1234上运行的HTTPS服务,本地HTTPS服务器也会检测到连接不是TLS连接,返回一个400 Bad Reqeust的HTTP页面。```fallback_port```是一个可选选项,如果没有填写,Trojan-Go会直接终止连接。虽然是可选的,但是还是强烈建议填写。

你可以通过使用浏览器访问你的域名```https://your_domain_name```来验证。如果工作正常,你的浏览器会显示一个正常的HTTPS保护的Web页面,页面内容与服务器本机80端口上的页面一致。你还可以使用```http://your_domain_name:443```验证```fallback_port```工作是否正常。
你可以通过使用浏览器访问你的域名```https://your-domain-name.com```来验证。如果工作正常,你的浏览器会显示一个正常的HTTPS保护的Web页面,页面内容与服务器本机80端口上的页面一致。你还可以使用```http://your-domain-name.com:443```验证```fallback_port```工作是否正常。

事实上,你甚至可以将Trojan-Go当作你的HTTPS服务器,用来给你的网站提供HTTPS服务。访客可以正常地通过Trojan-Go浏览你的网站,而和代理流量互不影响。但是注意,不要在```remote_port``````fallback_port```搭建有高实时性需求的服务,Trojan-Go识别到非Trojan协议流量时会有意增加少许延迟以抵抗GFW基于时间的检测。

配置完成后,可以使用

```json
```shell
./trojan-go -config ./server.json
```

Expand All @@ -107,7 +108,7 @@ sudo ./trojan-go -autocert renew
"your_awesome_password"
],
"ssl": {
"sni": "your_domain_name"
"sni": "your-domain-name.com"
}
}
```
Expand All @@ -118,7 +119,7 @@ sudo ./trojan-go -autocert renew

配置完成后,可以使用

```json
```shell
./trojan-go -config ./client.json
```

Expand Down
24 changes: 17 additions & 7 deletions docs/content/basic/full-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,10 @@ weight: 30
"password": [],
"buffer_size": 32,
"dns": [],
"disable_http_check": false,
"ssl": {
"verify": true,
"verify_hostname": true,
"cert": *required*,
"key": *required*,
"key_password": "",
Expand Down Expand Up @@ -85,14 +87,16 @@ weight: 30
"double_tls": true,
"ssl": {
"verify": true,
"verify_hostname": true,
"cert": "",
"key": "",
"key_password": "",
"prefer_server_cipher": false,
"sni": "",
"session_ticket": true,
"reuse_session": true,
"plain_http_response": ""
"plain_http_response": "",
"key_log": ""
}
},
"forward_proxy": {
Expand Down Expand Up @@ -146,6 +150,8 @@ weight: 30

```password```可以填入多个密码。除了使用配置文件配置密码之外,trojan-go还支持使用mysql配置密码,参见下文。客户端的密码,只有与服务端配置文件中或者在数据库中的密码记录一致,才能通过服务端的校验,正常使用代理服务。

```buffer_size```为单个连接缓冲区大小,单位KiB,默认32KiB。适当提升这个数值可以提升网络吞吐量和效率,但是也会增加内存消耗。对于路由器等嵌入式系统,建议根据实际情况,适当减小该数值。

```dns```指定trojan-go使用的DNS服务器列表,如果不指定则使用主机默认DNS。如果指定了服务器,按照列表顺序依次查询,支持UDP/TCP/DOT类型的DNS,查询结果会被缓存五分钟。使用URL格式描述服务器,例如

- "udp://1.1.1.1",基于UDP的DNS服务器,默认53端口
Expand All @@ -160,12 +166,14 @@ weight: 30

使用DOT可以防止DNS请求泄露,但由于TLS的握手耗费更多时间,查询速度也会有一定的下降,请自行斟酌性能和安全性的平衡。

```buffer_size```为单个连接缓冲区大小,单位KiB,默认32KiB。适当提升这个数值可以提升网络吞吐量和效率,但是也会增加内存消耗。对于路由器等嵌入式系统,建议根据实际情况,适当减小该数值
```disable_http_check```是否禁用HTTP可用性检查

### ```ssl```选项

```verify```表示客户端(client/nat/forward)是否校验服务端提供的证书合法性,默认开启。出于安全性考虑,这个选项不应该在实际场景中选择false,否则可能遭受中间人攻击。如果使用自签名或者自签发的证书,开启```verify```会导致校验失败。这种情况下,应当保持```verify```开启,然后在```cert```中填写服务端的证书,即可正常连接。

```verify_hostname```表示服务端是否校验客户端提供的SNI与服务端设置的一致性。如果服务端SNI字段留空,认证将被强制关闭。

服务端必须填入```cert``````key```,对应服务器的证书和私钥文件,请注意证书是否有效/过期。如果使用权威CA签发的证书,客户端(client/nat/forward)可以不填写```cert```。如果使用自签名或者自签发的证书,应当在的```cert```处填入服务器证书文件,否则可能导致校验失败。

```sni```指的是证书的Common Name,如果你使用letsencrypt等机构签名的证书,这里填入你的域名。如果这一项未填,将使用```remote_addr```填充。你应当指定一个有效的SNI(和远端证书CN一致),否则客户端可能无法验证远端证书有效性从而无法连接。
Expand Down Expand Up @@ -194,21 +202,23 @@ weight: 30

```plain_http_response```指服务端TLS握手失败时,明文发送的原始数据(原始TCP数据)。这个字段填入该文件路径。推荐使用```fallback_port```而不是该字段。

```fallback_port```指服务端TLS握手失败时,trojan-go将该连接代理的端口。这是trojan-go的特性,以便更好地隐蔽Trojan服务器,抵抗GFW的主动检测,使得服务器的443端口在遭遇非TLS协议的探测时,行为与正常服务器完全一致。当服务器接受了一个连接但无法进行TLS握手时,如果```fallback_port```不为空,则流量将会被代理至remote_addr:fallback_port。例如,你可以在本地使用nginx开启一个https服务,当你的服务器443端口被非TLS协议请求时(比如http请求),trojan-go将代理至本地https服务器,nginx将使用http协议明文返回一个400 Bad Request页面。你可以通过使用浏览器访问```http://your_domain_name.com:443```进行验证。
```fallback_port```指服务端TLS握手失败时,trojan-go将该连接代理的端口。这是trojan-go的特性,以便更好地隐蔽Trojan服务器,抵抗GFW的主动检测,使得服务器的443端口在遭遇非TLS协议的探测时,行为与正常服务器完全一致。当服务器接受了一个连接但无法进行TLS握手时,如果```fallback_port```不为空,则流量将会被代理至remote_addr:fallback_port。例如,你可以在本地使用nginx开启一个https服务,当你的服务器443端口被非TLS协议请求时(比如http请求),trojan-go将代理至本地https服务器,nginx将使用http协议明文返回一个400 Bad Request页面。你可以通过使用浏览器访问```http://your-domain-name.com:443```进行验证。

```serve_plain_text```服务端直接是否直接接受TCP连接并处理trojan协议明文。开启此选项后,```ssl```的其他选项将失效,trojan-go将直接处理连入的TCP连接而不使用TLS。此选项的意义在于支持nginx等Web服务器的分流。如果开启,请不要将trojan-go服务对外暴露。

```key_log```TLS密钥日志的文件路径。如果填写则开启密钥日志。**记录密钥将破坏TLS的安全性,此项不应该用于除调试以外的其他任何用途。**

### ```mux```多路复用选项

多路复用是trojan-go的特性。如果服务器和客户端都是trojan-go,可以开启mux多路复用以减少高并发情景下的延迟(只需要客户端开启此选项即可,服务端自动适配)。

注意,开启多路复用不会提升你的链路速度。相反,它会增加客户端和服务端的CPU和内存消耗,从而可能造成速度下降。多路复用的意义在于降低延迟
注意,多路复用的意义在于降低握手延迟,而不是提升链路速度。相反,它会增加客户端和服务端的CPU和内存消耗,从而可能造成速度下降。

```enabled```是否开启多路复用
```enabled```是否开启多路复用

```concurrency```指单个TLS隧道可以承载的最大连接数,默认为8。这个数值越大,多连接并发时TLS由于握手产生的延迟就越低,但网络吞吐量可能会有所降低,填入负数或者0表示所有连接只使用一个TLS隧道承载。

```idle_timeout```指TLS隧道在空闲多久之后关闭,单位为秒。如果数值为负或0,则一旦TLS隧道空闲,则立即关闭
```idle_timeout```指TLS隧道在空闲多久之后关闭,单位为秒。如果数值为负值或0,则一旦TLS隧道空闲,则立即关闭

### ```router```路由选项

Expand Down Expand Up @@ -252,7 +262,7 @@ Websocket传输是trojan-go的特性。在**正常的直接连接代理节点**

- 你到代理节点的直接TLS连接遭到了GFW的中间人攻击

警告:**由于信任CDN证书并使用CDN网络进行传输,HTTPS连接对于CDN是透明的,CDN运营商可以查看Websocket流量传输内容。如果你使用了国内的CDN,应当假定CDN不可信任,请务必开启double_tls进行双重加密,并使用obfuscation_password进行流量混淆**
警告:**由于信任CDN证书并使用CDN网络进行传输,HTTPS连接对于CDN是透明的,CDN运营商可以直接审计Websocket流量传输内容。如果你使用了国内的CDN,应当假定CDN不可信任,请务必开启double_tls进行双重加密,并使用obfuscation_password进行流量混淆**

```enabled```表示是否启用Websocket承载流量,服务端开启后同时支持一般Trojan协议和基于websocket的Trojan协议,客户端开启后将只使用websocket承载所有Trojan协议流量。

Expand Down
2 changes: 1 addition & 1 deletion example/client.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"your_password"
],
"ssl": {
"sni": "your_domain_name"
"sni": "your-domain-name.com"
},
"mux" :{
"enabled": true
Expand Down
3 changes: 2 additions & 1 deletion example/server.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
],
"ssl": {
"cert": "your_cert.crt",
"key": "your_key.key"
"key": "your_key.key",
"sni": "your-domain-name.com"
},
"router":{
"enabled": true,
Expand Down

0 comments on commit b5b7845

Please sign in to comment.