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  }