Skip to content

Commit

Permalink
update docs, default alpn settings
Browse files Browse the repository at this point in the history
  • Loading branch information
p4gefau1t committed May 16, 2020
1 parent 2fef3a7 commit 0d785fd
Show file tree
Hide file tree
Showing 9 changed files with 25 additions and 18 deletions.
1 change: 0 additions & 1 deletion build/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,5 @@ import (
_ "github.com/p4gefau1t/trojan-go/common"
_ "github.com/p4gefau1t/trojan-go/log"
_ "github.com/p4gefau1t/trojan-go/log/golog"
_ "github.com/p4gefau1t/trojan-go/version"
//_ "github.com/p4gefau1t/trojan-go/log/simplelog" //for android
)
1 change: 1 addition & 0 deletions build/other.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ package build
import (
_ "github.com/p4gefau1t/trojan-go/daemon"
_ "github.com/p4gefau1t/trojan-go/easy"
_ "github.com/p4gefau1t/trojan-go/version"
)
2 changes: 1 addition & 1 deletion cert/cert.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func (u *User) GetPrivateKey() crypto.PrivateKey {
func createAndSaveUserKey() (*ecdsa.PrivateKey, error) {
_, err := os.Stat("user.key")
if os.IsExist(err) {
return nil, common.NewError("User.key exists, cannot create new user")
return nil, common.NewError("user.key exists, unable to create new user")
}
userKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
common.Must(err)
Expand Down
2 changes: 1 addition & 1 deletion common/net.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ func (a *Address) Marshal(r io.Reader) error {
byteBuf := [1]byte{}
_, err := r.Read(byteBuf[:])
if err != nil {
return NewError("Cannot read atype").Base(err)
return NewError("Unable to read atype").Base(err)
}
a.AddressType = AddressType(byteBuf[0])
switch a.AddressType {
Expand Down
6 changes: 5 additions & 1 deletion conf/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,11 @@ func ParseJSON(data []byte) (*GlobalConfig, error) {
VerifyHostname: true,
SessionTicket: true,
ReuseSession: true,
Fingerprint: "firefox",
ALPN: []string{
"h2",
"http/1.1",
},
Fingerprint: "firefox",
},
Mux: MuxConfig{
IdleTimeout: 60,
Expand Down
11 changes: 7 additions & 4 deletions docs/content/basic/full-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,10 @@ weight: 30
"curves": "",
"prefer_server_cipher": false,
"sni": "",
"alpn": [],
"alpn": [
"h2",
"http/1.1"
],
"session_ticket": true,
"reuse_session": true,
"plain_http_response": "",
Expand Down Expand Up @@ -165,11 +168,11 @@ weight: 30

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

```alpn```为TLS的应用层协议协商指定协议。在TLS Client/Server Hello中传输,协商应用层使用的协议,仅用作指纹伪造,并无实际作用。**如果使用了CDN,错误的alpn字段可能导致与CDN握手失败**
```alpn```为TLS的应用层协议协商指定协议。在TLS Client/Server Hello中传输,协商应用层使用的协议,仅用作指纹伪造,并无实际作用。**如果使用了CDN,错误的alpn字段可能导致与CDN协商错误的应用层协议**

```prefer_server_cipher```客户端是否偏好选择服务端在协商中提供的密码学套件。

```cipher``````cipher13```指TLS使用的密码学套件。只有在你明确知道自己在做什么的情况下,才应该去填写此项以修改trojan-go使用的TLS密码学套件。**正常情况下,你应该将其留空或者不填**,trojan-go会根据当前硬件平台以及远端的情况,自动选择最合适的加密算法以提升性能和安全性。如果需要填写,密码学套件名用分号(":")分隔。Go的TLS库中弃用了TLS1.2中不安全的密码学套件,并完全支持TLS1.3。默认情况下,trojan-go将优先使用更安全的TLS1.3
```cipher``````cipher13```指TLS使用的密码学套件。只有在你明确知道自己在做什么的情况下,才应该去填写此项以修改trojan-go使用的TLS密码学套件。**正常情况下,你应该将其留空或者不填**,trojan-go会根据当前硬件平台以及远端的情况,自动选择最合适的加密算法以提升性能和安全性。如果需要填写,密码学套件名用分号(":")分隔。Go的TLS库中弃用了TLS1.2中不安全的密码学套件,并完全支持TLS1.3。默认情况下,trojan-go将优先使用更安全的TLS1.3

```curves```指定TLS在ECDHE中偏好使用的椭圆曲线。只有你明确知道自己在做什么的情况下,才应该填写此项。曲线名称用分号(":")分隔。

Expand All @@ -191,7 +194,7 @@ weight: 30

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

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

Expand Down
4 changes: 2 additions & 2 deletions docs/content/developer/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ draft: false
weight: 100
---

Trojan-Go基于grpc实现了API,使用protobuf交换数据。客户端可获取流量和速度信息;服务端可获取各用户流量,速度,在线情况,并动态增删用户和限制速度。可以通过在配置文件中添加```api```选项激活API模块。下面是一个例子
Trojan-Go基于gRPC实现了API,使用protobuf交换数据。客户端可获取流量和速度信息;服务端可获取各用户流量,速度,在线情况,并动态增删用户和限制速度。可以通过在配置文件中添加```api```选项激活API模块。下面是一个例子

```json
"api": {
Expand All @@ -14,4 +14,4 @@ Trojan-Go基于grpc实现了API,使用protobuf交换数据。客户端可获
}
```

目前API处于开发阶段,服务和rpc定义可以参考api文件夹下api.proto文件。
目前API处于开发阶段,服务和RPC定义可以参考api文件夹下api.proto文件。
2 changes: 1 addition & 1 deletion protocol/direct/outbound.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ func (o *DirectOutboundPacketSession) WritePacket(req *protocol.Request, packet
}
conn, err := net.DialUDP("udp", nil, remote)
if err != nil {
return 0, common.NewError("cannot dial udp").Base(err)
return 0, common.NewError("Failed to dial udp").Base(err)
}
log.Debug("udp directly dialing to", remote)
go o.listenConn(req, conn)
Expand Down
14 changes: 7 additions & 7 deletions proxy/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,13 +131,6 @@ func (s *Server) ListenTCP(errChan chan error) {
return
}

tlsConfig := &tls.Config{
Certificates: s.config.TLS.KeyPair,
CipherSuites: s.config.TLS.CipherSuites,
PreferServerCipherSuites: s.config.TLS.PreferServerCipher,
SessionTicketsDisabled: !s.config.TLS.SessionTicket,
NextProtos: s.config.TLS.ALPN,
}
for {
conn, err := listener.Accept()
if err != nil {
Expand All @@ -161,6 +154,13 @@ func (s *Server) ListenTCP(errChan chan error) {
rewindConn := common.NewRewindConn(conn)
rewindConn.R.SetBufferSize(2048)

tlsConfig := &tls.Config{
Certificates: s.config.TLS.KeyPair,
CipherSuites: s.config.TLS.CipherSuites,
PreferServerCipherSuites: s.config.TLS.PreferServerCipher,
SessionTicketsDisabled: !s.config.TLS.SessionTicket,
NextProtos: s.config.TLS.ALPN,
}
tlsConn := tls.Server(rewindConn, tlsConfig)
err = tlsConn.Handshake()
rewindConn.R.StopBuffering()
Expand Down

0 comments on commit 0d785fd

Please sign in to comment.