frp 0.29.0

This commit is contained in:
haidy 2019-10-06 13:27:45 +08:00
parent 59aa7cd710
commit 6e819501d9
6 changed files with 83 additions and 65 deletions

View File

@ -261,7 +261,7 @@ func (pxy *XtcpProxy) InWorkConn(conn frpNet.Conn, m *msg.StartWorkConn) {
Sid: natHoleSidMsg.Sid, Sid: natHoleSidMsg.Sid,
} }
raddr, _ := net.ResolveUDPAddr("udp", newAddress(pxy.clientCfg.ServerAddr, pxy.clientCfg.ServerUdpPort)) raddr, _ := net.ResolveUDPAddr("udp", newAddress(pxy.clientCfg.ServerAddr, pxy.serverUDPPort))
clientConn, err := net.DialUDP("udp", nil, raddr) clientConn, err := net.DialUDP("udp", nil, raddr)
defer clientConn.Close() defer clientConn.Close()

View File

@ -86,7 +86,7 @@ func NewService(cfg config.ClientCommonConf, pxyCfgs map[string]config.ProxyConf
pxyCfgs: pxyCfgs, pxyCfgs: pxyCfgs,
visitorCfgs: visitorCfgs, visitorCfgs: visitorCfgs,
exit: 0, exit: 0,
closedCh: make(chan int), closedCh: make(chan bool),
} }
return return
} }
@ -126,7 +126,7 @@ func (svr *Service) Run(isCmd bool) error {
if svr.cfg.AdminPort != 0 { if svr.cfg.AdminPort != 0 {
// Init admin server assets // Init admin server assets
err := assets.Load(svr.cfg.AssetsDir) err := assets.Load(svr.cfg.AssetsDir, assets.Frpc)
if err != nil { if err != nil {
return fmt.Errorf("Load assets error: %v", err) return fmt.Errorf("Load assets error: %v", err)
} }

View File

@ -196,7 +196,7 @@ func (sv *XtcpVisitor) handleConn(userConn frpNet.Conn) {
return return
} }
raddr, err := net.ResolveUDPAddr("udp", newAddress(sv.ctl.clientCfg.ServerAddr, sv.ctl.ServerUdpPort)) raddr, err := net.ResolveUDPAddr("udp", newAddress(sv.ctl.clientCfg.ServerAddr, sv.ctl.serverUDPPort))
if err != nil { if err != nil {
sv.Error("resolve server UDP addr error") sv.Error("resolve server UDP addr error")
return return

View File

@ -123,6 +123,26 @@ func NewService(cfgFilePath string) (ser *client.Service, err error) {
return returnClient(cfgFilePath, false) return returnClient(cfgFilePath, false)
} }
func returnClient(cfgFilePath string, run bool) (svr *client.Service, err error) {
var content string
content, err = config.GetRenderedConfFromFile(cfgFilePath)
if err != nil {
return
}
cfg, err := parseClientCommonCfg(CfgFileTypeIni, content)
if err != nil {
return
}
pxyCfgs, visitorCfgs, err := config.LoadAllConfFromIni(cfg.User, content, cfg.Start)
if err != nil {
return nil, err
}
return returnService(cfg, pxyCfgs, visitorCfgs, cfgFile)
}
func StopFrp() (err error) { func StopFrp() (err error) {
if service == nil { if service == nil {
return fmt.Errorf("frp not start") return fmt.Errorf("frp not start")
@ -262,10 +282,10 @@ func startService(cfg config.ClientCommonConf, pxyCfgs map[string]config.ProxyCo
return return
} }
func returnService(pxyCfgs map[string]config.ProxyConf, visitorCfgs map[string]config.VisitorConf) (svr *client.Service, err error) { func returnService(cfg config.ClientCommonConf, pxyCfgs map[string]config.ProxyConf, visitorCfgs map[string]config.VisitorConf, cfgFile string) (svr *client.Service, err error) {
log.InitLog(g.GlbClientCfg.LogWay, g.GlbClientCfg.LogFile, g.GlbClientCfg.LogLevel, g.GlbClientCfg.LogMaxDays) log.InitLog(cfg.LogWay, cfg.LogFile, cfg.LogLevel, cfg.LogMaxDays, cfg.DisableLogColor)
if g.GlbClientCfg.DnsServer != "" { if cfg.DnsServer != "" {
s := g.GlbClientCfg.DnsServer s := cfg.DnsServer
if !strings.Contains(s, ":") { if !strings.Contains(s, ":") {
s += ":53" s += ":53"
} }
@ -277,14 +297,14 @@ func returnService(pxyCfgs map[string]config.ProxyConf, visitorCfgs map[string]c
}, },
} }
} }
svr, errRet := client.NewService(pxyCfgs, visitorCfgs) svr, errRet := client.NewService(cfg, pxyCfgs, visitorCfgs, cfgFile)
if errRet != nil { if errRet != nil {
err = errRet err = errRet
return return
} }
// Capture the exit signal if we use kcp. // Capture the exit signal if we use kcp.
if g.GlbClientCfg.Protocol == "kcp" { if cfg.Protocol == "kcp" {
go handleSignal(svr) go handleSignal(svr)
} }

View File

@ -20,7 +20,6 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/fatedier/frp/g"
"github.com/fatedier/frp/models/config" "github.com/fatedier/frp/models/config"
"github.com/fatedier/frp/server" "github.com/fatedier/frp/server"
"github.com/fatedier/frp/utils/log" "github.com/fatedier/frp/utils/log"
@ -53,6 +52,7 @@ var (
logFile string logFile string
logLevel string logLevel string
logMaxDays int64 logMaxDays int64
disableLogColor bool
token string token string
subDomainHost string subDomainHost string
tcpMux bool tcpMux bool
@ -62,7 +62,7 @@ var (
) )
func init() { func init() {
rootCmd.PersistentFlags().StringVarP(&cfgFile, "", "c", "", "config file of frps") rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "config file of frps")
rootCmd.PersistentFlags().BoolVarP(&showVersion, "version", "v", false, "version of frpc") rootCmd.PersistentFlags().BoolVarP(&showVersion, "version", "v", false, "version of frpc")
rootCmd.PersistentFlags().StringVarP(&bindAddr, "bind_addr", "", "0.0.0.0", "bind address") rootCmd.PersistentFlags().StringVarP(&bindAddr, "bind_addr", "", "0.0.0.0", "bind address")
@ -79,7 +79,9 @@ func init() {
rootCmd.PersistentFlags().StringVarP(&dashboardPwd, "dashboard_pwd", "", "admin", "dashboard password") rootCmd.PersistentFlags().StringVarP(&dashboardPwd, "dashboard_pwd", "", "admin", "dashboard password")
rootCmd.PersistentFlags().StringVarP(&logFile, "log_file", "", "console", "log file") rootCmd.PersistentFlags().StringVarP(&logFile, "log_file", "", "console", "log file")
rootCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level") rootCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level")
rootCmd.PersistentFlags().Int64VarP(&logMaxDays, "log_max_days", "", 3, "log_max_days") rootCmd.PersistentFlags().Int64VarP(&logMaxDays, "log_max_days", "", 3, "log max days")
rootCmd.PersistentFlags().BoolVarP(&disableLogColor, "disable_log_color", "", false, "disable log color in console")
rootCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token") rootCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token")
rootCmd.PersistentFlags().StringVarP(&subDomainHost, "subdomain_host", "", "", "subdomain host") rootCmd.PersistentFlags().StringVarP(&subDomainHost, "subdomain_host", "", "", "subdomain host")
rootCmd.PersistentFlags().StringVarP(&allowPorts, "allow_ports", "", "", "allow ports") rootCmd.PersistentFlags().StringVarP(&allowPorts, "allow_ports", "", "", "allow ports")
@ -95,6 +97,7 @@ var rootCmd = &cobra.Command{
return nil return nil
} }
var cfg config.ServerCommonConf
var err error var err error
if cfgFile != "" { if cfgFile != "" {
var content string var content string
@ -102,16 +105,15 @@ var rootCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
g.GlbServerCfg.CfgFile = cfgFile cfg, err = parseServerCommonCfg(CfgFileTypeIni, content)
err = parseServerCommonCfg(CfgFileTypeIni, content)
} else { } else {
err = parseServerCommonCfg(CfgFileTypeCmd, "") cfg, err = parseServerCommonCfg(CfgFileTypeCmd, "")
} }
if err != nil { if err != nil {
return err return err
} }
err = runServer() err = runServer(cfg)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
os.Exit(1) os.Exit(1)
@ -126,52 +128,51 @@ func Execute() {
} }
} }
func parseServerCommonCfg(fileType int, content string) (err error) { func parseServerCommonCfg(fileType int, content string) (cfg config.ServerCommonConf, err error) {
if fileType == CfgFileTypeIni { if fileType == CfgFileTypeIni {
err = parseServerCommonCfgFromIni(content) cfg, err = parseServerCommonCfgFromIni(content)
} else if fileType == CfgFileTypeCmd { } else if fileType == CfgFileTypeCmd {
err = parseServerCommonCfgFromCmd() cfg, err = parseServerCommonCfgFromCmd()
} }
if err != nil { if err != nil {
return return
} }
err = g.GlbServerCfg.ServerCommonConf.Check() err = cfg.Check()
if err != nil { if err != nil {
return return
} }
config.InitServerCfg(&g.GlbServerCfg.ServerCommonConf)
return return
} }
func parseServerCommonCfgFromIni(content string) (err error) { func parseServerCommonCfgFromIni(content string) (config.ServerCommonConf, error) {
cfg, err := config.UnmarshalServerConfFromIni(&g.GlbServerCfg.ServerCommonConf, content) cfg, err := config.UnmarshalServerConfFromIni(content)
if err != nil { if err != nil {
return err return config.ServerCommonConf{}, err
} }
g.GlbServerCfg.ServerCommonConf = *cfg return cfg, nil
return
} }
func parseServerCommonCfgFromCmd() (err error) { func parseServerCommonCfgFromCmd() (cfg config.ServerCommonConf, err error) {
g.GlbServerCfg.BindAddr = bindAddr cfg = config.GetDefaultServerConf()
g.GlbServerCfg.BindPort = bindPort
g.GlbServerCfg.BindUdpPort = bindUdpPort cfg.BindAddr = bindAddr
g.GlbServerCfg.KcpBindPort = kcpBindPort cfg.BindPort = bindPort
g.GlbServerCfg.ProxyBindAddr = proxyBindAddr cfg.BindUdpPort = bindUdpPort
g.GlbServerCfg.VhostHttpPort = vhostHttpPort cfg.KcpBindPort = kcpBindPort
g.GlbServerCfg.VhostHttpsPort = vhostHttpsPort cfg.ProxyBindAddr = proxyBindAddr
g.GlbServerCfg.VhostHttpTimeout = vhostHttpTimeout cfg.VhostHttpPort = vhostHttpPort
g.GlbServerCfg.DashboardAddr = dashboardAddr cfg.VhostHttpsPort = vhostHttpsPort
g.GlbServerCfg.DashboardPort = dashboardPort cfg.VhostHttpTimeout = vhostHttpTimeout
g.GlbServerCfg.DashboardUser = dashboardUser cfg.DashboardAddr = dashboardAddr
g.GlbServerCfg.DashboardPwd = dashboardPwd cfg.DashboardPort = dashboardPort
g.GlbServerCfg.LogFile = logFile cfg.DashboardUser = dashboardUser
g.GlbServerCfg.LogLevel = logLevel cfg.DashboardPwd = dashboardPwd
g.GlbServerCfg.LogMaxDays = logMaxDays cfg.LogFile = logFile
g.GlbServerCfg.Token = token cfg.LogLevel = logLevel
g.GlbServerCfg.SubDomainHost = subDomainHost cfg.LogMaxDays = logMaxDays
cfg.Token = token
cfg.SubDomainHost = subDomainHost
if len(allowPorts) > 0 { if len(allowPorts) > 0 {
// e.g. 1000-2000,2001,2002,3000-4000 // e.g. 1000-2000,2001,2002,3000-4000
ports, errRet := util.ParseRangeNumbers(allowPorts) ports, errRet := util.ParseRangeNumbers(allowPorts)
@ -181,28 +182,27 @@ func parseServerCommonCfgFromCmd() (err error) {
} }
for _, port := range ports { for _, port := range ports {
g.GlbServerCfg.AllowPorts[int(port)] = struct{}{} cfg.AllowPorts[int(port)] = struct{}{}
} }
} }
g.GlbServerCfg.MaxPortsPerClient = maxPortsPerClient cfg.MaxPortsPerClient = maxPortsPerClient
if logFile == "console" { if logFile == "console" {
g.GlbClientCfg.LogWay = "console" cfg.LogWay = "console"
} else { } else {
g.GlbClientCfg.LogWay = "file" cfg.LogWay = "file"
} }
cfg.DisableLogColor = disableLogColor
return return
} }
func runServer() (err error) { func runServer(cfg config.ServerCommonConf) (err error) {
log.InitLog(g.GlbServerCfg.LogWay, g.GlbServerCfg.LogFile, g.GlbServerCfg.LogLevel, log.InitLog(cfg.LogWay, cfg.LogFile, cfg.LogLevel, cfg.LogMaxDays, cfg.DisableLogColor)
g.GlbServerCfg.LogMaxDays) svr, err := server.NewService(cfg)
svr, err := server.NewService()
if err != nil { if err != nil {
return err return err
} }
log.Info("Start frps success") log.Info("Start frps success")
server.ServerService = svr
svr.Run() svr.Run()
return return
} }
@ -216,35 +216,33 @@ func RunFrps(cfgFile string) error {
} }
var err error var err error
var cfg config.ServerCommonConf
if cfgFile != "" { if cfgFile != "" {
var content string var content string
content, err = config.GetRenderedConfFromFile(cfgFile) content, err = config.GetRenderedConfFromFile(cfgFile)
if err != nil { if err != nil {
return err return err
} }
g.GlbServerCfg.CfgFile = cfgFile cfg, err = parseServerCommonCfg(CfgFileTypeIni, content)
err = parseServerCommonCfg(CfgFileTypeIni, content)
} else { } else {
err = parseServerCommonCfg(CfgFileTypeCmd, "") cfg, err = parseServerCommonCfg(CfgFileTypeCmd, "")
} }
if err != nil { if err != nil {
return err return err
} }
err = runBackgroundServer() err = runBackgroundServer(cfg)
fmt.Println(err) fmt.Println(err)
return err return err
} }
func runBackgroundServer() (err error) { func runBackgroundServer(cfg config.ServerCommonConf) (err error) {
log.InitLog(g.GlbServerCfg.LogWay, g.GlbServerCfg.LogFile, g.GlbServerCfg.LogLevel, log.InitLog(cfg.LogWay, cfg.LogFile, cfg.LogLevel, cfg.LogMaxDays, cfg.DisableLogColor)
g.GlbServerCfg.LogMaxDays) svr, err := server.NewService(cfg)
svr, err := server.NewService()
if err != nil { if err != nil {
return err return err
} }
log.Info("Start frps success") log.Info("Start frps success")
server.ServerService = svr
service = svr service = svr
go svr.Run() go svr.Run()
return return

View File

@ -242,7 +242,7 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) {
// Create dashboard web server. // Create dashboard web server.
if cfg.DashboardPort > 0 { if cfg.DashboardPort > 0 {
// Init dashboard assets // Init dashboard assets
err = assets.Load(cfg.AssetsDir) err = assets.Load(cfg.AssetsDir, assets.Frps)
if err != nil { if err != nil {
err = fmt.Errorf("Load assets error: %v", err) err = fmt.Errorf("Load assets error: %v", err)
return return