A bandwidth testing platform with a strong templating engine
Kipketer was originally developed for Nianet A/S with the purpose of facilitating line testing on a larger scale. It is now released under the MIT license excluding certain assets, but in an entirely functional state.
It facilitates the configuration of a loop on a remote CPE, and using this loop initiates and reports on throughput and latency tests.
This guide is written for a debian-based linux and requires Ruby 2.3 to be installed through external repositories.
The system requires two servers: A test-initiating server, and a test-receiving server. The test-initiating server also runs the web service.
The system is designed based around a number test pair addresses that are looped on the back of a device under test (DUT). In production, this was designed using two VRFs, each containing unique addresses routed via the DUT.
Here the 198.18.0.0/15 network is used for testing. 198.18.0.0/16 belongs to the first vrf and 198.19.0.0/16 belongs to the second. A number of test-pairs are configured in the following way:
ip addr add 198.18.0.2/26 dev eth0
ip addr add 198.18.0.3/26 dev eth0
ip route add 198.19.0.2/32 via 198.18.0.1 dev eth0 source 198.18.0.2
ip route add 198.19.0.3/32 via 198.18.0.1 dev eth0 source 198.18.0.3
etc.
ip route add 198.19.0.2/26 dev eth0
ip route add 198.19.0.3/26 dev eth0
ip route add 198.18.0.2/32 via 198.19.0.1 dev eth0 source 198.19.0.2
ip route add 198.18.0.3/32 via 198.19.0.1 dev eth0 source 198.19.0.3
etc.
This system requires thrulay-ng, available on sourceforge. Compile it locally and add it to your path
Ruby dependencies are handled through bundler, so make sure it's installed through the ruby gem system
gem install bundler
OWAMP, as part of the perfsonar suite is also required. Compile it from source also
The required file is available here: http://software.internet2.edu/sources/owamp/owamp-3.3.tar.gz
OWAMP requires good time service on both servers, as the difference in clock accuracy will be source of error in the measurements. Therefore it is recommended to use proper low-stratum NTP-servers and to use physical servers, not virtual, to these servers.
The system runs using the micro-webserver Puma. It's configured in config/puma.rb to bind to a UNIX socket, and designed to be proxied through nginx. Refer to the nginx documentation on how to proxy to a unix socket.
Docker is recommended for local development. It runs with a development environment that allows local testing.
To run the docker, compile the dockerfile and run the docker.sh file.
The docker.sh file leaves you in a shell, and you must run the following manually:
# thrulayd
# owampd -c /etc/owamp
# service ntp start
# cd /opt/app
# bundle install
# puma -C "-" -p 5000
Then you can connect to the docker container ip port 5000