|
@@ -53,7 +53,7 @@ type Firewall struct {
|
|
|
|
|
|
// routableNetworks describes the vpn addresses as well as any unsafe networks issued to us in the certificate.
|
|
|
// The vpn addresses are a full bit match while the unsafe networks only match the prefix
|
|
|
- routableNetworks *bart.Table[struct{}]
|
|
|
+ routableNetworks *bart.Lite
|
|
|
|
|
|
// assignedNetworks is a list of vpn networks assigned to us in the certificate.
|
|
|
assignedNetworks []netip.Prefix
|
|
@@ -125,7 +125,7 @@ type firewallPort map[int32]*FirewallCA
|
|
|
|
|
|
type firewallLocalCIDR struct {
|
|
|
Any bool
|
|
|
- LocalCIDR *bart.Table[struct{}]
|
|
|
+ LocalCIDR *bart.Lite
|
|
|
}
|
|
|
|
|
|
// NewFirewall creates a new Firewall object. A TimerWheel is created for you from the provided timeouts.
|
|
@@ -148,17 +148,17 @@ func NewFirewall(l *logrus.Logger, tcpTimeout, UDPTimeout, defaultTimeout time.D
|
|
|
tmax = defaultTimeout
|
|
|
}
|
|
|
|
|
|
- routableNetworks := new(bart.Table[struct{}])
|
|
|
+ routableNetworks := new(bart.Lite)
|
|
|
var assignedNetworks []netip.Prefix
|
|
|
for _, network := range c.Networks() {
|
|
|
nprefix := netip.PrefixFrom(network.Addr(), network.Addr().BitLen())
|
|
|
- routableNetworks.Insert(nprefix, struct{}{})
|
|
|
+ routableNetworks.Insert(nprefix)
|
|
|
assignedNetworks = append(assignedNetworks, network)
|
|
|
}
|
|
|
|
|
|
hasUnsafeNetworks := false
|
|
|
for _, n := range c.UnsafeNetworks() {
|
|
|
- routableNetworks.Insert(n, struct{}{})
|
|
|
+ routableNetworks.Insert(n)
|
|
|
hasUnsafeNetworks = true
|
|
|
}
|
|
|
|
|
@@ -431,8 +431,7 @@ func (f *Firewall) Drop(fp firewall.Packet, incoming bool, h *HostInfo, caPool *
|
|
|
|
|
|
// Make sure remote address matches nebula certificate
|
|
|
if h.networks != nil {
|
|
|
- _, ok := h.networks.Lookup(fp.RemoteAddr)
|
|
|
- if !ok {
|
|
|
+ if !h.networks.Contains(fp.RemoteAddr) {
|
|
|
f.metrics(incoming).droppedRemoteAddr.Inc(1)
|
|
|
return ErrInvalidRemoteIP
|
|
|
}
|
|
@@ -445,8 +444,7 @@ func (f *Firewall) Drop(fp firewall.Packet, incoming bool, h *HostInfo, caPool *
|
|
|
}
|
|
|
|
|
|
// Make sure we are supposed to be handling this local ip address
|
|
|
- _, ok := f.routableNetworks.Lookup(fp.LocalAddr)
|
|
|
- if !ok {
|
|
|
+ if !f.routableNetworks.Contains(fp.LocalAddr) {
|
|
|
f.metrics(incoming).droppedLocalAddr.Inc(1)
|
|
|
return ErrInvalidLocalIP
|
|
|
}
|
|
@@ -752,7 +750,7 @@ func (fc *FirewallCA) match(p firewall.Packet, c *cert.CachedCertificate, caPool
|
|
|
func (fr *FirewallRule) addRule(f *Firewall, groups []string, host string, ip, localCIDR netip.Prefix) error {
|
|
|
flc := func() *firewallLocalCIDR {
|
|
|
return &firewallLocalCIDR{
|
|
|
- LocalCIDR: new(bart.Table[struct{}]),
|
|
|
+ LocalCIDR: new(bart.Lite),
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -879,7 +877,7 @@ func (flc *firewallLocalCIDR) addRule(f *Firewall, localIp netip.Prefix) error {
|
|
|
}
|
|
|
|
|
|
for _, network := range f.assignedNetworks {
|
|
|
- flc.LocalCIDR.Insert(network, struct{}{})
|
|
|
+ flc.LocalCIDR.Insert(network)
|
|
|
}
|
|
|
return nil
|
|
|
|
|
@@ -888,7 +886,7 @@ func (flc *firewallLocalCIDR) addRule(f *Firewall, localIp netip.Prefix) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
- flc.LocalCIDR.Insert(localIp, struct{}{})
|
|
|
+ flc.LocalCIDR.Insert(localIp)
|
|
|
return nil
|
|
|
}
|
|
|
|
|
@@ -901,8 +899,7 @@ func (flc *firewallLocalCIDR) match(p firewall.Packet, c *cert.CachedCertificate
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
- _, ok := flc.LocalCIDR.Lookup(p.LocalAddr)
|
|
|
- return ok
|
|
|
+ return flc.LocalCIDR.Contains(p.LocalAddr)
|
|
|
}
|
|
|
|
|
|
type rule struct {
|