diff --git a/README.md b/README.md index 6e0e0f4..e4aa999 100644 --- a/README.md +++ b/README.md @@ -188,6 +188,20 @@ client.json } ``` +可以使用更简明易读的YAML语法进行配置,下面是一个客户端的例子,与上面的client.json等价 + +client.yaml + +```yaml +run-type: client +local-addr: 127.0.0.1 +local-port: 1080 +remote-addr: www.your_awesome_domain_name.com +remote-port: 443 +password: + - your_awesome_password +``` + ### WebSocket diff --git a/docs/content/advance/customize-protocol-stack.md b/docs/content/advance/customize-protocol-stack.md index 6fd230c..f853ea5 100644 --- a/docs/content/advance/customize-protocol-stack.md +++ b/docs/content/advance/customize-protocol-stack.md @@ -38,10 +38,10 @@ Trojan-Go将所有协议抽象为隧道,每个隧道可能提供客户端, |shadowsocks | y | n | y | n | y | y | |websocket | y | n | y | n | y | y | |freedom | n | n | y | y | n | y | -|socks | y | n | y | y | y | n | +|socks | y | y | y | y | y | n | |http | y | n | y | n | y | n | |router | y | y | y | y | n | y | -|adapter | y | n | y | n | y | n | +|adapter | n | n | y | y | y | n | 自定义协议栈的工作方式是,定义树/链上节点并分别它们起名(tag)并添加配置,然后使用tag组成的有向路径,描述这棵树/链。例如,对于一个典型的Trojan-Go服务器,可以如此描述: @@ -55,7 +55,15 @@ Trojan-Go将所有协议抽象为隧道,每个隧道可能提供客户端, - router->freedom -对于入站,从根开始描述多条路径,组成一棵**多叉树**(也可以退化为一条链),不满足树性质的图将导致未定义的行为;对于出站,必须描述一条链。**注意,每条路径,必须以不需要下层提供流或包的隧道开始(transport/tproxy/dokodemo等),必须以能向上层提供包和流的隧道终止(trojan/simplesocks/freedom),且必须确认对应隧道是否可作为出站/入站** +对于入站,从根开始描述多条路径,组成一棵**多叉树**(也可以退化为一条链),不满足树性质的图将导致未定义的行为;对于出站,必须描述一条**链**。 + +每条路径必须满足这样的条件: + +1. 必须以**不需要下层提供流或包**的隧道开始(transport/adapter/tproxy/dokodemo等) + +2. 必须以**能向上层提供包和流**的隧道终止(trojan/simplesocks/freedom等) + +3. 出站单链上,隧道必须都可作为出站。入站的所有路径上,隧道必须都可作为入站。 要启用自定义协议栈,将```run_type```指定为custom,此时除```inbound```和```outbound```之外的其他选项将被忽略。 @@ -68,16 +76,19 @@ run-type: custom inbound: node: - - protocol: transport - tag: transport + - protocol: adapter + tag: adapter config: local-addr: 127.0.0.1 local-port: 1080 - protocol: socks tag: socks + config: + local-addr: 127.0.0.1 + local-port: 1080 path: - - - transport + - adapter - socks outbound: @@ -103,7 +114,7 @@ outbound: - 12345678 path: - - + - - transport - tls - trojan @@ -154,7 +165,7 @@ inbound: - 87654321 path: - - + - - transport - tls - trojan1 @@ -170,7 +181,6 @@ outbound: tag: freedom path: - - + - - freedom - ``` diff --git a/docs/content/basic/full-config.md b/docs/content/basic/full-config.md index 34a62be..5ff2ff6 100644 --- a/docs/content/basic/full-config.md +++ b/docs/content/basic/full-config.md @@ -37,6 +37,7 @@ weight: 30 "buffer_size": 32, "dns": [], "disable_http_check": false, + "udp_timeout": 10, "ssl": { "verify": true, "verify_hostname": true, @@ -176,6 +177,8 @@ weight: 30 ```disable_http_check```是否禁用HTTP可用性检查。 +```udp_timeout``` UDP会话超时时间。 + ### ```ssl```选项 ```verify```表示客户端(client/nat/forward)是否校验服务端提供的证书合法性,默认开启。出于安全性考虑,这个选项不应该在实际场景中选择false,否则可能遭受中间人攻击。如果使用自签名或者自签发的证书,开启```verify```会导致校验失败。这种情况下,应当保持```verify```开启,然后在```cert```中填写服务端的证书,即可正常连接。 @@ -222,7 +225,7 @@ weight: 30 ```concurrency```指单个TLS隧道可以承载的最大连接数,默认为8。这个数值越大,多连接并发时TLS由于握手产生的延迟就越低,但网络吞吐量可能会有所降低,填入负数或者0表示所有连接只使用一个TLS隧道承载。 -```idle_timeout```指TLS隧道在空闲多久之后关闭,单位为秒。如果数值为负值或0,则一旦TLS隧道空闲,则立即关闭。 +```idle_timeout```空闲超时时间。指TLS隧道在空闲多长时间之后关闭,单位为秒。如果数值为负值或0,则一旦TLS隧道空闲,则立即关闭。 ### ```router```路由选项 @@ -256,7 +259,7 @@ weight: 30 - "ip_on_demand",域名均解析为IP,在IP列表中匹配。该策略可能导致DNS泄漏或遭到污染。 -```geoip```和```geosite```字段指geoip和geosite数据库文件路径,默认使用当前目录的geoip.dat和geosite.dat。 +```geoip```和```geosite```字段指geoip和geosite数据库文件路径,默认使用程序所在目录的geoip.dat和geosite.dat。也可以通过指定环境变量TROJAN_GO_LOCATION_ASSET指定工作目录。 ### ```websocket```选项 @@ -266,7 +269,7 @@ Websocket传输是trojan-go的特性。在**正常的直接连接代理节点** ```path```指的是Websocket使用的URL路径,必须以斜杠("/")开头,如"/longlongwebsocketpath",并且服务器和客户端必须一致。 -```hostname```Websocket握手时使用的主机名,客户端如果留空则使用```remote_addr```填充。如果使用了CDN,这个选项一般填入域名。 +```hostname```Websocket握手时使用的主机名,客户端如果留空则使用```remote_addr```填充。如果使用了CDN,这个选项一般填入域名。不正确的```hostname```可能导致CDN无法转发请求。 ### ``shadowsocks`` AEAD加密选项 @@ -373,14 +376,14 @@ trojan-go基于gRPC提供了API,以支持服务端和客户端的管理和统 ```api_port```gRPC监听的端口。 -```ssl``` TLS相关设置 +```ssl``` TLS相关设置。 -- ```enabled```是否使用开启TLS传输 +- ```enabled```是否使用TLS传输gRPC流量。 -- ```key```,```cert```服务器私钥和证书 +- ```key```,```cert```服务器私钥和证书。 -- ```verify_client```是否认证客户端证书 +- ```verify_client```是否认证客户端证书。 -- ```client_cert```客户端证书列表 +- ```client_cert```如果开启客户端认证,此处填入认证的客户端证书列表。 警告:**不要将未开启TLS双向认证的API服务直接暴露在互联网上,否则可能导致各类安全问题。** diff --git a/docs/content/developer/api.md b/docs/content/developer/api.md index 309fc01..1859e5f 100644 --- a/docs/content/developer/api.md +++ b/docs/content/developer/api.md @@ -4,18 +4,19 @@ draft: false weight: 100 --- -Trojan-Go基于gRPC实现了API,使用protobuf交换数据。客户端可获取流量和速度信息;服务端可获取各用户流量,速度,在线情况,并动态增删用户和限制速度。可以通过在配置文件中添加```api```选项激活API模块。下面是一个例子 +Trojan-Go基于gRPC实现了API,使用protobuf交换数据。客户端可获取流量和速度信息;服务端可获取各用户流量,速度,在线情况,并动态增删用户和限制速度。可以通过在配置文件中添加```api```选项激活API模块。下面是一个例子,各字段含义参见“完整的配置文件”一节。 ```json +... "api": { "enabled": true, "api_addr": "0.0.0.0", "api_port": 10000, - "api_tls": true, "ssl": { + "enabled": true, "cert": "api_cert.crt", - "key": "api_key.crt", - "key_password": "", + "key": "api_key.key", + "verify_client": true, "client_cert": [ "api_client_cert1.crt", "api_client_cert2.crt"