proxy-dns: Allow setting the Host header via url hash

This commit is contained in:
Tugzrida 2020-03-11 11:30:32 +11:00
parent db9b6541d0
commit 6458b091a5
No known key found for this signature in database
GPG Key ID: CC2E6936F05FD077
2 changed files with 12 additions and 4 deletions

View File

@ -129,8 +129,8 @@ func Commands() []*cli.Command {
},
&cli.StringSliceFlag{
Name: "upstream",
Usage: "Upstream endpoint URL, you can specify multiple endpoints for redundancy.",
Value: cli.NewStringSlice("https://1.1.1.1/dns-query", "https://1.0.0.1/dns-query"),
Usage: "Upstream endpoint URL, you can specify multiple endpoints for redundancy. If required, the Host header can be manually set by appending a hash to the URL.",
Value: cli.NewStringSlice("https://1.1.1.1/dns-query", "https://[2606:4700:4700::1111]/dns-query", "https://1.0.0.1/dns-query", "https://[2606:4700:4700::1001]/dns-query"),
EnvVars: []string{"TUNNEL_DNS_UPSTREAM"},
},
},
@ -934,8 +934,8 @@ func tunnelFlags(shouldHide bool) []cli.Flag {
}),
altsrc.NewStringSliceFlag(&cli.StringSliceFlag{
Name: "proxy-dns-upstream",
Usage: "Upstream endpoint URL, you can specify multiple endpoints for redundancy.",
Value: cli.NewStringSlice("https://1.1.1.1/dns-query", "https://1.0.0.1/dns-query"),
Usage: "Upstream endpoint URL, you can specify multiple endpoints for redundancy. If required, the Host header can be manually set by appending a hash to the URL.",
Value: cli.NewStringSlice("https://1.1.1.1/dns-query", "https://[2606:4700:4700::1111]/dns-query", "https://1.0.0.1/dns-query", "https://[2606:4700:4700::1001]/dns-query"),
EnvVars: []string{"TUNNEL_DNS_UPSTREAM"},
Hidden: shouldHide,
}),

View File

@ -35,6 +35,10 @@ func NewUpstreamHTTPS(endpoint string) (Upstream, error) {
// Update TLS and HTTP client configuration
tls := &tls.Config{ServerName: u.Hostname()}
if u.Fragment != "" {
// Allow server name override via anchor on the url
tls.ServerName = u.Fragment
}
transport := &http.Transport{
TLSClientConfig: tls,
DisableCompression: true,
@ -84,6 +88,10 @@ func (u *UpstreamHTTPS) exchangeWireformat(msg []byte) ([]byte, error) {
req.Header.Add("Content-Type", "application/dns-message")
req.Host = u.endpoint.Host
if u.endpoint.Fragment != "" {
// Allow server name override via anchor on the url
req.Host = u.endpoint.Fragment
}
resp, err := u.client.Do(req)
if err != nil {