|
@@ -3,7 +3,6 @@ package nebula
|
|
import (
|
|
import (
|
|
"context"
|
|
"context"
|
|
"encoding/binary"
|
|
"encoding/binary"
|
|
- "errors"
|
|
|
|
"fmt"
|
|
"fmt"
|
|
"net"
|
|
"net"
|
|
"time"
|
|
"time"
|
|
@@ -46,7 +45,7 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
|
|
|
|
err := configLogger(l, c)
|
|
err := configLogger(l, c)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, util.NewContextualError("Failed to configure the logger", nil, err)
|
|
|
|
|
|
+ return nil, util.ContextualizeIfNeeded("Failed to configure the logger", err)
|
|
}
|
|
}
|
|
|
|
|
|
c.RegisterReloadCallback(func(c *config.C) {
|
|
c.RegisterReloadCallback(func(c *config.C) {
|
|
@@ -56,28 +55,20 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
|
|
- caPool, err := loadCAFromConfig(l, c)
|
|
|
|
|
|
+ pki, err := NewPKIFromConfig(l, c)
|
|
if err != nil {
|
|
if err != nil {
|
|
- //The errors coming out of loadCA are already nicely formatted
|
|
|
|
- return nil, util.NewContextualError("Failed to load ca from config", nil, err)
|
|
|
|
|
|
+ return nil, util.ContextualizeIfNeeded("Failed to load PKI from config", err)
|
|
}
|
|
}
|
|
- l.WithField("fingerprints", caPool.GetFingerprints()).Debug("Trusted CA fingerprints")
|
|
|
|
|
|
|
|
- cs, err := NewCertStateFromConfig(c)
|
|
|
|
|
|
+ certificate := pki.GetCertState().Certificate
|
|
|
|
+ fw, err := NewFirewallFromConfig(l, certificate, c)
|
|
if err != nil {
|
|
if err != nil {
|
|
- //The errors coming out of NewCertStateFromConfig are already nicely formatted
|
|
|
|
- return nil, util.NewContextualError("Failed to load certificate from config", nil, err)
|
|
|
|
- }
|
|
|
|
- l.WithField("cert", cs.certificate).Debug("Client nebula certificate")
|
|
|
|
-
|
|
|
|
- fw, err := NewFirewallFromConfig(l, cs.certificate, c)
|
|
|
|
- if err != nil {
|
|
|
|
- return nil, util.NewContextualError("Error while loading firewall rules", nil, err)
|
|
|
|
|
|
+ return nil, util.ContextualizeIfNeeded("Error while loading firewall rules", err)
|
|
}
|
|
}
|
|
l.WithField("firewallHash", fw.GetRuleHash()).Info("Firewall started")
|
|
l.WithField("firewallHash", fw.GetRuleHash()).Info("Firewall started")
|
|
|
|
|
|
// TODO: make sure mask is 4 bytes
|
|
// TODO: make sure mask is 4 bytes
|
|
- tunCidr := cs.certificate.Details.Ips[0]
|
|
|
|
|
|
+ tunCidr := certificate.Details.Ips[0]
|
|
|
|
|
|
ssh, err := sshd.NewSSHServer(l.WithField("subsystem", "sshd"))
|
|
ssh, err := sshd.NewSSHServer(l.WithField("subsystem", "sshd"))
|
|
wireSSHReload(l, ssh, c)
|
|
wireSSHReload(l, ssh, c)
|
|
@@ -85,7 +76,7 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
if c.GetBool("sshd.enabled", false) {
|
|
if c.GetBool("sshd.enabled", false) {
|
|
sshStart, err = configSSH(l, ssh, c)
|
|
sshStart, err = configSSH(l, ssh, c)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, util.NewContextualError("Error while configuring the sshd", nil, err)
|
|
|
|
|
|
+ return nil, util.ContextualizeIfNeeded("Error while configuring the sshd", err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -136,7 +127,7 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
|
|
|
|
tun, err = overlay.NewDeviceFromConfig(c, l, tunCidr, tunFd, routines)
|
|
tun, err = overlay.NewDeviceFromConfig(c, l, tunCidr, tunFd, routines)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, util.NewContextualError("Failed to get a tun/tap device", nil, err)
|
|
|
|
|
|
+ return nil, util.ContextualizeIfNeeded("Failed to get a tun/tap device", err)
|
|
}
|
|
}
|
|
|
|
|
|
defer func() {
|
|
defer func() {
|
|
@@ -160,7 +151,7 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
} else {
|
|
} else {
|
|
listenHost, err = net.ResolveIPAddr("ip", rawListenHost)
|
|
listenHost, err = net.ResolveIPAddr("ip", rawListenHost)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, util.NewContextualError("Failed to resolve listen.host", nil, err)
|
|
|
|
|
|
+ return nil, util.ContextualizeIfNeeded("Failed to resolve listen.host", err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -182,7 +173,7 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
for _, rawPreferredRange := range rawPreferredRanges {
|
|
for _, rawPreferredRange := range rawPreferredRanges {
|
|
_, preferredRange, err := net.ParseCIDR(rawPreferredRange)
|
|
_, preferredRange, err := net.ParseCIDR(rawPreferredRange)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, util.NewContextualError("Failed to parse preferred ranges", nil, err)
|
|
|
|
|
|
+ return nil, util.ContextualizeIfNeeded("Failed to parse preferred ranges", err)
|
|
}
|
|
}
|
|
preferredRanges = append(preferredRanges, preferredRange)
|
|
preferredRanges = append(preferredRanges, preferredRange)
|
|
}
|
|
}
|
|
@@ -195,7 +186,7 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
if rawLocalRange != "" {
|
|
if rawLocalRange != "" {
|
|
_, localRange, err := net.ParseCIDR(rawLocalRange)
|
|
_, localRange, err := net.ParseCIDR(rawLocalRange)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, util.NewContextualError("Failed to parse local_range", nil, err)
|
|
|
|
|
|
+ return nil, util.ContextualizeIfNeeded("Failed to parse local_range", err)
|
|
}
|
|
}
|
|
|
|
|
|
// Check if the entry for local_range was already specified in
|
|
// Check if the entry for local_range was already specified in
|
|
@@ -222,11 +213,8 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
|
|
|
|
punchy := NewPunchyFromConfig(l, c)
|
|
punchy := NewPunchyFromConfig(l, c)
|
|
lightHouse, err := NewLightHouseFromConfig(ctx, l, c, tunCidr, udpConns[0], punchy)
|
|
lightHouse, err := NewLightHouseFromConfig(ctx, l, c, tunCidr, udpConns[0], punchy)
|
|
- switch {
|
|
|
|
- case errors.As(err, &util.ContextualError{}):
|
|
|
|
- return nil, err
|
|
|
|
- case err != nil:
|
|
|
|
- return nil, util.NewContextualError("Failed to initialize lighthouse handler", nil, err)
|
|
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, util.ContextualizeIfNeeded("Failed to initialize lighthouse handler", err)
|
|
}
|
|
}
|
|
|
|
|
|
var messageMetrics *MessageMetrics
|
|
var messageMetrics *MessageMetrics
|
|
@@ -266,7 +254,7 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
HostMap: hostMap,
|
|
HostMap: hostMap,
|
|
Inside: tun,
|
|
Inside: tun,
|
|
Outside: udpConns[0],
|
|
Outside: udpConns[0],
|
|
- certState: cs,
|
|
|
|
|
|
+ pki: pki,
|
|
Cipher: c.GetString("cipher", "aes"),
|
|
Cipher: c.GetString("cipher", "aes"),
|
|
Firewall: fw,
|
|
Firewall: fw,
|
|
ServeDns: serveDns,
|
|
ServeDns: serveDns,
|
|
@@ -282,7 +270,6 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
routines: routines,
|
|
routines: routines,
|
|
MessageMetrics: messageMetrics,
|
|
MessageMetrics: messageMetrics,
|
|
version: buildVersion,
|
|
version: buildVersion,
|
|
- caPool: caPool,
|
|
|
|
disconnectInvalid: c.GetBool("pki.disconnect_invalid", false),
|
|
disconnectInvalid: c.GetBool("pki.disconnect_invalid", false),
|
|
relayManager: NewRelayManager(ctx, l, hostMap, c),
|
|
relayManager: NewRelayManager(ctx, l, hostMap, c),
|
|
punchy: punchy,
|
|
punchy: punchy,
|
|
@@ -321,9 +308,8 @@ func Main(c *config.C, configTest bool, buildVersion string, logger *logrus.Logg
|
|
// TODO - stats third-party modules start uncancellable goroutines. Update those libs to accept
|
|
// TODO - stats third-party modules start uncancellable goroutines. Update those libs to accept
|
|
// a context so that they can exit when the context is Done.
|
|
// a context so that they can exit when the context is Done.
|
|
statsStart, err := startStats(l, c, buildVersion, configTest)
|
|
statsStart, err := startStats(l, c, buildVersion, configTest)
|
|
-
|
|
|
|
if err != nil {
|
|
if err != nil {
|
|
- return nil, util.NewContextualError("Failed to start stats emitter", nil, err)
|
|
|
|
|
|
+ return nil, util.ContextualizeIfNeeded("Failed to start stats emitter", err)
|
|
}
|
|
}
|
|
|
|
|
|
if configTest {
|
|
if configTest {
|