mirror of
https://github.com/slackhq/nebula.git
synced 2025-12-15 15:20:44 -08:00
Cert interface (#1212)
This commit is contained in:
parent
16eaae306a
commit
08ac65362e
49 changed files with 2862 additions and 2833 deletions
33
interface.go
33
interface.go
|
|
@ -6,6 +6,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"net/netip"
|
||||
"os"
|
||||
"runtime"
|
||||
|
|
@ -157,26 +158,6 @@ func NewInterface(ctx context.Context, c *InterfaceConfig) (*Interface, error) {
|
|||
|
||||
certificate := c.pki.GetCertState().Certificate
|
||||
|
||||
myVpnAddr, ok := netip.AddrFromSlice(certificate.Details.Ips[0].IP)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("invalid ip address in certificate: %s", certificate.Details.Ips[0].IP)
|
||||
}
|
||||
|
||||
myVpnMask, ok := netip.AddrFromSlice(certificate.Details.Ips[0].Mask)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("invalid ip mask in certificate: %s", certificate.Details.Ips[0].Mask)
|
||||
}
|
||||
|
||||
myVpnAddr = myVpnAddr.Unmap()
|
||||
myVpnMask = myVpnMask.Unmap()
|
||||
|
||||
if myVpnAddr.BitLen() != myVpnMask.BitLen() {
|
||||
return nil, fmt.Errorf("ip address and mask are different lengths in certificate")
|
||||
}
|
||||
|
||||
ones, _ := certificate.Details.Ips[0].Mask.Size()
|
||||
myVpnNet := netip.PrefixFrom(myVpnAddr, ones)
|
||||
|
||||
ifce := &Interface{
|
||||
pki: c.pki,
|
||||
hostMap: c.HostMap,
|
||||
|
|
@ -194,7 +175,7 @@ func NewInterface(ctx context.Context, c *InterfaceConfig) (*Interface, error) {
|
|||
version: c.version,
|
||||
writers: make([]udp.Conn, c.routines),
|
||||
readers: make([]io.ReadWriteCloser, c.routines),
|
||||
myVpnNet: myVpnNet,
|
||||
myVpnNet: certificate.Networks()[0],
|
||||
relayManager: c.relayManager,
|
||||
|
||||
conntrackCacheTimeout: c.ConntrackCacheTimeout,
|
||||
|
|
@ -209,9 +190,11 @@ func NewInterface(ctx context.Context, c *InterfaceConfig) (*Interface, error) {
|
|||
l: c.l,
|
||||
}
|
||||
|
||||
if myVpnAddr.Is4() {
|
||||
addr := myVpnNet.Masked().Addr().As4()
|
||||
binary.BigEndian.PutUint32(addr[:], binary.BigEndian.Uint32(addr[:])|^binary.BigEndian.Uint32(certificate.Details.Ips[0].Mask))
|
||||
if ifce.myVpnNet.Addr().Is4() {
|
||||
maskedAddr := certificate.Networks()[0].Masked()
|
||||
addr := maskedAddr.Addr().As4()
|
||||
mask := net.CIDRMask(maskedAddr.Bits(), maskedAddr.Addr().BitLen())
|
||||
binary.BigEndian.PutUint32(addr[:], binary.BigEndian.Uint32(addr[:])|^binary.BigEndian.Uint32(mask))
|
||||
ifce.myBroadcastAddr = netip.AddrFrom4(addr)
|
||||
}
|
||||
|
||||
|
|
@ -434,7 +417,7 @@ func (f *Interface) emitStats(ctx context.Context, i time.Duration) {
|
|||
f.firewall.EmitStats()
|
||||
f.handshakeManager.EmitStats()
|
||||
udpStats()
|
||||
certExpirationGauge.Update(int64(f.pki.GetCertState().Certificate.Details.NotAfter.Sub(time.Now()) / time.Second))
|
||||
certExpirationGauge.Update(int64(f.pki.GetCertState().Certificate.NotAfter().Sub(time.Now()) / time.Second))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue