Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2525026e2d | |||
| 051e441a68 | |||
| 3013303ece | |||
| ff2cbdc3c5 | |||
| b9e98ca322 |
+4
-33
@@ -1,35 +1,17 @@
|
|||||||
package wireguard
|
package wireguard
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"text/template"
|
|
||||||
|
|
||||||
"darvaza.org/core"
|
"darvaza.org/core"
|
||||||
"gopkg.in/gcfg.v1"
|
"gopkg.in/gcfg.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
var configTemplate = template.Must(template.New("config").Funcs(template.FuncMap{
|
|
||||||
"StringsJoin": strings.Join,
|
|
||||||
}).Parse(`[Interface]
|
|
||||||
Address = {{.Interface.Address}}
|
|
||||||
PrivateKey = {{.Interface.PrivateKey}}
|
|
||||||
ListenPort = {{.Interface.ListenPort}}
|
|
||||||
{{range .Peer}}
|
|
||||||
|
|
||||||
[Peer]
|
|
||||||
# {{.Endpoint.Name}}
|
|
||||||
PublicKey = {{.PublicKey}}
|
|
||||||
Endpoint = {{.Endpoint}}
|
|
||||||
AllowedIPs = {{ StringsJoin .AllowedIPs ", "}}
|
|
||||||
{{end}}
|
|
||||||
`))
|
|
||||||
|
|
||||||
// Config represents a wgN.conf file
|
// Config represents a wgN.conf file
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Interface InterfaceConfig
|
Interface InterfaceConfig
|
||||||
@@ -37,24 +19,13 @@ type Config struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetAddress is a shortcut to the interface's address
|
// GetAddress is a shortcut to the interface's address
|
||||||
func (wg *Config) GetAddress() netip.Addr {
|
func (f *Config) GetAddress() netip.Addr {
|
||||||
return wg.Interface.Address
|
return f.Interface.Address
|
||||||
}
|
}
|
||||||
|
|
||||||
// Peers tells how many peers are described
|
// Peers tells how many peers are described
|
||||||
func (wg *Config) Peers() int {
|
func (f *Config) Peers() int {
|
||||||
return len(wg.Peer)
|
return len(f.Peer)
|
||||||
}
|
|
||||||
|
|
||||||
// WriteTo writes a Wireguard [Config] onto the provided [io.Writer]
|
|
||||||
func (wg *Config) WriteTo(w io.Writer) (int64, error) {
|
|
||||||
var buf bytes.Buffer
|
|
||||||
|
|
||||||
if err := configTemplate.Execute(&buf, wg); err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf.WriteTo(w)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// InterfaceConfig represents the [Interface] section
|
// InterfaceConfig represents the [Interface] section
|
||||||
|
|||||||
@@ -268,31 +268,6 @@ func (m *Machine) SyncWireguardConfig(ring int) error {
|
|||||||
return m.zone.SyncWireguardConfig(ring)
|
return m.zone.SyncWireguardConfig(ring)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Machine) WriteWireguardConfig(ring int) error {
|
|
||||||
r, err := m.zone.GetRing(ring)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return m.writeWireguardRing(r)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Machine) writeWireguardRing(r *Ring) error {
|
|
||||||
wg, err := r.ExportConfig(m.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := m.CreateTruncFile("wg%v.conf", r.Ring)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
|
|
||||||
_, err = wg.WriteTo(f)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Machine) createRingInfo(ring int, enabled bool) (*RingInfo, error) {
|
func (m *Machine) createRingInfo(ring int, enabled bool) (*RingInfo, error) {
|
||||||
keys, err := wireguard.NewKeyPair()
|
keys, err := wireguard.NewKeyPair()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
+1
-32
@@ -1,40 +1,9 @@
|
|||||||
package zones
|
package zones
|
||||||
|
|
||||||
import "git.jpi.io/amery/jpictl/pkg/wireguard"
|
|
||||||
|
|
||||||
type Ring struct {
|
|
||||||
Ring int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Ring) ExportConfig(_ int) (*wireguard.Config, error) {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Zone) GetRing(_ int) (*Ring, error) {
|
|
||||||
return &Ring{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SyncWireguardConfig updates all wgN.conf files for the specified
|
// SyncWireguardConfig updates all wgN.conf files for the specified
|
||||||
// ring
|
// ring
|
||||||
func (z *Zone) SyncWireguardConfig(ring int) error {
|
func (z *Zone) SyncWireguardConfig(ring int) error {
|
||||||
err := z.PruneWireguardConfig(ring)
|
return z.PruneWireguardConfig(ring)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
r, err := z.GetRing(ring)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
z.ForEachMachine(func(p *Machine) bool {
|
|
||||||
if _, ok := p.getRingInfo(ring); ok {
|
|
||||||
err = p.writeWireguardRing(r)
|
|
||||||
}
|
|
||||||
return err != nil
|
|
||||||
})
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PruneWireguardConfig removes wgN.conf files of machines with
|
// PruneWireguardConfig removes wgN.conf files of machines with
|
||||||
|
|||||||
Reference in New Issue
Block a user