08-03-2018 09:40 AM
I have a hub-spoke model using DMVPN. I have created a spoke QoS policy for each remote site to make sure that certain traffic gets prioritized over the tunnel back to the head-end router. However, I am a little confused about what kind of policy I should put on the head-end router to make sure my prioritized traffic leaving the spoke remains prioritized coming back during times of spoke congestion.
Each spoke has a 100Mb link, but the head-end router uses a 10G link. Since the head-end link is so large, it will never experience congestion so I am not sure CBWFQ will kick in. I also do not want to use the same bandwidth reservation requirements on the head-end that I use on the Spoke for fear of throttling the 10G link too much.
I have already implemented per-tunnel traffic-shaping on the head-end to ensure that traffic does not go over the Spoke 100Mb limit. I am just trying to figure out if I need to implement a output policy on the head-end router to ensure certain traffic stays prioritized going back to the spoke, or if the fact that the spoke already prioritizes the traffic leaving the spoke if it will still come back in without being affected by other less prioritized traffic. Thanks!
Solved! Go to Solution.
08-04-2018 12:46 AM
Hello,
sorry for my late reply.
What you have configured on the head end is sufficient. You would only need an outbound policy (on the physical interface) if the aggregated bandwidth of all spokes would exceed the 10G (which would equal 100+ spokes, which I assume you don't have). So your config looks good as is.
08-03-2018 10:23 AM
Hello,
can you post what you have configured (hub/spoke configs) ?
If your IOS supports it, you might consider Per-Tunnel QoS for DMVPN, which makes the configurations somewhat less complicated...
08-03-2018 10:47 AM - edited 08-03-2018 10:48 AM
Head-end router:
policy-map 100_MB class class-default shape average 104857600 ! interface Tunnel100 nhrp map group Spoke_100_MB service-policy output 100_MB
I am wondering if I need to build a child policy to nest with the policy-map 100_MB policy.
Spoke router:
interface Tunnel100 nhrp group Spoke_100_MB ! class-map match-any D4_PREC4 match ip dscp af41 match ip dscp af42 match ip dscp af43 match ip precedence 4 class-map match-any D3_PREC3 match ip dscp af31 match ip dscp af32 match ip dscp af33 match ip dscp cs6 match ip dscp cs3 match ip precedence 6 class-map match-any D2_PREC2 match ip dscp af21 match ip dscp af22 match ip dscp af23 match ip dscp cs2 class-map match-any D1_PREC1 match ip dscp af11 match ip dscp af12 match ip dscp af13 match ip dscp cs1 class-map POS match access-group name POS class-map match-any NETWORK_MGMT match protocol ssh match protocol snmp match protocol ftp match protocol syslog match protocol tacacs match protocol icmp class-map SKYPE match access-group name SKYPE class-map RTSP match application rtsp class-map match-any FILE-SERVICES match protocol nfs match protocol rdp ! policy-map QUEUE-OUTPUT class D3_PREC3 priority 20480 class D4_PREC4 bandwidth remaining percent 40 class D2_PREC2 bandwidth remaining percent 30 class D1_PREC1 bandwidth remaining percent 20 class class-default queue-limit 1600 packets ! policy-map SHAPE-OUTPUT class class-default shape average 100m service-policy QUEUE-OUTPUT ! policy-map MARK-INPUT class POS set ip dscp af31 class NETWORK_MGMT set ip dscp cs2 class SKYPE set ip dscp af41 class RTSP set ip dscp af43 class FILE-SERVICES set ip dscp af21 class class-default ! ip access-list extended POS permit ip object-group POS_A any permit ip object-group POS_B any permit ip object-group POS_C any ! ip access-list extended SKYPE permit udp any any range 3478 3481 permit udp any any range 49512 65535 permit tcp any any range 49512 65535 ! int gi0/0/2 load-interval 30 service-policy output SHAPE-OUTPUT ! int po1.100 service-policy input MARK-INPUT ! int po1.102 service-policy input MARK-INPUT ! int po1.104 service-policy input MARK-INPUT ! int po1.106 service-policy input MARK-INPUT ! int po1.108 service-policy input MARK-INPUT ! int po1.110 service-policy input MARK-INPUT
08-03-2018 10:55 AM
HUB Config
interface Tunnel100 nhrp map group Spoke_100_MB service-policy output 100_MB !
policy-map 100_MB class class-default shape average 104857600
I am wondering if I need to create a child policy to nest with the 100_MB policy.
SPOKE Config
interface Tunnel100 nhrp group Spoke_100_MB ! class-map match-any D4_PREC4 match ip dscp af41 match ip dscp af42 match ip dscp af43 match ip precedence 4 class-map match-any D3_PREC3 match ip dscp af31 match ip dscp af32 match ip dscp af33 match ip dscp cs6 match ip dscp cs3 match ip precedence 6 class-map match-any D2_PREC2 match ip dscp af21 match ip dscp af22 match ip dscp af23 match ip dscp cs2 class-map match-any D1_PREC1 match ip dscp af11 match ip dscp af12 match ip dscp af13 match ip dscp cs1 class-map POS match access-group name POS class-map match-any NETWORK_MGMT match protocol ssh match protocol snmp match protocol ftp match protocol syslog match protocol tacacs match protocol icmp class-map SKYPE match access-group name SKYPE class-map RTSP match application rtsp class-map match-any FILE-SERVICES match protocol nfs match protocol rdp ! policy-map QUEUE-OUTPUT class D3_PREC3 priority 20480 class D4_PREC4 bandwidth remaining percent 40 class D2_PREC2 bandwidth remaining percent 30 class D1_PREC1 bandwidth remaining percent 20 class class-default queue-limit 1600 packets ! policy-map SHAPE-OUTPUT class class-default shape average 100m service-policy QUEUE-OUTPUT ! policy-map MARK-INPUT class POS set ip dscp af31 class NETWORK_MGMT set ip dscp cs2 class SKYPE set ip dscp af41 class RTSP set ip dscp af43 class FILE-SERVICES set ip dscp af21 class class-default ! ip access-list extended POS permit ip object-group POS_A any permit ip object-group POS_B any permit ip object-group POS_C any ip access-list extended SKYPE permit udp any any range 3478 3481 permit udp any any range 49512 65535 permit tcp any any range 49512 65535 ! int gi0/0/2 load-interval 30 service-policy output SHAPE-OUTPUT ! int po1.100 service-policy input MARK-INPUT ! int po1.102 service-policy input MARK-INPUT ! int po1.104 service-policy input MARK-INPUT ! int po1.106 service-policy input MARK-INPUT ! int po1.108 service-policy input MARK-INPUT ! int po1.110 service-policy input MARK-INPUT
08-04-2018 12:46 AM
Hello,
sorry for my late reply.
What you have configured on the head end is sufficient. You would only need an outbound policy (on the physical interface) if the aggregated bandwidth of all spokes would exceed the 10G (which would equal 100+ spokes, which I assume you don't have). So your config looks good as is.
08-04-2018 06:46 AM - edited 08-04-2018 07:16 AM
Are spokes logically limited to 100 Mbps or physically limited? (An example of the former, interface running at gig, but WAN provider only providing 100 Mbps.) If the latter, you don't need to also shape them for 100 Mbps.
BTW, for your remote QoS, most routers would allow you to match and mark in egress classes too. I.e. you have the option of not needing your input policy.
To your question of should you have a child policy for your HQ tunnels - if you want to prioritize transmission and/or drops, when and if there's HQ tunnel egress congestion - the answer is yes. (NB: this is contrary to Georg's recommendation, but otherwise a shaper, alone, at least the later implementations, might only FIFO all your traffic.)
Also BTW, on some routers I'm unsure that Cisco's shapers always account for L2 overhead. If a shaper doesn't appear to be doing so, set it about 15% slower than the nominal bandwidth (to allow for typical L2 overhead).
Another BTW, when matching DSCP tags like:
class-map match-any D3_PREC3
match ip dscp af31
match ip dscp af32
match ip dscp af33
match ip dscp cs6
match ip dscp cs3
match ip precedence 6
Matching IPPrec 6 will also match DSCP CS6. Also, if you match IPPrec 3, it will match CS3, AF31, AF32 and AF33. (Remember IPPrec is the first 3 bits of the DSCP.)
Lastly, when matching NBAR's SSH, that includes SCP.
I also suggest, when setting up a QoS policy, start with everything in class-default using FQ. Only place traffic in other classes that really, really need it. Also don't forget, besides guaranteeing better service to some classes, much can often be accomplished by decreasing priority to some traffic. Also know how you manage drops can be almost as crucial as how you manage bandwidth. (The last is because of your using something like your:
class class-default
queue-limit 1600 packets
as too large queue limits can be counter productive.)
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide