- Accept output traffic from all default routes through VPN interface - Accept output from all default routes to outbound subnets - Accept all input traffic on ports for all default routes - Add IP rules for all default routes
48 lines
782 B
Go
48 lines
782 B
Go
// Package routing defines interfaces to interact with the ip routes using NETLINK.
|
|
package routing
|
|
|
|
import (
|
|
"net"
|
|
"sync"
|
|
|
|
"github.com/qdm12/gluetun/internal/netlink"
|
|
)
|
|
|
|
type ReadWriter interface {
|
|
Reader
|
|
Writer
|
|
}
|
|
|
|
type Reader interface {
|
|
DefaultRouteGetter
|
|
LocalSubnetGetter
|
|
LocalNetworksGetter
|
|
VPNGetter
|
|
}
|
|
|
|
type VPNGetter interface {
|
|
VPNDestinationIPGetter
|
|
VPNLocalGatewayIPGetter
|
|
}
|
|
|
|
type Writer interface {
|
|
Setuper
|
|
TearDowner
|
|
OutboundRoutesSetter
|
|
}
|
|
|
|
type Routing struct {
|
|
netLinker netlink.NetLinker
|
|
logger Logger
|
|
outboundSubnets []net.IPNet
|
|
stateMutex sync.RWMutex
|
|
}
|
|
|
|
// New creates a new routing instance.
|
|
func New(netLinker netlink.NetLinker, logger Logger) *Routing {
|
|
return &Routing{
|
|
netLinker: netLinker,
|
|
logger: logger,
|
|
}
|
|
}
|