stund.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. // The stund binary is a standalone STUN server.
  4. package main
  5. import (
  6. "context"
  7. "flag"
  8. "io"
  9. "log"
  10. "net/http"
  11. "os/signal"
  12. "syscall"
  13. "tailscale.com/net/stunserver"
  14. "tailscale.com/tsweb"
  15. // Support for prometheus varz in tsweb
  16. _ "tailscale.com/tsweb/promvarz"
  17. )
  18. var (
  19. stunAddr = flag.String("stun", ":3478", "UDP address on which to start the STUN server")
  20. httpAddr = flag.String("http", ":3479", "address on which to start the debug http server")
  21. )
  22. func main() {
  23. flag.Parse()
  24. ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
  25. defer cancel()
  26. log.Printf("HTTP server listening on %s", *httpAddr)
  27. go http.ListenAndServe(*httpAddr, mux())
  28. s := stunserver.New(ctx)
  29. if err := s.ListenAndServe(*stunAddr); err != nil {
  30. log.Fatal(err)
  31. }
  32. }
  33. func mux() *http.ServeMux {
  34. mux := http.NewServeMux()
  35. mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  36. io.WriteString(w, "<h1>stund</h1><a href=/debug>/debug</a>")
  37. })
  38. debug := tsweb.Debugger(mux)
  39. debug.KV("stun_addr", *stunAddr)
  40. return mux
  41. }