Routing improvements (#268)
- Fixes #82 - Remove `EXTRA_SUBNETS` - Remove no longer needed iptables rules - Reduce routing interface arity - Routing setup is done in main.go instead of in the firewall - Routing setup gets reverted at shutdown
This commit is contained in:
62
internal/routing/enable.go
Normal file
62
internal/routing/enable.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package routing
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrSetup = fmt.Errorf("cannot setup routing")
|
||||
ErrTeardown = fmt.Errorf("cannot teardown routing")
|
||||
)
|
||||
|
||||
const (
|
||||
table = 200
|
||||
priority = 100
|
||||
)
|
||||
|
||||
func (r *routing) Setup() (err error) {
|
||||
defaultIP, err := r.defaultIP()
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s: %w", ErrSetup, err)
|
||||
}
|
||||
defaultInterfaceName, defaultGateway, err := r.DefaultRoute()
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s: %w", ErrSetup, err)
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
if err := r.TearDown(); err != nil {
|
||||
r.logger.Error(err)
|
||||
}
|
||||
}()
|
||||
if err := r.addIPRule(defaultIP, table, priority); err != nil {
|
||||
return fmt.Errorf("%s: %w", ErrSetup, err)
|
||||
}
|
||||
if err := r.addRouteVia(net.IPNet{}, defaultGateway, defaultInterfaceName, table); err != nil {
|
||||
return fmt.Errorf("%s: %w", ErrSetup, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *routing) TearDown() error {
|
||||
defaultIP, err := r.defaultIP()
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s: %w", ErrTeardown, err)
|
||||
}
|
||||
defaultInterfaceName, defaultGateway, err := r.DefaultRoute()
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s: %w", ErrTeardown, err)
|
||||
}
|
||||
|
||||
if err := r.deleteRouteVia(net.IPNet{}, defaultGateway, defaultInterfaceName, table); err != nil {
|
||||
return fmt.Errorf("%s: %w", ErrTeardown, err)
|
||||
}
|
||||
if err := r.deleteIPRule(defaultIP, table, priority); err != nil {
|
||||
return fmt.Errorf("%s: %w", ErrTeardown, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user