help centre
For more info visit status.atmail.com

How can we help?


Search our knowledge base for answers to
common questions and latest updates.



My activities New request

Follow

Throttling Bandwidth using Traffic Controller for Linux

Nathan Salt -

PROBLEM

I would like to throttle bandwidth using Traffic Controller for Linux.

ENVIRONMENT

  • On-Premise Server + WebMail Installations: Version 6.0 > Current Version
  • Webmail Only Installations: Version 6.0 > Current Version

CAUSE

Atmail is using too much bandwidth on our shared internet connection.

RESOLUTION

Traffic Controller (aka tc) is a command line utility which has the ability to throttle uploads and downloads. We suggest using a script to use  the tc command due to it's complexity. This script was taken from http://www.topwebhosts.org/tools/traffic-control.php.

  1. Using your chosen text editor, add the below script into a new file called `/etc/init.d/shaping`
    #!/bin/bash
    #
    #  tc uses the following units when passed as a parameter.
    #  kbps: Kilobytes per second
    #  mbps: Megabytes per second
    #  kbit: Kilobits per second
    #  mbit: Megabits per second
    #  bps: Bytes per second
    #       Amounts of data can be specified in:
    #       kb or k: Kilobytes
    #       mb or m: Megabytes
    #       mbit: Megabits
    #       kbit: Kilobits
    #  To get the byte figure from bits, divide the number by 8 bit
    #
    
    #
    # Name of the traffic control command.
    TC=/sbin/tc
    
    # The network interface we're planning on limiting bandwidth.
    IF=eth0             # Interface
    
    # Download limit (in mega bits)
    DNLD=1mbit          # DOWNLOAD Limit
    
    # Upload limit (in mega bits)
    UPLD=1mbit          # UPLOAD Limit
    
    # IP address of the machine we are controlling
    IP=216.3.128.12     # Host IP
    
    # Filter options for limiting the intended interface.
    U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"
    
    start() {
    
    # We'll use Hierarchical Token Bucket (HTB) to shape bandwidth.
    # For detailed configuration options, please consult Linux man
    # page.
    
    $TC qdisc add dev $IF root handle 1: htb default 30
    $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD
    $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD
    $U32 match ip dst $IP/32 flowid 1:1
    $U32 match ip src $IP/32 flowid 1:2
    
    # The first line creates the root qdisc, and the next two lines
    # create two child qdisc that are to be used to shape download
    # and upload bandwidth.
    #
    # The 4th and 5th line creates the filter to match the interface.
    # The 'dst' IP address is used to limit download speed, and the
    # 'src' IP address is used to limit upload speed.
    
    }
    
    stop() {
    
    # Stop the bandwidth shaping.
    $TC qdisc del dev $IF root
    
    }
    
    restart() {
    
    # Self-explanatory.
    stop
    sleep 1
    start
    
    }
    
    show() {
    
    # Display status of traffic control status.
    $TC -s qdisc ls dev $IF
    
    }
    
    case "$1" in
    
    start)
    
    echo -n "Starting bandwidth shaping: "
    start
    echo "done"
    ;;
    
    stop)
    
    echo -n "Stopping bandwidth shaping: "
    stop
    echo "done"
    ;;
    
    restart)
    
    echo -n "Restarting bandwidth shaping: "
    restart
    echo "done"
    ;;
    
    show)
    
    echo "Bandwidth shaping status for $IF:"
    show
    echo ""
    ;;
    
    *)
    
    pwd=$(pwd)
    echo "Usage: tc.bash {start|stop|restart|show}"
    ;;
    
    esac exit 0

  2. Edit the variables at the beginning of the file to suit your requirements.

  3. Change the permissions on the file to make it executable.
    chmod +x /etc/init.d/shaping
  4. Execute the script.
    /etc/init.d/shaping start

 

Have more questions? Submit a request

Comments


Contact our support team


+61 (7) 5357 6605       support@atmail.com