From a7c05b75663b56420859b0533a05a546b02183c6 Mon Sep 17 00:00:00 2001 From: Tim Beatham Date: Sat, 16 Sep 2023 13:57:27 +0100 Subject: [PATCH] Testing wgctrl --- README.md | 2 +- go.mod | 17 +++++++++++++++++ go.sum | 22 ++++++++++++++++++++++ wgmesh.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 go.mod create mode 100644 go.sum create mode 100644 wgmesh.go diff --git a/README.md b/README.md index 00bb768..339581a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # wgmesh -WireGuard VPN Mesh Management +WireGuard VPN Mesh Management \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..579de45 --- /dev/null +++ b/go.mod @@ -0,0 +1,17 @@ +module github.com/tim-beatham/wgmesh + +go 1.21.1 + +require ( + github.com/google/go-cmp v0.5.9 // indirect + github.com/josharian/native v1.1.0 // indirect + github.com/mdlayher/genetlink v1.3.2 // indirect + github.com/mdlayher/netlink v1.7.2 // indirect + github.com/mdlayher/socket v0.4.1 // indirect + golang.org/x/crypto v0.8.0 // indirect + golang.org/x/net v0.9.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.7.0 // indirect + golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b // indirect + golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..51a5c2c --- /dev/null +++ b/go.sum @@ -0,0 +1,22 @@ +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= +github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= +github.com/mdlayher/genetlink v1.3.2 h1:KdrNKe+CTu+IbZnm/GVUMXSqBBLqcGpRDa0xkQy56gw= +github.com/mdlayher/genetlink v1.3.2/go.mod h1:tcC3pkCrPUGIKKsCsp0B3AdaaKuHtaxoJRz3cc+528o= +github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g= +github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= +github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= +github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= +golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b h1:J1CaxgLerRR5lgx3wnr6L04cJFbWoceSK9JWBdglINo= +golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b/go.mod h1:tqur9LnfstdR9ep2LaJT4lFUl0EjlHtge+gAjmsHUG4= +golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6 h1:CawjfCvYQH2OU3/TnxLx97WDSUDRABfT18pCOYwc2GE= +golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6/go.mod h1:3rxYc4HtVcSG9gVaTs2GEBdehh+sYPOwKtyUWEOTb80= diff --git a/wgmesh.go b/wgmesh.go new file mode 100644 index 0000000..012f558 --- /dev/null +++ b/wgmesh.go @@ -0,0 +1,53 @@ +package main + +import ( + "fmt" + + "golang.zx2c4.com/wireguard/wgctrl" + "golang.zx2c4.com/wireguard/wgctrl/wgtypes" +) + +func main() { + client, err := wgctrl.New() + + if err != nil { + fmt.Println("Error creating device") + return + } + + privateKey, err := wgtypes.GeneratePrivateKey() + var listenPort int = 5109 + + if err != nil { + fmt.Println("Error creating private key") + return + } + + cfg := wgtypes.Config{ + PrivateKey: &privateKey, + ListenPort: &listenPort, + } + + err = client.ConfigureDevice("utun9", cfg) + + if err != nil { + fmt.Println(err.Error()) + return + } + + devices, err := client.Devices() + + if err != nil { + fmt.Println("unable to retrieve devices") + return + } + + fmt.Printf("Number of devices: %d\n", len(devices)) + + for _, device := range devices { + fmt.Printf("Device Name: %s\n", device.Name) + fmt.Printf("Listen Port: %d\n", device.ListenPort) + fmt.Printf("Private Key: %s\n", device.PrivateKey.String()) + fmt.Printf("Public Key: %s\n", device.PublicKey.String()) + } +}