feat: support set local ip in client when connect server (#2774)

* feat: support set local ip in client when connect server

* fix: typo

Co-authored-by: blizard863 <760076784@qq.com>
This commit is contained in:
Blizard 2022-01-26 19:47:40 +08:00 committed by GitHub
parent 70f4caac23
commit 0db4fc07fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 0 deletions

View File

@ -246,6 +246,9 @@ func (ctl *Control) connectServer() (conn net.Conn, err error) {
protocol = "tcp" protocol = "tcp"
dialOptions = append(dialOptions, libdial.WithAfterHook(libdial.AfterHook{Hook: frpNet.DialHookWebsocket()})) dialOptions = append(dialOptions, libdial.WithAfterHook(libdial.AfterHook{Hook: frpNet.DialHookWebsocket()}))
} }
if ctl.clientCfg.ConnectServerLocalIP != "" {
dialOptions = append(dialOptions, libdial.WithLocalAddr(ctl.clientCfg.ConnectServerLocalIP))
}
dialOptions = append(dialOptions, dialOptions = append(dialOptions,
libdial.WithProtocol(protocol), libdial.WithProtocol(protocol),
libdial.WithProxy(proxyType, addr), libdial.WithProxy(proxyType, addr),

View File

@ -240,6 +240,9 @@ func (svr *Service) login() (conn net.Conn, session *fmux.Session, err error) {
protocol = "tcp" protocol = "tcp"
dialOptions = append(dialOptions, libdial.WithAfterHook(libdial.AfterHook{Hook: frpNet.DialHookWebsocket()})) dialOptions = append(dialOptions, libdial.WithAfterHook(libdial.AfterHook{Hook: frpNet.DialHookWebsocket()}))
} }
if svr.cfg.ConnectServerLocalIP != "" {
dialOptions = append(dialOptions, libdial.WithLocalAddr(svr.cfg.ConnectServerLocalIP))
}
dialOptions = append(dialOptions, dialOptions = append(dialOptions,
libdial.WithProtocol(protocol), libdial.WithProtocol(protocol),
libdial.WithProxy(proxyType, addr), libdial.WithProxy(proxyType, addr),

View File

@ -76,6 +76,10 @@ login_fail_exit = true
# now it supports tcp, kcp and websocket, default is tcp # now it supports tcp, kcp and websocket, default is tcp
protocol = tcp protocol = tcp
# set client binding ip when connect server, default is empty.
# only when protocol = tcp or websocket, the value will be used.
connect_server_local_ip = 0.0.0.0
# if tls_enable is true, frpc will connect frps by tls # if tls_enable is true, frpc will connect frps by tls
tls_enable = true tls_enable = true

View File

@ -38,6 +38,10 @@ type ClientCommonConf struct {
// ServerPort specifies the port to connect to the server on. By default, // ServerPort specifies the port to connect to the server on. By default,
// this value is 7000. // this value is 7000.
ServerPort int `ini:"server_port" json:"server_port"` ServerPort int `ini:"server_port" json:"server_port"`
// ConnectServerLocalIP specifies the address of the client bind when it connect to server.
// By default, this value is empty.
// this value only use in TCP/Websocket protocol. Not support in KCP protocol.
ConnectServerLocalIP string `ini:"connect_server_local_ip" json:"connect_server_local_ip"`
// HTTPProxy specifies a proxy address to connect to the server through. If // HTTPProxy specifies a proxy address to connect to the server through. If
// this value is "", the server will be connected to directly. By default, // this value is "", the server will be connected to directly. By default,
// this value is read from the "http_proxy" environment variable. // this value is read from the "http_proxy" environment variable.