增加设置指定访问某个用户的服务/代理

This commit is contained in:
yaqi 2020-05-01 16:38:46 +08:00
parent 2406ecdfea
commit 18c0792b85
6 changed files with 41 additions and 17 deletions

View File

@ -380,6 +380,8 @@ frp 提供了一种新的代理类型 **xtcp** 用于应对在希望传输大量
role = visitor
# 要访问的 xtcp 代理的名字
server_name = p2p_ssh
# 要访问的 xtcp 代理属于哪个用户
server_user = test
sk = abcdefg
# 绑定本地端口用于访问 ssh 服务
bind_addr = 127.0.0.1

View File

@ -45,6 +45,7 @@ var (
serverAddr string
user string
serverUser string // Used to choose custom user's service
protocol string
token string
logLevel string
@ -158,6 +159,7 @@ func parseClientCommonCfgFromCmd() (cfg config.ClientCommonConf, err error) {
}
cfg.User = user
cfg.ServerUser = serverUser
cfg.Protocol = protocol
cfg.LogLevel = logLevel
cfg.LogFile = logFile
@ -231,3 +233,13 @@ func startService(cfg config.ClientCommonConf, pxyCfgs map[string]config.ProxyCo
}
return
}
func getProxyPrefix(customServerUser, customUser string) string{
if customServerUser != "" {
return customServerUser + "."
}
if customUser != "" {
return customUser + "."
}
return ""
}

View File

@ -27,6 +27,7 @@ import (
func init() {
stcpCmd.PersistentFlags().StringVarP(&serverAddr, "server_addr", "s", "127.0.0.1:7000", "frp server's address")
stcpCmd.PersistentFlags().StringVarP(&user, "user", "u", "", "user")
stcpCmd.PersistentFlags().StringVarP(&serverUser, "server_user", "", "", "server user")
stcpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket")
stcpCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token")
stcpCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level")
@ -61,12 +62,9 @@ var stcpCmd = &cobra.Command{
proxyConfs := make(map[string]config.ProxyConf)
visitorConfs := make(map[string]config.VisitorConf)
var prefix string
if user != "" {
prefix = user + "."
}
if role == "server" {
prefix := getProxyPrefix("", user)
cfg := &config.StcpProxyConf{}
cfg.ProxyName = prefix + proxyName
cfg.ProxyType = consts.StcpProxy
@ -83,6 +81,8 @@ var stcpCmd = &cobra.Command{
}
proxyConfs[cfg.ProxyName] = cfg
} else if role == "visitor" {
prefix := getProxyPrefix(serverUser, user)
cfg := &config.StcpVisitorConf{}
cfg.ProxyName = prefix + proxyName
cfg.ProxyType = consts.StcpProxy

View File

@ -27,6 +27,7 @@ import (
func init() {
sudpCmd.PersistentFlags().StringVarP(&serverAddr, "server_addr", "s", "127.0.0.1:7000", "frp server's address")
sudpCmd.PersistentFlags().StringVarP(&user, "user", "u", "", "user")
stcpCmd.PersistentFlags().StringVarP(&serverUser, "server_user", "", "", "server user")
sudpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket")
sudpCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token")
sudpCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level")
@ -61,12 +62,9 @@ var sudpCmd = &cobra.Command{
proxyConfs := make(map[string]config.ProxyConf)
visitorConfs := make(map[string]config.VisitorConf)
var prefix string
if user != "" {
prefix = user + "."
}
if role == "server" {
prefix := getProxyPrefix("", user)
cfg := &config.SudpProxyConf{}
cfg.ProxyName = prefix + proxyName
cfg.ProxyType = consts.SudpProxy
@ -83,6 +81,8 @@ var sudpCmd = &cobra.Command{
}
proxyConfs[cfg.ProxyName] = cfg
} else if role == "visitor" {
prefix := getProxyPrefix(serverUser, user)
cfg := &config.SudpVisitorConf{}
cfg.ProxyName = prefix + proxyName
cfg.ProxyType = consts.SudpProxy

View File

@ -27,6 +27,7 @@ import (
func init() {
xtcpCmd.PersistentFlags().StringVarP(&serverAddr, "server_addr", "s", "127.0.0.1:7000", "frp server's address")
xtcpCmd.PersistentFlags().StringVarP(&user, "user", "u", "", "user")
stcpCmd.PersistentFlags().StringVarP(&serverUser, "server_user", "", "", "server user")
xtcpCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket")
xtcpCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token")
xtcpCmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level")
@ -61,12 +62,9 @@ var xtcpCmd = &cobra.Command{
proxyConfs := make(map[string]config.ProxyConf)
visitorConfs := make(map[string]config.VisitorConf)
var prefix string
if user != "" {
prefix = user + "."
}
if role == "server" {
prefix := getProxyPrefix("", user)
cfg := &config.XtcpProxyConf{}
cfg.ProxyName = prefix + proxyName
cfg.ProxyType = consts.XtcpProxy
@ -83,6 +81,8 @@ var xtcpCmd = &cobra.Command{
}
proxyConfs[cfg.ProxyName] = cfg
} else if role == "visitor" {
prefix := getProxyPrefix(serverUser, user)
cfg := &config.XtcpVisitorConf{}
cfg.ProxyName = prefix + proxyName
cfg.ProxyType = consts.XtcpProxy

View File

@ -85,9 +85,14 @@ type ClientCommonConf struct {
// value is true.
TcpMux bool `json:"tcp_mux"`
// User specifies a prefix for proxy names to distinguish them from other
// clients. If this value is not "", proxy names will automatically be
// changed to "{user}.{proxy_name}". By default, this value is "".
// clients when the value of "server_user" not set. If this value is not "",
// proxy names will automatically be changed to "{user}.{proxy_name}". By
// default, this value is "".
User string `json:"user"`
// User specifies a custom prefix for proxy names. If this value is not "",
// proxy names will automatically be changed to "{server_user}.{proxy_name}".
// By default, this value is "".
ServerUser string `json:"server_user"`
// DnsServer specifies a DNS server address for FRPC to use. If this value
// is "", the default DNS will be used. By default, this value is "".
DnsServer string `json:"dns_server"`
@ -137,6 +142,7 @@ func GetDefaultClientConf() ClientCommonConf {
PoolCount: 1,
TcpMux: true,
User: "",
ServerUser: "",
DnsServer: "",
LoginFailExit: true,
Start: make(map[string]struct{}),
@ -244,6 +250,10 @@ func UnmarshalClientConfFromIni(content string) (cfg ClientCommonConf, err error
cfg.User = tmpStr
}
if tmpStr, ok = conf.Get("common", "server_user"); ok {
cfg.ServerUser = tmpStr
}
if tmpStr, ok = conf.Get("common", "dns_server"); ok {
cfg.DnsServer = tmpStr
}