summaryrefslogtreecommitdiff
path: root/args/args.go
diff options
context:
space:
mode:
Diffstat (limited to 'args/args.go')
-rw-r--r--args/args.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/args/args.go b/args/args.go
index 6655f4a..6c79fe9 100644
--- a/args/args.go
+++ b/args/args.go
@@ -3,6 +3,7 @@ package args
import (
"flag"
"os"
+ "strings"
)
type Arguments struct {
@@ -16,6 +17,17 @@ type Arguments struct {
Port int
Server bool
+ // Dns runs the authoritative DNS server for the LAN. DnsZone is the suffix
+ // it owns (e.g. penguins.lan); queries outside it are forwarded to
+ // DnsResolvers (empty = no forwarding, since the LAN has no outside
+ // internet). ServerIP (env SERVER_IP) answers the zone apex so the website
+ // itself resolves; empty leaves the apex unanswered.
+ Dns bool
+ DnsPort int
+ DnsResolvers []string
+ DnsZone string
+ ServerIP string
+
// DevMAC (env DEV_MAC) forces every client's MAC, for testing auth from
// loopback where the browser never appears in the ARP table.
DevMAC string
@@ -40,8 +52,20 @@ func GetArgs() (*Arguments, error) {
port := flag.Int("port", 8080, "Port to listen on")
server := flag.Bool("server", false, "Run the HTTP server")
+ dns := flag.Bool("dns", false, "Run the authoritative DNS server")
+ dnsPort := flag.Int("dns-port", 8053, "Port for the DNS server to listen on")
+ dnsZone := flag.String("dns-zone", "penguins.lan", "DNS zone this server is authoritative for")
+ dnsResolvers := flag.String("dns-resolvers", "", "Comma-separated upstream resolvers for non-zone queries (empty disables forwarding)")
+
flag.Parse()
+ resolvers := []string{}
+ for _, r := range strings.Split(*dnsResolvers, ",") {
+ if r = strings.TrimSpace(r); r != "" {
+ resolvers = append(resolvers, r)
+ }
+ }
+
return &Arguments{
DatabasePath: *databasePath,
TemplatePath: *templatePath,
@@ -50,6 +74,11 @@ func GetArgs() (*Arguments, error) {
Scheduler: *scheduler,
Port: *port,
Server: *server,
+ Dns: *dns,
+ DnsPort: *dnsPort,
+ DnsResolvers: resolvers,
+ DnsZone: *dnsZone,
+ ServerIP: os.Getenv("SERVER_IP"),
DevMAC: os.Getenv("DEV_MAC"),
RconAddress: os.Getenv("RCON_ADDRESS"),
RconPassword: os.Getenv("RCON_PASSWORD"),