add default dns port

This commit is contained in:
p4gefau1t
2020-05-04 16:54:41 -04:00
parent ee228ce950
commit 17cf8d4534
3 changed files with 25 additions and 9 deletions
+7 -5
View File
@@ -122,15 +122,17 @@ weight: 30
```password```可以填入多个密码。除了使用配置文件配置密码之外,trojan-go还支持使用mysql配置密码,参见下文。客户端的密码,只有与服务端配置文件中或者在数据库中的密码记录一致,才能通过服务端的校验,正常使用代理服务。
```dns```指定trojan-go使用的DNS服务器列表,如果不指定则使用主机默认DNS。如果指定了服务器,按照列表顺序依次查询,支持UDP/TCP/DOH/DOT,查询结果会被缓存五分钟。可以使用URL格式描述服务器,必须指明端口号,例如
```dns```指定trojan-go使用的DNS服务器列表,如果不指定则使用主机默认DNS。如果指定了服务器,按照列表顺序依次查询,支持UDP/TCP/DOH/DOT,查询结果会被缓存五分钟。使用URL格式描述服务器,例如
- "1.1.1.1:53",基于UDP的DNS服务器
- "udp://1.1.1.1",基于UDP的DNS服务器,默认53端口
- "udp://1.1.1.1:53",与上一等价
- "udp://1.1.1.1:53",与上一等价
- "tcp://1.1.1.1:53",基于TCP的DNS服务器
- "1.1.1.1",与上一项等价
- "dot://1.1.1.1:843",基于DOT(DNS Over TLS)的DNS服务器
- "tcp://1.1.1.1",基于TCP的DNS服务器,默认53端口
- "dot://1.1.1.1",基于DOT(DNS Over TLS)的DNS服务器,默认853端口
使用DOT可以防止DNS请求泄露,但由于TLS的握手耗费更多时间,查询速度也会有一定的下降,请自行斟酌性能和安全性的平衡。
+16 -2
View File
@@ -58,6 +58,8 @@ func NewOutboundConnSession(ctx context.Context, req *protocol.Request, config *
for _, s := range config.DNS {
var dnsType conf.DNSType
var dnsAddr string
var dnsHost, dnsPort string
var err error
dnsURL, err := url.Parse(s)
if err != nil || dnsURL.Scheme == "" {
dnsType = conf.UDP
@@ -67,6 +69,18 @@ func NewOutboundConnSession(ctx context.Context, req *protocol.Request, config *
dnsAddr = dnsURL.Host
}
dnsHost, dnsPort, err = net.SplitHostPort(dnsAddr)
if err != nil { //port not specifiet
dnsHost = dnsAddr
switch dnsType {
case conf.DOT:
dnsPort = "853"
case conf.TCP, conf.UDP:
dnsPort = "53"
}
}
dnsURL.Port()
resolver := &net.Resolver{
PreferGo: true,
Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
@@ -75,13 +89,13 @@ func NewOutboundConnSession(ctx context.Context, req *protocol.Request, config *
d := net.Dialer{
Timeout: time.Second * time.Duration(protocol.UDPTimeout),
}
conn, err := d.DialContext(ctx, string(dnsType), dnsAddr)
conn, err := d.DialContext(ctx, string(dnsType), dnsHost+":"+dnsPort)
if err != nil {
return nil, err
}
return conn, nil
case conf.DOT:
tlsConn, err := tls.Dial("tcp", dnsAddr, nil)
tlsConn, err := tls.Dial("tcp", dnsHost+":"+dnsPort, nil)
if err != nil {
return nil, err
}
+2 -2
View File
@@ -219,8 +219,8 @@ func addAPIConfig(config *conf.GlobalConfig) *conf.GlobalConfig {
func addDNSConfig(config *conf.GlobalConfig) *conf.GlobalConfig {
config.DNS = []string{
"dot://223.5.5.5:853",
"8.8.8.8:53",
"dot://223.5.5.5",
"8.8.8.8",
}
return config
}