main.go 1.8 KB

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