Feature: support vmess tls custom servername
This commit is contained in:
parent
e01c249c74
commit
a59e3feba9
3 changed files with 12 additions and 1 deletions
|
@ -208,6 +208,7 @@ proxies:
|
||||||
# udp: true
|
# udp: true
|
||||||
# tls: true
|
# tls: true
|
||||||
# skip-cert-verify: true
|
# skip-cert-verify: true
|
||||||
|
# servername: example.com # priority over wss host
|
||||||
# network: ws
|
# network: ws
|
||||||
# ws-path: /path
|
# ws-path: /path
|
||||||
# ws-headers:
|
# ws-headers:
|
||||||
|
|
|
@ -35,6 +35,7 @@ type VmessOption struct {
|
||||||
WSPath string `proxy:"ws-path,omitempty"`
|
WSPath string `proxy:"ws-path,omitempty"`
|
||||||
WSHeaders map[string]string `proxy:"ws-headers,omitempty"`
|
WSHeaders map[string]string `proxy:"ws-headers,omitempty"`
|
||||||
SkipCertVerify bool `proxy:"skip-cert-verify,omitempty"`
|
SkipCertVerify bool `proxy:"skip-cert-verify,omitempty"`
|
||||||
|
ServerName string `proxy:"servername,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type HTTPOptions struct {
|
type HTTPOptions struct {
|
||||||
|
@ -66,6 +67,7 @@ func (v *Vmess) StreamConn(c net.Conn, metadata *C.Metadata) (net.Conn, error) {
|
||||||
wsOpts.TLS = true
|
wsOpts.TLS = true
|
||||||
wsOpts.SessionCache = getClientSessionCache()
|
wsOpts.SessionCache = getClientSessionCache()
|
||||||
wsOpts.SkipCertVerify = v.option.SkipCertVerify
|
wsOpts.SkipCertVerify = v.option.SkipCertVerify
|
||||||
|
wsOpts.ServerName = v.option.ServerName
|
||||||
}
|
}
|
||||||
c, err = vmess.StreamWebsocketConn(c, wsOpts)
|
c, err = vmess.StreamWebsocketConn(c, wsOpts)
|
||||||
case "http":
|
case "http":
|
||||||
|
@ -87,6 +89,11 @@ func (v *Vmess) StreamConn(c net.Conn, metadata *C.Metadata) (net.Conn, error) {
|
||||||
SkipCertVerify: v.option.SkipCertVerify,
|
SkipCertVerify: v.option.SkipCertVerify,
|
||||||
SessionCache: getClientSessionCache(),
|
SessionCache: getClientSessionCache(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v.option.ServerName != "" {
|
||||||
|
tlsOpts.Host = v.option.ServerName
|
||||||
|
}
|
||||||
|
|
||||||
c, err = vmess.StreamTLSConn(c, tlsOpts)
|
c, err = vmess.StreamTLSConn(c, tlsOpts)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ type WebsocketConfig struct {
|
||||||
Headers http.Header
|
Headers http.Header
|
||||||
TLS bool
|
TLS bool
|
||||||
SkipCertVerify bool
|
SkipCertVerify bool
|
||||||
|
ServerName string
|
||||||
SessionCache tls.ClientSessionCache
|
SessionCache tls.ClientSessionCache
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,7 +133,9 @@ func StreamWebsocketConn(conn net.Conn, c *WebsocketConfig) (net.Conn, error) {
|
||||||
ClientSessionCache: c.SessionCache,
|
ClientSessionCache: c.SessionCache,
|
||||||
}
|
}
|
||||||
|
|
||||||
if host := c.Headers.Get("Host"); host != "" {
|
if c.ServerName != "" {
|
||||||
|
dialer.TLSClientConfig.ServerName = c.ServerName
|
||||||
|
} else if host := c.Headers.Get("Host"); host != "" {
|
||||||
dialer.TLSClientConfig.ServerName = host
|
dialer.TLSClientConfig.ServerName = host
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue