fix(routing): only set routes for IPv4 default routes

This commit is contained in:
Quentin McGaw
2022-03-13 14:40:17 +00:00
parent 82d42297e8
commit ace5e97e68
2 changed files with 15 additions and 2 deletions

View File

@@ -20,6 +20,7 @@ type DefaultRoute struct {
NetInterface string NetInterface string
Gateway net.IP Gateway net.IP
AssignedIP net.IP AssignedIP net.IP
Family int
} }
func (d DefaultRoute) String() string { func (d DefaultRoute) String() string {
@@ -37,6 +38,7 @@ func (r *Routing) DefaultRoutes() (defaultRoutes []DefaultRoute, err error) {
if route.Dst == nil { if route.Dst == nil {
defaultRoute := DefaultRoute{ defaultRoute := DefaultRoute{
Gateway: route.Gw, Gateway: route.Gw,
Family: route.Family,
} }
linkIndex := route.LinkIndex linkIndex := route.LinkIndex
link, err := r.netLinker.LinkByIndex(linkIndex) link, err := r.netLinker.LinkByIndex(linkIndex)

View File

@@ -17,10 +17,15 @@ func (r *Routing) routeInboundFromDefault(defaultRoutes []DefaultRoute) (err err
return fmt.Errorf("cannot add rule: %w", err) return fmt.Errorf("cannot add rule: %w", err)
} }
defaultDestination := net.IPNet{IP: net.IPv4(0, 0, 0, 0), Mask: net.IPv4Mask(0, 0, 0, 0)} defaultDestinationIPv4 := net.IPNet{IP: net.IPv4(0, 0, 0, 0), Mask: net.IPv4Mask(0, 0, 0, 0)}
// TODO IPv6 // TODO IPv6
for _, defaultRoute := range defaultRoutes { for _, defaultRoute := range defaultRoutes {
defaultDestination := defaultDestinationIPv4
if defaultRoute.Family == netlink.FAMILY_V6 {
continue // skip IPv6 default routes
}
err := r.addRouteVia(defaultDestination, defaultRoute.Gateway, defaultRoute.NetInterface, inboundTable) err := r.addRouteVia(defaultDestination, defaultRoute.Gateway, defaultRoute.NetInterface, inboundTable)
if err != nil { if err != nil {
return fmt.Errorf("cannot add route: %w", err) return fmt.Errorf("cannot add route: %w", err)
@@ -31,9 +36,15 @@ func (r *Routing) routeInboundFromDefault(defaultRoutes []DefaultRoute) (err err
} }
func (r *Routing) unrouteInboundFromDefault(defaultRoutes []DefaultRoute) (err error) { func (r *Routing) unrouteInboundFromDefault(defaultRoutes []DefaultRoute) (err error) {
defaultDestination := net.IPNet{IP: net.IPv4(0, 0, 0, 0), Mask: net.IPv4Mask(0, 0, 0, 0)} defaultDestinationIPv4 := net.IPNet{IP: net.IPv4(0, 0, 0, 0), Mask: net.IPv4Mask(0, 0, 0, 0)}
// TODO IPv6
for _, defaultRoute := range defaultRoutes { for _, defaultRoute := range defaultRoutes {
defaultDestination := defaultDestinationIPv4
if defaultRoute.Family == netlink.FAMILY_V6 {
continue // skip IPv6 default routes
}
err := r.deleteRouteVia(defaultDestination, defaultRoute.Gateway, defaultRoute.NetInterface, inboundTable) err := r.deleteRouteVia(defaultDestination, defaultRoute.Gateway, defaultRoute.NetInterface, inboundTable)
if err != nil { if err != nil {
return fmt.Errorf("cannot delete route: %w", err) return fmt.Errorf("cannot delete route: %w", err)