proxy: Add ICE ephemeral ports range setting CLI flag

This commit is contained in:
KokaKiwi 2022-09-30 17:52:07 +02:00 committed by KokaKiwi
parent 5e564f36ff
commit 47f9392645
No known key found for this signature in database
GPG key ID: 09A5A2688F13FAC1
2 changed files with 28 additions and 1 deletions

View file

@ -114,6 +114,9 @@ type SnowflakeProxy struct {
KeepLocalAddresses bool KeepLocalAddresses bool
// RelayURL is the URL of the Snowflake server that all traffic will be relayed to // RelayURL is the URL of the Snowflake server that all traffic will be relayed to
RelayURL string RelayURL string
// Ephemeral*Port limits the pool of ports that ICE UDP connections can allocate from
EphemeralMinPort uint16
EphemeralMaxPort uint16
// RelayDomainNamePattern is the pattern specify allowed domain name for relay // RelayDomainNamePattern is the pattern specify allowed domain name for relay
// If the pattern starts with ^ then an exact match is required. // If the pattern starts with ^ then an exact match is required.
// The rest of pattern is the suffix of domain name. // The rest of pattern is the suffix of domain name.
@ -350,6 +353,10 @@ func (d dataChannelHandlerWithRelayURL) datachannelHandler(conn *webRTCConn, rem
func (sf *SnowflakeProxy) makeWebRTCAPI() *webrtc.API { func (sf *SnowflakeProxy) makeWebRTCAPI() *webrtc.API {
settingsEngine := webrtc.SettingEngine{} settingsEngine := webrtc.SettingEngine{}
if sf.EphemeralMinPort != 0 && sf.EphemeralMaxPort != 0 {
settingsEngine.SetEphemeralUDPPortRange(sf.EphemeralMinPort, sf.EphemeralMaxPort)
}
settingsEngine.SetICEMulticastDNSMode(ice.MulticastDNSModeDisabled) settingsEngine.SetICEMulticastDNSMode(ice.MulticastDNSModeDisabled)
return webrtc.NewAPI(webrtc.WithSettingEngine(settingsEngine)) return webrtc.NewAPI(webrtc.WithSettingEngine(settingsEngine))

View file

@ -2,13 +2,15 @@ package main
import ( import (
"flag" "flag"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/event"
"io" "io"
"io/ioutil" "io/ioutil"
"log" "log"
"os" "os"
"strconv"
"strings"
"time" "time"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/event"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog"
sf "git.torproject.org/pluggable-transports/snowflake.git/v2/proxy/lib" sf "git.torproject.org/pluggable-transports/snowflake.git/v2/proxy/lib"
) )
@ -28,6 +30,7 @@ func main() {
SummaryInterval := flag.Duration("summary-interval", time.Hour, SummaryInterval := flag.Duration("summary-interval", time.Hour,
"the time interval to output summary, 0s disables summaries. Valid time units are \"s\", \"m\", \"h\". ") "the time interval to output summary, 0s disables summaries. Valid time units are \"s\", \"m\", \"h\". ")
verboseLogging := flag.Bool("verbose", false, "increase log verbosity") verboseLogging := flag.Bool("verbose", false, "increase log verbosity")
ephemeralPortsRange := flag.String("ephemeral-ports-range", "", "UDP ephemeral ports range")
flag.Parse() flag.Parse()
@ -47,6 +50,23 @@ func main() {
AllowNonTLSRelay: *allowNonTLSRelay, AllowNonTLSRelay: *allowNonTLSRelay,
} }
ephemeralPortsRangeParts := strings.Split(*ephemeralPortsRange, ":")
if len(ephemeralPortsRangeParts) == 2 {
ephemeralMinPort, err := strconv.ParseUint(ephemeralPortsRangeParts[0], 10, 16)
if err == nil {
proxy.EphemeralMinPort = uint16(ephemeralMinPort)
} else {
log.Printf("Invalid port (%v): %v", ephemeralPortsRangeParts[0], err)
}
ephemeralMaxPort, err := strconv.ParseUint(ephemeralPortsRangeParts[1], 10, 16)
if err == nil {
proxy.EphemeralMaxPort = uint16(ephemeralMaxPort)
} else {
log.Printf("Invalid port (%v): %v", ephemeralPortsRangeParts[1], err)
}
}
var logOutput io.Writer = os.Stderr var logOutput io.Writer = os.Stderr
var eventlogOutput io.Writer = os.Stderr var eventlogOutput io.Writer = os.Stderr
log.SetFlags(log.LstdFlags | log.LUTC) log.SetFlags(log.LstdFlags | log.LUTC)