From dabe335b06145f39ea36f4841459cbf5c213be14 Mon Sep 17 00:00:00 2001 From: Fynn Godau Date: Sun, 28 Dec 2025 17:38:40 +0000 Subject: bahnhof-dns: improved configuration options --- app/BahnhofDNS.hs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/BahnhofDNS.hs b/app/BahnhofDNS.hs index 1b06dc1..b4f1988 100644 --- a/app/BahnhofDNS.hs +++ b/app/BahnhofDNS.hs @@ -11,9 +11,19 @@ import Util mkByteString :: String -> ByteString mkByteString = TSE.encodeUtf8 . Data.Text.pack +-- | name that the nameserver will run on ourName :: ByteString ourName = mkByteString "ns.fynngodau.de." +-- | +-- Nothing to bind anywhere (*:53) +-- recommended: set to your public IP address if running in parallel to a proper local resolver +bindAddress :: Maybe String +bindAddress = Just "2003:a:1525:3967::2" + +bindPort :: String +bindPort = "53" + servedName :: ByteString servedName = mkByteString "bahnhof.fynngodau.de." @@ -26,6 +36,7 @@ soa = ResourceRecord servedName SOA classIN 86400 $ RD_SOA 7200 -- retry 3600000 -- expire 3600 -- minttl +-- CONFIGURE UP TO HERE -- ns :: ResourceRecord ns = ResourceRecord servedName NS classIN 86400 $ RD_NS ourName @@ -34,10 +45,10 @@ ns = ResourceRecord servedName NS classIN 86400 $ RD_NS ourName main :: IO () main = do -- general structure like sample code at https://book.realworldhaskell.org/read/sockets-and-syslog.html (for UDP server) staticData <- readData - addr : _ <- getAddrInfo (Just defaultHints { addrSocketType = Datagram, addrFamily = AF_INET6, addrFlags = [AI_PASSIVE] }) Nothing (Just "5300") + addr : _ <- getAddrInfo (Just defaultHints { addrSocketType = Datagram, addrFlags = [AI_PASSIVE] }) bindAddress (Just bindPort) sckt <- openSocket addr bind sckt (addrAddress addr) - putStrLn "Starting DNS server (listening on port 5300)" + putStrLn $ "Starting DNS server (listening on port " ++ bindPort ++ ")" procMessages staticData sckt where procMessages staticData sckt = do -- cgit v1.2.3