- The DiffServ Architecture
- A Quick MQC Review
- DiffServ and IP Packets
- DiffServ and MPLS Packets
- Label Stack Treatment
- Tunnel Modes
- DiffServ-Aware Traffic Engineering (DS-TE)
- Forwarding DS-TE Traffic Down a Tunnel
- Summary
Forwarding DS-TE Traffic Down a Tunnel
Chapter 5 covered three different methods of forwarding traffic down a tunnel:
- Static routes
- Policy-based routing (PBR)
- Autoroute
How do you forward traffic down a DS-TE tunnel? The only thing different between regular TE tunnels and DS-TE tunnels is the subpool from which they reserve bandwidth. How-ever, there are some things you need to think about when trying to get traffic to a DS-TE tunnel.
All three of these methods work the same way on DS-TE tunnels as they do on regular TE tunnels. Out of the three, autoroute is generally the easiest method to use; it requires only one command on the headend, and all traffic destined for or behind the tail is sent down the tunnel.
The problem with autoroute and DS-TE is that autoroute is not always granular enough to do what you need to do. If you have both TE and DS-TE tunnels to the same destination, you can't autoroute on them both and have them do what you probably want.
Consider the topology shown in Figure 6-11.
Figure 6-11 Topology in Which You Can't Enable Autoroute on a DS-TE Tunnel
In Figure 6-11, H2 has VoIP traffic destined for H4, and H1 has regular data traffic destined for H3. This network has two TE tunnels. Tunnel0 is a regular TE tunnel that follows the path AνBνDνEνFνG, and Tunnel1 is a DS-TE tunnel from A to G that follows the path AνBνCνFνG. You want all traffic for H4 to go down Tunnel1 and all other traffic to go down Tunnel0.
What happens if you enable autoroute on both tunnels? Both H3 and H4 become reachable over both TE tunnels, as shown in Example 6-11.
Example 6-11 H3 and H4 Can Be Reached Over Both TE Tunnels
RouterA#show ip route 3.3.3.3 Routing entry for 3.3.3.3/32 Known via "isis", distance 115, metric 50, type level-2 Redistributing via isis Last update from 192.168.1.1 on Tunnel0, 00:00:19 ago Routing Descriptor Blocks: * 192.168.1.1, from 192.168.1.1, via Tunnel1 Route metric is 50, traffic share count is 10 192.168.1.1, from 192.168.1.1, via Tunnel0 Route metric is 50, traffic share count is 1 RouterA#show ip route 4.4.4.4 Routing entry for 4.4.4.4/32 Known via "isis", distance 115, metric 50, type level-2 Redistributing via isis Last update from 192.168.1.1 on Tunnel0, 00:00:31 ago Routing Descriptor Blocks: * 192.168.1.1, from 192.168.1.1, via Tunnel1 Route metric is 50, traffic share count is 10 192.168.1.1, from 192.168.1.1, via Tunnel0 Route metric is 50, traffic share count is 1
This is not what you want. The only way to solve this problem is with a static routesomething like this:
ip route 3.3.3.3 255.255.255.255 Tunnel1
This gives you the routing table shown in Example 6-12.
Example 6-12 Routing Table for Router A After Configuring a Static Route
RouterA#show ip route 3.3.3.3 Routing entry for 3.3.3.3/32 Known via "static", distance 1, metric 0 (connected) Routing Descriptor Blocks: * directly connected, via Tunnel1 Route metric is 0, traffic share count is 1
But what happens if you have lots of hosts that receive VoIP traffic? Static routes are a reasonable solution for a small-scale problem, but managing large numbers of static routes can be a nightmare.
You can try to solve the static route problem by aggregating your VoIP devices into shared subnets. Instead of 200 VoIP devices and a /32 route for each device, number all the VoIP devices into the same /24. Then you have only one static route.
Even then, you still have the same problem of scale. It's not always possible to summarize all your devices so neatly. Plus, you need to consider the issue of multiple sources. Consider the network shown in Figure 6-12.
Figure 6-12 Topology in Which You Can't Enable Autoroute on a DS-TE Tunnel
Figure 6-12 shows four routers that each have two TE tunnels terminating on the same tail node. Behind the tunnel tail is a CPE router, behind the CPE are two VoIP gateways and two routers, and behind the two routers is the rest of the customer network. You can't enable autoroute on the headends, because you only want to send traffic to the VoIP gateways down the subpool tunnels. Managing this network with static routes is messy. You need to have two static routes on each tunnel headend, and every time you add a new VoIP gateway, you need to add static routes to every headend.
Luckily, you can more easily manage this routing. You can use recursive routes and route maps to manipulate the next hop of a given route based on whether the route is for a VoIP gateway. The procedure is as follows:
Step 1 |
Configure a second loopback address on the tunnel tail. |
Step 2 |
Have the CPE advertise separate routes for the VoIP routers via BGP to the tunnel tail, with a different community for the VoIP routes. |
Step 3 |
The tunnel tail changes the next hop for the VoIP routes to be its second loopback address. |
Step 4 |
All the tunnel headends point to a route to the second loopback address down their DS-TE subpool tunnels. |
Step 5 |
Recursive routing ensures that the forwarding works properly. |
Figure 6-13 illustrates this scenario.
Figure 6-13 Topology in Which You Can't Enable Autoroute on a DS-TE Tunnel
Figure 6-13 is pretty busy, so Example 6-13 shows the necessary configuration snippets.
Example 6-13 Key Configurations for the Network Shown in Figure 6-13
On the CPE: router bgp 100 neighbor 4.4.4.4 route-map setcom-voice out route-map setcom-voice match ip address 101 set community 1:1 access-list 101 permit ip host 1.1.1.1 host 255.255.255.255 On RouterG (the tunnel tail) router bgp 100 neighbor 1.2.3.4 route-map set-nh in route-map set-nh match community 1 set ip next-hop 5.5.5.5 ip community-list 1 permit 1:1 On Routers A, B, C, and D ip route 5.5.5.5 255.255.255.255 Tunnel1
Doing things this way means that the only one who needs to know which routers are VoIP routers and which aren't is the CPE; the administration of any static configuration is limited to the CPE. As more VoIP and CPE routers are added off RouterG, the tunnel headends don't need to change anything. As more tunnel tails are added, the tunnel headends need to add only a single static route per DS-TE tunnel to that tail.
You can also be more flexible than using a community. RouterG can change the next hop based on any criteria, because BGP is flexible in what it supports. Rather than a community, you could change the next hop based on the destination AS, for example, or perhaps a transit AS. The choice is up to you.