iproute2_examples


Load balancing

For example you have 2 links to ISP, one is 64Kbit and another is metered (you pay for traffic) much higher speed.

Latency of links must be very similar, otherwise in this example, packets from one session can come in different order to final destination!

tc qdisc del dev eth0.5 root
tc qdisc add dev eth0.5 handle 1: root prio
tc filter add dev eth0.5 parent 1: protocol ip prio 10 u32 \
  match ip src 195.69.208.252/32 flowid 1:16 \
  action police rate 64kbit burst 64k conform-exceed pipe/continue \
  action mirred egress redirect dev eth0.6

This example will send 64kbit/s only over eth0.5, and remaining over eth0.6


Shaping by realm

In given example, you have 3 links to upstream ISP, they are all located in one ethernet segment, and on one network card. It will become kind of difficult to shape them conventional way. Let's say you have multiple incoming interfaces also, eth0 (customers1) and eth1 (customers2). Also you have connection to 3 ISP, ISP1 - you use only to peer with kernel.org (let's say 204.152.191.0/24), ISP2 must be used as highly reliable, for customers who is paying a lot, and coming over eth0. ISP3 used for cheap customers, who is coming from eth1.

Shaper:

tc qdisc del dev eth2 root
tc qdisc add dev eth2 root handle 1: htb default 2000

tc class add dev eth2 parent 1: classid 1:1 htb rate 100Mbit ceil 100Mbit quantum 1600

tc class add dev eth2 parent 1:1 classid 1:100 htb rate 4000Kbit ceil 4000Kbit quantum 1600 # ISP N1, kernel org peering
tc qdisc add dev eth2 parent 1:100 handle 100: bfifo limit 100000 #Buffering 512Kb, or 1 second of data
tc filter add dev eth2 parent 1:0 protocol ip prio 100 route to 10 classid 1:100 #Realm 10

tc class add dev eth2 parent 1:1 classid 1:200 htb rate 4000Kbit ceil 4000Kbit quantum 1600 # ISP N2
tc qdisc add dev eth2 parent 1:200 handle 200: bfifo limit 512000 #Buffering 512Kb, or 1 second of data
tc filter add dev eth2 parent 1:0 protocol ip prio 100 route to 11 classid 1:200

tc class add dev eth2 parent 1:1 classid 1:300 htb rate 3000Kbit ceil 3000Kbit quantum 1600 # ISP N3
tc qdisc add dev eth2 parent 1:300 handle 300: bfifo limit 384000 #Also 1 second of data
tc filter add dev eth2 parent 1:0 protocol ip prio 100 route to 12 classid 1:300

Routing

#Reset old tables
ip rule del dev eth0 table 200
ip rule del dev eth1 table 201
ip rule add dev eth0 table 200
ip rule add dev eth1 table 201
#Table 200 - customers1
ip route add table 200 204.152.191.0/24 via 10.95.95.1 realm 10 #Local Peering to kernel.org
ip route add table 200 0.0.0.0/0 via 10.95.95.2 realm 11 #Default, for customers1, ISP N2
#Table 201 - customers2
ip route add table 201 204.152.191.0/24 via 10.95.95.1 realm 10 #Local Peering to kernel.org
ip route add table 201 0.0.0.0/0 via 10.95.95.3 realm 12 #Default, for customers2, ISP N3
Groups: