frpc: support specify default dns server, close #700

This commit is contained in:
fatedier 2018-04-23 02:59:40 +08:00
parent c47aad348d
commit 00b9ba95ae
3 changed files with 24 additions and 0 deletions

View File

@ -15,8 +15,10 @@
package sub package sub
import ( import (
"context"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net"
"os" "os"
"os/signal" "os/signal"
"strconv" "strconv"
@ -188,6 +190,19 @@ func runClient(cfgFilePath string) (err error) {
func startService(pxyCfgs map[string]config.ProxyConf, visitorCfgs map[string]config.ProxyConf) (err error) { func startService(pxyCfgs map[string]config.ProxyConf, visitorCfgs map[string]config.ProxyConf) (err error) {
log.InitLog(g.GlbClientCfg.LogWay, g.GlbClientCfg.LogFile, g.GlbClientCfg.LogLevel, g.GlbClientCfg.LogMaxDays) log.InitLog(g.GlbClientCfg.LogWay, g.GlbClientCfg.LogFile, g.GlbClientCfg.LogLevel, g.GlbClientCfg.LogMaxDays)
if g.GlbClientCfg.DnsServer != "" {
s := g.GlbClientCfg.DnsServer
if !strings.Contains(s, ":") {
s += ":53"
}
// Change default dns server for frpc
net.DefaultResolver = &net.Resolver{
PreferGo: true,
Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
return net.Dial("udp", s)
},
}
}
svr := client.NewService(pxyCfgs, visitorCfgs) svr := client.NewService(pxyCfgs, visitorCfgs)
// Capture the exit signal if we use kcp. // Capture the exit signal if we use kcp.

View File

@ -43,6 +43,9 @@ login_fail_exit = true
# now it supports tcp and kcp, default is tcp # now it supports tcp and kcp, default is tcp
protocol = tcp protocol = tcp
# specify a dns server, so frpc will use this instead of default one
dns_server = 8.8.8.8
# proxy names you want to start divided by ',' # proxy names you want to start divided by ','
# default is empty, means all proxies # default is empty, means all proxies
# start = ssh,dns # start = ssh,dns

View File

@ -40,6 +40,7 @@ type ClientCommonConf struct {
PoolCount int `json:"pool_count"` PoolCount int `json:"pool_count"`
TcpMux bool `json:"tcp_mux"` TcpMux bool `json:"tcp_mux"`
User string `json:"user"` User string `json:"user"`
DnsServer string `json:"dns_server"`
LoginFailExit bool `json:"login_fail_exit"` LoginFailExit bool `json:"login_fail_exit"`
Start map[string]struct{} `json:"start"` Start map[string]struct{} `json:"start"`
Protocol string `json:"protocol"` Protocol string `json:"protocol"`
@ -64,6 +65,7 @@ func GetDefaultClientConf() *ClientCommonConf {
PoolCount: 1, PoolCount: 1,
TcpMux: true, TcpMux: true,
User: "", User: "",
DnsServer: "",
LoginFailExit: true, LoginFailExit: true,
Start: make(map[string]struct{}), Start: make(map[string]struct{}),
Protocol: "tcp", Protocol: "tcp",
@ -166,6 +168,10 @@ func UnmarshalClientConfFromIni(defaultCfg *ClientCommonConf, content string) (c
cfg.User = tmpStr cfg.User = tmpStr
} }
if tmpStr, ok = conf.Get("common", "dns_server"); ok {
cfg.DnsServer = tmpStr
}
if tmpStr, ok = conf.Get("common", "start"); ok { if tmpStr, ok = conf.Get("common", "start"); ok {
proxyNames := strings.Split(tmpStr, ",") proxyNames := strings.Split(tmpStr, ",")
for _, name := range proxyNames { for _, name := range proxyNames {