frp 0.29.0
This commit is contained in:
parent
59aa7cd710
commit
6e819501d9
@ -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()
|
||||||
|
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user