3
0

main.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "log"
  6. "net"
  7. "os"
  8. "github.com/sirupsen/logrus"
  9. "github.com/slackhq/nebula"
  10. "github.com/slackhq/nebula/config"
  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 := logrus.New()
  57. logger.Out = os.Stdout
  58. ctrl, err := nebula.Main(&cfg, false, "custom-app", logger, overlay.NewUserDeviceFromConfig)
  59. if err != nil {
  60. return err
  61. }
  62. svc, err := service.New(ctrl)
  63. if err != nil {
  64. return err
  65. }
  66. ln, err := svc.Listen("tcp", ":1234")
  67. if err != nil {
  68. return err
  69. }
  70. for {
  71. conn, err := ln.Accept()
  72. if err != nil {
  73. log.Printf("accept error: %s", err)
  74. break
  75. }
  76. defer func(conn net.Conn) {
  77. _ = conn.Close()
  78. }(conn)
  79. log.Printf("got connection")
  80. _, err = conn.Write([]byte("hello world\n"))
  81. if err != nil {
  82. log.Printf("write error: %s", err)
  83. }
  84. scanner := bufio.NewScanner(conn)
  85. for scanner.Scan() {
  86. message := scanner.Text()
  87. _, err = fmt.Fprintf(conn, "echo: %q\n", message)
  88. if err != nil {
  89. log.Printf("write error: %s", err)
  90. }
  91. log.Printf("got message %q", message)
  92. }
  93. if err := scanner.Err(); err != nil {
  94. log.Printf("scanner error: %s", err)
  95. break
  96. }
  97. }
  98. _ = svc.Close()
  99. if err := svc.Wait(); err != nil {
  100. return err
  101. }
  102. return nil
  103. }