On Tue, Apr 02, 2024 at 07:43:01PM +0300, Alexandre Snarskii via juniper-nsp 
wrote:
> On Tue, Apr 02, 2024 at 03:25:21PM +0000, Michael Hare via juniper-nsp wrote:
> 
> Hi!
> 
> Workaround that we're using (not elegant, but working): setup a 
> "self-pointing" routes to directly connected destinations:
> 
> set routing-options static route A.B.C.D/32 next-hop A.B.C.D

Forgot to note one thing: these self-pointing routes shall have 
preference of 200 (or anytning more than BGP's 170):

set routing-options static route A.B.C.D/32 next-hop A.B.C.D
set routing-options static route A.B.C.D/32 preference 200

so, in case when traffic shall be diverted to scrubbing, bgp route
will be active in inet.0 and static route will be active in cleanL3VPN:

s...@rt1.ov.spb> show route A.B.C.D/32
inet.0: ...
+ = Active Route, - = Last Active, * = Both

A.B.C.D/32         *[BGP/170] 00:06:33, localpref 100
                      AS path: 65532 I, validation-state: unverified
                    >  to Scrubbing via ae3.232
                    [Static/200] 00:02:22
                    >  to A.B.C.D via ae3.200

cleanL3VPN.inet.0: ....
+ = Active Route, - = Last Active, * = Both

A.B.C.D/32         *[Static/200] 00:02:22
                    >  to A.B.C.D via ae3.200


and the corresponding forwarding entry:

Routing table: default.inet [Index 0] 
Internet:
    
Destination:  A.B.C.D/32
  Route type: user                  
  Route reference: 0                   Route interface-index: 0   
  Multicast RPF nh index: 0             
  P2mpidx: 0              
  Flags: sent to PFE, rt nh decoupled  
  Nexthop: Scrubbing
  Next-hop type: unicast               Index: 2971     Reference: 6    
  Next-hop interface: ae3.232      
  RPF interface: ae3.200
  RPF interface: ae3.232
    
Destination:  A.B.C.D/32
  Route type: destination           
  Route reference: 0                   Route interface-index: 431 
  Multicast RPF nh index: 0             
  P2mpidx: 0              
  Flags: none 
  Nexthop: 0:15:17:b0:e6:f8
  Next-hop type: unicast               Index: 2930     Reference: 3    
  Next-hop interface: ae3.200           
  RPF interface: ae3.200                

[...]
Routing table: cleanL3VPN.inet [Index 6] 
Internet:                               
                                        
Destination:  A.B.C.D/32
  Route type: user                      
  Route reference: 0                   Route interface-index: 0   
  Multicast RPF nh index: 0             
  P2mpidx: 0                            
  Flags: sent to PFE, rt nh decoupled   
  Nexthop: 0:15:17:b0:e6:f8             
  Next-hop type: unicast               Index: 2930     Reference: 3    
  Next-hop interface: ae3.200           


> 
> and export these to cleanL3VPN. Resulting forwarding-table:
> 
> Routing table: default.inet [Index 0]
> Internet:
> 
> Destination:  A.B.C.D/32
>   Route type: user
>   Route reference: 0                   Route interface-index: 0
>   Multicast RPF nh index: 0
>   P2mpidx: 0
>   Flags: sent to PFE, rt nh decoupled
>   Nexthop: 0:15:17:b0:e6:f8
>   Next-hop type: unicast               Index: 2930     Reference: 4
>   Next-hop interface: ae3.200
>   RPF interface: ae3.200
> 
> [...]
> 
> Routing table: cleanL3VPN.inet [Index 6]
> Internet:
> 
> Destination:  A.B.C.D/32
>   Route type: user
>   Route reference: 0                   Route interface-index: 0
>   Multicast RPF nh index: 0
>   P2mpidx: 0
>   Flags: sent to PFE, rt nh decoupled
>   Nexthop: 0:15:17:b0:e6:f8
>   Next-hop type: unicast               Index: 2930     Reference: 4
>   Next-hop interface: ae3.200
> 
> Unfortunately, we found no way to provision such routes via BGP,
> so you have to have all those in configuration :(
> 
> If there is a better workaround, I'd like to know it too :)
> 
> 
> > Hi there,
> > 
> > We're a US research and education ISP and we've been tasked for coming up 
> > with an architecture to allow on premise DDoS scrubbing with an appliance.  
> >  As a first pass I've created an cleanL3VPN routing-instance to function as 
> > a clean VRF that uses rib-groups to mirror the relevant parts of inet.0.   
> > It is in production and is working great for customer learned BGP routes.  
> > It falls apart when I try to protect a directly attached destination that 
> > has a mac address in inet.0.  I think I understand why and the purpose of 
> > this message is to see if anyone has been in a similar situation and has 
> > thoughts/advice/warnings about alternative designs.
> > 
> > To explain what I see, I noticed that mac address based nexthops don't seem 
> > to be copied from inet.0 into cleanL3VPN.inet.0.  I assume this means that 
> > mac-address based forwarding must be referencing inet.0 [see far below].   
> > This obviously creates a loop once the best path in inet.0 becomes a BGP 
> > /32.  For example when I'm announcing a /32 for 1.2.3.4 out of a locally 
> > attached 1.2.3.0/26, traceroute implies the packet enters inet.0, is sent 
> > to 5.6.7.8 as the nexthop correctly, arrives in cleanL3VPN which decides to 
> > forward to 5.6.7.8 in a loop, even though the BGP /32 isn't part of 
> > cleanL3VPN [see below], cleanL3VPN Is dependent on inet.0 for resolution.  
> > Even if I could copy inet.0 mac addresses into cleanL3VPN, eventually the 
> > mac address would age out of inet.0 because the /32 would no longer be 
> > directly connected.  If I want to be able to protect locally attached 
> > destinations so I think my design is unworkable, I think my solutions are 
> > 
> > = use flowspec redirection to dirty VRF, keep inet.0 as clean and use 
> > flowspec interface filter-group appropriately on backbone interfaces 
> > [routing-options flow interface-group exclude, which I already have 
> > deployed correctly].  This seems easy but is less performant.
> > = put my customers into a customerVRF and deal with route leaking between 
> > global and customerVRF.  This is a well-known tactic but more complicated 
> > to approach and disruptive to deploy as I have to airlift basically all the 
> > customers to into a VRF to have full coverage.
> > 
> > For redirection, to date I've been looking at longest prefix match 
> > solutions due to the presumed scalability vs using flowspec.  I have an 
> > unknown amount of "always on" redirects I might be asked to entertain.  10? 
> >  100? 1000?  I'm trying to come up with a solution that doesn't rely on 
> > touching the routers themselves.  I did think about creating a normal [non 
> > flowspec] input firewall term on untrusted interfaces that redirects to 
> > dirty VRF based in a single destination prefix-list and just relying on 
> > flowspec for on demand stuff with the assumption one firewall term with 
> > let's say 1000 prefixes is more performant than 1000 standalone flowspec 
> > rules.   I think my solution is fundamentally workable but I don't think 
> > the purchased turnkey ddos orchestration is going to natively interact with 
> > our Junipers, so that is looked down upon, since it would require " a 
> > router guy " or writing custom automation when adding/removing always-on 
> > protection.  Seems technically very viable to me, I
  j
>  us
> >  t bring up these details because I feel like without a ton of effort VRF 
> > redirection can be made to be nearly as performant as longest prefix match.
> > 
> > While we run MPLS, currently all of our customers/transit are in the global 
> > table.  I'm trying to avoid solutions for now that puts the 1M+ RIB DFZ 
> > zone into an L3VPN; it's awfully big change I don't want to rush into 
> > especially for this proof of concept but I'd like to hear opinions if 
> > that's the best solution to this specific problem.  I'm not sure it's 
> > fundamentally different than creating a customerVRF, seems like I just need 
> > to separate the customers from the internet ingress.
> > 
> > My gut says "the best" thing to do is to create a customerVRF but it feels 
> > a bit complicated as I have to worry about things like BGP/static/direct 
> > and will lose addPath [I recently discovered add-path and route-target are 
> > mutually exclusive in JunOS].  
> > 
> > My gut says "the quickest" and least disruptive thing to do is to go the 
> > flowspec/filter route and frankly I'm beginning to lean that way since I'm 
> > already partially in production and needed to have a solution 5 days ago to 
> > this problem :>
> > 
> > I've done all of these things before [flowspec, rib leaking] I think it's 
> > just a matter of trying to figure out the next best step and was looking to 
> > see if anyone has been in a similar situation and has 
> > thoughts/advice/warnings.
> > 
> > I'm talking about IPv4 below but I ack IPv6 is a thing and I would just do 
> > the same solution.
> > 
> > -Michael
> > 
> > ===/===
> > 
> > @$myrouter> show route forwarding-table destination 1.2.3.4 extensive 
> > Apr 02 08:39:10
> > Routing table: default.inet [Index 0] 
> > Internet:
> >     
> > Destination:  1.2.3.4/32
> >   Route type: user                  
> >   Route reference: 0                   Route interface-index: 0   
> >   Multicast RPF nh index: 0             
> >   P2mpidx: 0              
> >   Flags: sent to PFE 
> >   Next-hop type: indirect              Index: 1048588  Reference: 3    
> >   Nexthop: 5.6.7.8
> >   Next-hop type: unicast               Index: 981      Reference: 3    
> >   Next-hop interface: et-0/1/10.3099
> >     
> > Destination:  1.2.3.4/32
> >   Route type: destination           
> >   Route reference: 0                   Route interface-index: 85  
> >   Multicast RPF nh index: 0             
> >   P2mpidx: 0              
> >   Flags: none 
> >   Nexthop: 0:50:56:b3:4f:fe
> >   Next-hop type: unicast               Index: 1562     Reference: 1    
> >   Next-hop interface: ae17.3347    
> > 
> > Routing table: cleanL3VPN.inet [Index 21] 
> > Internet:
> >     
> > Destination:  1.2.3.0/26
> >   Route type: user                  
> >   Route reference: 0                   Route interface-index: 0   
> >   Multicast RPF nh index: 0             
> >   P2mpidx: 0              
> >   Flags: sent to PFE, rt nh decoupled  
> >   Next-hop type: table lookup          Index: 1        Reference: 40    
> > _______________________________________________
> > juniper-nsp mailing list juniper-nsp@puck.nether.net
> > https://puck.nether.net/mailman/listinfo/juniper-nsp
> _______________________________________________
> juniper-nsp mailing list juniper-nsp@puck.nether.net
> https://puck.nether.net/mailman/listinfo/juniper-nsp
_______________________________________________
juniper-nsp mailing list juniper-nsp@puck.nether.net
https://puck.nether.net/mailman/listinfo/juniper-nsp

Reply via email to