mirror of https://github.com/tailscale/tailscale/
util/linuxfw,wgengine/router: add new netfilter rules for HA ingresses (#15896)
Add new rules to update DNAT rules for Kubernetes operator's HA ingress where it's expected that rules will be added/removed frequently (so we don't want to keep old rules around or rewrite existing rules unnecessarily): - allow deleting DNAT rules using metadata lookup - allow inserting DNAT rules if they don't already exist (using metadata lookup) Updates tailscale/tailscale#15895 Signed-off-by: Irbe Krumina <irbe@tailscale.com> Co-authored-by: chaosinthecrd <tom@tmlabs.co.uk>pull/15908/head
parent
d6dd74fe0e
commit
2c16fcaa06
@ -0,0 +1,95 @@
|
||||
// Copyright (c) Tailscale Inc & AUTHORS
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
//go:build linux
|
||||
|
||||
package linuxfw
|
||||
|
||||
import (
|
||||
"net/netip"
|
||||
|
||||
"tailscale.com/types/logger"
|
||||
)
|
||||
|
||||
// FakeNetfilterRunner is a fake netfilter runner for tests.
|
||||
type FakeNetfilterRunner struct {
|
||||
// services is a map that tracks the firewall rules added/deleted via
|
||||
// EnsureDNATRuleForSvc/DeleteDNATRuleForSvc.
|
||||
services map[string]struct {
|
||||
VIPServiceIP netip.Addr
|
||||
ClusterIP netip.Addr
|
||||
}
|
||||
}
|
||||
|
||||
// NewFakeNetfilterRunner creates a new FakeNetfilterRunner.
|
||||
func NewFakeNetfilterRunner() *FakeNetfilterRunner {
|
||||
return &FakeNetfilterRunner{
|
||||
services: make(map[string]struct {
|
||||
VIPServiceIP netip.Addr
|
||||
ClusterIP netip.Addr
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FakeNetfilterRunner) EnsureDNATRuleForSvc(svcName string, origDst, dst netip.Addr) error {
|
||||
f.services[svcName] = struct {
|
||||
VIPServiceIP netip.Addr
|
||||
ClusterIP netip.Addr
|
||||
}{origDst, dst}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *FakeNetfilterRunner) DeleteDNATRuleForSvc(svcName string, origDst, dst netip.Addr) error {
|
||||
delete(f.services, svcName)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *FakeNetfilterRunner) GetServiceState() map[string]struct {
|
||||
VIPServiceIP netip.Addr
|
||||
ClusterIP netip.Addr
|
||||
} {
|
||||
return f.services
|
||||
}
|
||||
|
||||
func (f *FakeNetfilterRunner) HasIPV6() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (f *FakeNetfilterRunner) HasIPV6Filter() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (f *FakeNetfilterRunner) HasIPV6NAT() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (f *FakeNetfilterRunner) AddBase(tunname string) error { return nil }
|
||||
func (f *FakeNetfilterRunner) DelBase() error { return nil }
|
||||
func (f *FakeNetfilterRunner) AddChains() error { return nil }
|
||||
func (f *FakeNetfilterRunner) DelChains() error { return nil }
|
||||
func (f *FakeNetfilterRunner) AddHooks() error { return nil }
|
||||
func (f *FakeNetfilterRunner) DelHooks(logf logger.Logf) error { return nil }
|
||||
func (f *FakeNetfilterRunner) AddSNATRule() error { return nil }
|
||||
func (f *FakeNetfilterRunner) DelSNATRule() error { return nil }
|
||||
func (f *FakeNetfilterRunner) AddStatefulRule(tunname string) error { return nil }
|
||||
func (f *FakeNetfilterRunner) DelStatefulRule(tunname string) error { return nil }
|
||||
func (f *FakeNetfilterRunner) AddLoopbackRule(addr netip.Addr) error { return nil }
|
||||
func (f *FakeNetfilterRunner) DelLoopbackRule(addr netip.Addr) error { return nil }
|
||||
func (f *FakeNetfilterRunner) AddDNATRule(origDst, dst netip.Addr) error { return nil }
|
||||
func (f *FakeNetfilterRunner) DNATWithLoadBalancer(origDst netip.Addr, dsts []netip.Addr) error {
|
||||
return nil
|
||||
}
|
||||
func (f *FakeNetfilterRunner) EnsureSNATForDst(src, dst netip.Addr) error { return nil }
|
||||
func (f *FakeNetfilterRunner) DNATNonTailscaleTraffic(tun string, dst netip.Addr) error { return nil }
|
||||
func (f *FakeNetfilterRunner) ClampMSSToPMTU(tun string, addr netip.Addr) error { return nil }
|
||||
func (f *FakeNetfilterRunner) AddMagicsockPortRule(port uint16, network string) error { return nil }
|
||||
func (f *FakeNetfilterRunner) DelMagicsockPortRule(port uint16, network string) error { return nil }
|
||||
func (f *FakeNetfilterRunner) DeletePortMapRuleForSvc(svc, tun string, targetIP netip.Addr, pm PortMap) error {
|
||||
return nil
|
||||
}
|
||||
func (f *FakeNetfilterRunner) DeleteSvc(svc, tun string, targetIPs []netip.Addr, pms []PortMap) error {
|
||||
return nil
|
||||
}
|
||||
func (f *FakeNetfilterRunner) EnsurePortMapRuleForSvc(svc, tun string, targetIP netip.Addr, pm PortMap) error {
|
||||
return nil
|
||||
}
|
||||
Loading…
Reference in New Issue