1
0

main.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "log"
  6. "net"
  7. "os"
  8. "github.com/slackhq/nebula"
  9. "github.com/slackhq/nebula/config"
  10. "github.com/slackhq/nebula/logging"
  11. "github.com/slackhq/nebula/overlay"
  12. "github.com/slackhq/nebula/service"
  13. )
  14. func main() {
  15. if err := run(); err != nil {
  16. log.Fatalf("%+v", err)
  17. }
  18. }
  19. func run() error {
  20. configStr := `
  21. tun:
  22. user: true
  23. static_host_map:
  24. '192.168.100.1': ['localhost:4242']
  25. listen:
  26. host: 0.0.0.0
  27. port: 4241
  28. lighthouse:
  29. am_lighthouse: false
  30. interval: 60
  31. hosts:
  32. - '192.168.100.1'
  33. firewall:
  34. outbound:
  35. # Allow all outbound traffic from this node
  36. - port: any
  37. proto: any
  38. host: any
  39. inbound:
  40. # Allow icmp between any nebula hosts
  41. - port: any
  42. proto: icmp
  43. host: any
  44. - port: any
  45. proto: any
  46. host: any
  47. pki:
  48. ca: /home/rice/Developer/nebula-config/ca.crt
  49. cert: /home/rice/Developer/nebula-config/app.crt
  50. key: /home/rice/Developer/nebula-config/app.key
  51. `
  52. var cfg config.C
  53. if err := cfg.LoadString(configStr); err != nil {
  54. return err
  55. }
  56. logger := logging.NewLogger(os.Stdout)
  57. ctrl, err := nebula.Main(&cfg, false, "custom-app", logger, overlay.NewUserDeviceFromConfig)
  58. if err != nil {
  59. return err
  60. }
  61. svc, err := service.New(ctrl)
  62. if err != nil {
  63. return err
  64. }
  65. ln, err := svc.Listen("tcp", ":1234")
  66. if err != nil {
  67. return err
  68. }
  69. for {
  70. conn, err := ln.Accept()
  71. if err != nil {
  72. log.Printf("accept error: %s", err)
  73. break
  74. }
  75. defer func(conn net.Conn) {
  76. _ = conn.Close()
  77. }(conn)
  78. log.Printf("got connection")
  79. _, err = conn.Write([]byte("hello world\n"))
  80. if err != nil {
  81. log.Printf("write error: %s", err)
  82. }
  83. scanner := bufio.NewScanner(conn)
  84. for scanner.Scan() {
  85. message := scanner.Text()
  86. _, err = fmt.Fprintf(conn, "echo: %q\n", message)
  87. if err != nil {
  88. log.Printf("write error: %s", err)
  89. }
  90. log.Printf("got message %q", message)
  91. }
  92. if err := scanner.Err(); err != nil {
  93. log.Printf("scanner error: %s", err)
  94. break
  95. }
  96. }
  97. _ = svc.Close()
  98. if err := svc.Wait(); err != nil {
  99. return err
  100. }
  101. return nil
  102. }