masque: add address/port option to override endpoint

This commit is contained in:
Shtorm
2026-09-04 01:40:28 +03:00
parent 25618424e6
commit 3540c09b93
3 changed files with 27 additions and 4 deletions
+3
View File
@@ -36,6 +36,9 @@
"auth_token": "",
"license_key": ""
},
// Optional: override the endpoint instead of using the one returned by Cloudflare
"address": "",
"port": 0,
"udp_timeout": "5m0s",
"udp_keepalive_period": "30s",
"udp_initial_packet_size": 0,
+2
View File
@@ -14,6 +14,8 @@ type MASQUEOutboundOptions struct {
UseHTTP2 bool `json:"use_http2,omitempty"`
UseIPv6 bool `json:"use_ipv6,omitempty"`
Profile CloudflareProfile `json:"profile,omitempty"`
Address string `json:"address,omitempty"`
Port uint16 `json:"port,omitempty"`
UDPTimeout badoption.Duration `json:"udp_timeout,omitempty"`
UDPKeepalivePeriod badoption.Duration `json:"udp_keepalive_period,omitempty"`
UDPInitialPacketSize uint16 `json:"udp_initial_packet_size,omitempty"`
+22 -4
View File
@@ -111,10 +111,28 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL
logger.ErrorContext(ctx, E.New("failed to prepare TLS config: ", err))
return
}
endpoint, err := appConfig.SelectEndpointFromConfig(options.UseHTTP2, options.UseIPv6, 443)
if err != nil {
logger.ErrorContext(ctx, E.New("failed to select endpoint: ", err))
return
var endpoint net.Addr
if options.Address != "" {
endpointPort := options.Port
if endpointPort == 0 {
endpointPort = 443
}
endpointIP := net.ParseIP(options.Address)
if endpointIP == nil {
logger.ErrorContext(ctx, E.New("invalid endpoint address: ", options.Address))
return
}
if options.UseHTTP2 {
endpoint = &net.TCPAddr{IP: endpointIP, Port: int(endpointPort)}
} else {
endpoint = &net.UDPAddr{IP: endpointIP, Port: int(endpointPort)}
}
} else {
endpoint, err = appConfig.SelectEndpointFromConfig(options.UseHTTP2, options.UseIPv6, 443)
if err != nil {
logger.ErrorContext(ctx, E.New("failed to select endpoint: ", err))
return
}
}
var udpTimeout time.Duration
if options.UDPTimeout != 0 {