From b5b7845408c9e46a80f4cb93ed5c2efd4db3f48d Mon Sep 17 00:00:00 2001 From: Page Fault Date: Thu, 28 May 2020 04:55:03 +0000 Subject: [PATCH] update docs --- docs/content/advance/router.md | 2 +- docs/content/basic/config.md | 13 +++++++------ docs/content/basic/full-config.md | 24 +++++++++++++++++------- example/client.json | 2 +- example/server.json | 3 ++- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/docs/content/advance/router.md b/docs/content/advance/router.md index 3222612e9..e9e0b16e1 100644 --- a/docs/content/advance/router.md +++ b/docs/content/advance/router.md @@ -23,7 +23,7 @@ Trojan-Go内建的路由模块可以帮助你实现国内直连,即客户端 "your_password" ], "ssl": { - "sni": "your_domain_name" + "sni": "your-domain-name.com" }, "mux" :{ "enabled": true diff --git a/docs/content/basic/config.md b/docs/content/basic/config.md index 98beb467d..1ce4fef69 100644 --- a/docs/content/basic/config.md +++ b/docs/content/basic/config.md @@ -65,14 +65,15 @@ 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网站。 @@ -80,13 +81,13 @@ sudo ./trojan-go -autocert renew - 如果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 ``` @@ -107,7 +108,7 @@ sudo ./trojan-go -autocert renew "your_awesome_password" ], "ssl": { - "sni": "your_domain_name" + "sni": "your-domain-name.com" } } ``` @@ -118,7 +119,7 @@ sudo ./trojan-go -autocert renew 配置完成后,可以使用 -```json +```shell ./trojan-go -config ./client.json ``` diff --git a/docs/content/basic/full-config.md b/docs/content/basic/full-config.md index d5f44f8e4..acd8dfa10 100644 --- a/docs/content/basic/full-config.md +++ b/docs/content/basic/full-config.md @@ -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": "", @@ -85,6 +87,7 @@ weight: 30 "double_tls": true, "ssl": { "verify": true, + "verify_hostname": true, "cert": "", "key": "", "key_password": "", @@ -92,7 +95,8 @@ weight: 30 "sni": "", "session_ticket": true, "reuse_session": true, - "plain_http_response": "" + "plain_http_response": "", + "key_log": "" } }, "forward_proxy": { @@ -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端口 @@ -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一致),否则客户端可能无法验证远端证书有效性从而无法连接。 @@ -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```路由选项 @@ -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协议流量。 diff --git a/example/client.json b/example/client.json index a18d52a67..93a4355b8 100644 --- a/example/client.json +++ b/example/client.json @@ -8,7 +8,7 @@ "your_password" ], "ssl": { - "sni": "your_domain_name" + "sni": "your-domain-name.com" }, "mux" :{ "enabled": true diff --git a/example/server.json b/example/server.json index ab8ef4b83..cb6d89835 100755 --- a/example/server.json +++ b/example/server.json @@ -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,