mirror of
https://github.com/p4gefau1t/trojan-go.git
synced 2024-04-21 12:21:34 +00:00
add default dns port
This commit is contained in:
@@ -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的握手耗费更多时间,查询速度也会有一定的下降,请自行斟酌性能和安全性的平衡。
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user