proxy multi listen
This commit is contained in:
@@ -62,7 +62,7 @@ func accessHandler(next http.Handler) http.Handler {
|
|||||||
|
|
||||||
type settingType struct {
|
type settingType struct {
|
||||||
birdSocket string
|
birdSocket string
|
||||||
listen string
|
listen []string
|
||||||
allowedNets []*net.IPNet
|
allowedNets []*net.IPNet
|
||||||
tr_bin string
|
tr_bin string
|
||||||
tr_flags []string
|
tr_flags []string
|
||||||
@@ -76,32 +76,40 @@ func main() {
|
|||||||
parseSettings()
|
parseSettings()
|
||||||
tracerouteAutodetect()
|
tracerouteAutodetect()
|
||||||
|
|
||||||
fmt.Printf("Listening on %s...\n", setting.listen)
|
mux := http.NewServeMux()
|
||||||
|
|
||||||
var l net.Listener
|
// Prepare HTTP server
|
||||||
var err error
|
mux.HandleFunc("/", invalidHandler)
|
||||||
|
mux.HandleFunc("/bird", birdHandler)
|
||||||
|
mux.HandleFunc("/bird6", birdHandler)
|
||||||
|
mux.HandleFunc("/traceroute", tracerouteHandler)
|
||||||
|
mux.HandleFunc("/traceroute6", tracerouteHandler)
|
||||||
|
|
||||||
if strings.HasPrefix(setting.listen, "/") {
|
for _, listenAddr := range setting.listen {
|
||||||
// Delete existing socket file, ignore errors (will fail later anyway)
|
go func(addr string) {
|
||||||
os.Remove(setting.listen)
|
fmt.Printf("Listening on %s...\n", addr)
|
||||||
l, err = net.Listen("unix", setting.listen)
|
|
||||||
} else {
|
var l net.Listener
|
||||||
listenAddr := setting.listen
|
var err error
|
||||||
if !strings.Contains(listenAddr, ":") {
|
|
||||||
listenAddr = ":" + listenAddr
|
if strings.HasPrefix(addr, "/") {
|
||||||
}
|
// Delete existing socket file, ignore errors (will fail later anyway)
|
||||||
l, err = net.Listen("tcp", listenAddr)
|
os.Remove(addr)
|
||||||
|
l, err = net.Listen("unix", addr)
|
||||||
|
} else {
|
||||||
|
if !strings.Contains(addr, ":") {
|
||||||
|
addr = ":" + addr
|
||||||
|
}
|
||||||
|
l, err = net.Listen("tcp", addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
http.Serve(l, handlers.LoggingHandler(os.Stdout, accessHandler(mux)))
|
||||||
|
}(listenAddr)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
select {}
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start HTTP server
|
|
||||||
http.HandleFunc("/", invalidHandler)
|
|
||||||
http.HandleFunc("/bird", birdHandler)
|
|
||||||
http.HandleFunc("/bird6", birdHandler)
|
|
||||||
http.HandleFunc("/traceroute", tracerouteHandler)
|
|
||||||
http.HandleFunc("/traceroute6", tracerouteHandler)
|
|
||||||
http.Serve(l, handlers.LoggingHandler(os.Stdout, accessHandler(http.DefaultServeMux)))
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type viperSettingType struct {
|
type viperSettingType struct {
|
||||||
BirdSocket string `mapstructure:"bird_socket"`
|
BirdSocket string `mapstructure:"bird_socket"`
|
||||||
Listen string `mapstructure:"listen"`
|
Listen []string `mapstructure:"listen"`
|
||||||
AllowedNets string `mapstructure:"allowed_ips"`
|
AllowedNets string `mapstructure:"allowed_ips"`
|
||||||
TracerouteBin string `mapstructure:"traceroute_bin"`
|
TracerouteBin string `mapstructure:"traceroute_bin"`
|
||||||
TracerouteFlags string `mapstructure:"traceroute_flags"`
|
TracerouteFlags string `mapstructure:"traceroute_flags"`
|
||||||
TracerouteRaw bool `mapstructure:"traceroute_raw"`
|
TracerouteRaw bool `mapstructure:"traceroute_raw"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse settings with viper, and convert to legacy setting format
|
// Parse settings with viper, and convert to legacy setting format
|
||||||
@@ -37,7 +37,7 @@ func parseSettings() {
|
|||||||
pflag.String("bird", "/var/run/bird/bird.ctl", "socket file for bird, set either in parameter or environment variable BIRD_SOCKET")
|
pflag.String("bird", "/var/run/bird/bird.ctl", "socket file for bird, set either in parameter or environment variable BIRD_SOCKET")
|
||||||
viper.BindPFlag("bird_socket", pflag.Lookup("bird"))
|
viper.BindPFlag("bird_socket", pflag.Lookup("bird"))
|
||||||
|
|
||||||
pflag.String("listen", "8000", "listen address, set either in parameter or environment variable BIRDLG_PROXY_PORT")
|
pflag.StringSlice("listen", []string{"8000"}, "listen address, set either in parameter or environment variable BIRDLG_PROXY_PORT")
|
||||||
viper.BindPFlag("listen", pflag.Lookup("listen"))
|
viper.BindPFlag("listen", pflag.Lookup("listen"))
|
||||||
|
|
||||||
pflag.String("allowed", "", "IPs or networks allowed to access this proxy, separated by commas. Don't set to allow all IPs.")
|
pflag.String("allowed", "", "IPs or networks allowed to access this proxy, separated by commas. Don't set to allow all IPs.")
|
||||||
|
|||||||
Reference in New Issue
Block a user