Feature: support vmess tls custom servername

This commit is contained in:
gVisor bot 2020-06-01 00:27:04 +08:00
parent e01c249c74
commit a59e3feba9
3 changed files with 12 additions and 1 deletions

View file

@ -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:

View file

@ -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)
} }
} }

View file

@ -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
} }
} }