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