2023-04-17 11:15:37 +02:00
|
|
|
//go:build !android
|
|
|
|
|
2022-09-05 09:06:35 +02:00
|
|
|
package routemanager
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
2023-04-17 11:15:37 +02:00
|
|
|
|
2022-09-05 09:06:35 +02:00
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2022-09-30 11:39:15 +02:00
|
|
|
ipv6Forwarding = "netbird-rt-ipv6-forwarding"
|
|
|
|
ipv4Forwarding = "netbird-rt-ipv4-forwarding"
|
|
|
|
ipv6Nat = "netbird-rt-ipv6-nat"
|
|
|
|
ipv4Nat = "netbird-rt-ipv4-nat"
|
|
|
|
natFormat = "netbird-nat-%s"
|
|
|
|
forwardingFormat = "netbird-fwd-%s"
|
|
|
|
inNatFormat = "netbird-nat-in-%s"
|
|
|
|
inForwardingFormat = "netbird-fwd-in-%s"
|
|
|
|
ipv6 = "ipv6"
|
|
|
|
ipv4 = "ipv4"
|
2022-09-05 09:06:35 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func genKey(format string, input string) string {
|
|
|
|
return fmt.Sprintf(format, input)
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewFirewall if supported, returns an iptables manager, otherwise returns a nftables manager
|
|
|
|
func NewFirewall(parentCTX context.Context) firewallManager {
|
2023-07-19 19:10:27 +02:00
|
|
|
manager, err := newNFTablesManager(parentCTX)
|
|
|
|
if err == nil {
|
|
|
|
log.Debugf("nftables firewall manager will be used")
|
|
|
|
return manager
|
2022-09-05 09:06:35 +02:00
|
|
|
}
|
2023-07-19 19:10:27 +02:00
|
|
|
log.Debugf("fallback to iptables firewall manager: %s", err)
|
|
|
|
return newIptablesManager(parentCTX)
|
2023-07-14 20:44:35 +02:00
|
|
|
}
|
|
|
|
|
2022-09-30 11:39:15 +02:00
|
|
|
func getInPair(pair routerPair) routerPair {
|
|
|
|
return routerPair{
|
|
|
|
ID: pair.ID,
|
|
|
|
// invert source/destination
|
|
|
|
source: pair.destination,
|
|
|
|
destination: pair.source,
|
|
|
|
masquerade: pair.masquerade,
|
|
|
|
}
|
|
|
|
}
|