From ace5e97e688c215b87fc0646acad5a202beb441d Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Sun, 13 Mar 2022 14:40:17 +0000 Subject: [PATCH] fix(routing): only set routes for IPv4 default routes --- internal/routing/default.go | 2 ++ internal/routing/inbound.go | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/internal/routing/default.go b/internal/routing/default.go index 1baec75d..728d0504 100644 --- a/internal/routing/default.go +++ b/internal/routing/default.go @@ -20,6 +20,7 @@ type DefaultRoute struct { NetInterface string Gateway net.IP AssignedIP net.IP + Family int } func (d DefaultRoute) String() string { @@ -37,6 +38,7 @@ func (r *Routing) DefaultRoutes() (defaultRoutes []DefaultRoute, err error) { if route.Dst == nil { defaultRoute := DefaultRoute{ Gateway: route.Gw, + Family: route.Family, } linkIndex := route.LinkIndex link, err := r.netLinker.LinkByIndex(linkIndex) diff --git a/internal/routing/inbound.go b/internal/routing/inbound.go index 21a91619..4ca1c30d 100644 --- a/internal/routing/inbound.go +++ b/internal/routing/inbound.go @@ -17,10 +17,15 @@ func (r *Routing) routeInboundFromDefault(defaultRoutes []DefaultRoute) (err 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 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) if err != nil { 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) { - 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 { + defaultDestination := defaultDestinationIPv4 + if defaultRoute.Family == netlink.FAMILY_V6 { + continue // skip IPv6 default routes + } + err := r.deleteRouteVia(defaultDestination, defaultRoute.Gateway, defaultRoute.NetInterface, inboundTable) if err != nil { return fmt.Errorf("cannot delete route: %w", err)