diff --git a/utils/ssh.py b/utils/ssh.py
index f6d61a2..fb684bb 100644
--- a/utils/ssh.py
+++ b/utils/ssh.py
@@ -126,14 +126,14 @@
 
     def put_iperf3_deb_packages_at_vms(self, source_directory,
                                        destination_directory):
-        required_packages = ['iperf3', 'libiperf0', 'libsctp1']
+        required_packages = ['iperf', 'iperf3', 'libiperf0', 'libsctp1']
         iperf_deb_files = [pack for pack in os.listdir(source_directory) if
                            any(req in pack for req in required_packages) if
                            pack.endswith('.deb')]
         if not iperf_deb_files:
             raise BaseException(
-                "iperf3 *.deb packages are not found locally at path {}. "
-                "Please recheck 'iperf_deb_package_dir_path' variable in "
+                "iperf3 or iperf *.deb packages are not found locally at path"
+                " {}. Please recheck 'iperf_deb_package_dir_path' variable in "
                 "global_config.yaml and check *.deb packages are manually "
                 "copied there.".format(source_directory))
         for f in iperf_deb_files:
@@ -186,6 +186,7 @@
         mtu = transport.exec_command('cat /sys/class/net/{}/mtu'.format(iface))
         return mtu.decode("utf-8")
 
+
 class prepare_iperf(object):
 
     def __init__(self, fip, user='ubuntu', password='password',
@@ -194,10 +195,10 @@
         transport = SSHTransport(fip, user, password, private_key)
         config = utils.get_configuration()
 
-        # Install iperf3 using apt or downloaded deb package
+        # Install iperf, iperf3 using apt or downloaded deb packages
         internet_at_vms = utils.get_configuration().get("internet_at_vms")
         if internet_at_vms.lower() == 'false':
-            logger.info("Copying offline iperf3 deb packages, installing...")
+            logger.info("Copying offline iperf* deb packages, installing...")
             path_to_iperf_deb = (config.get('iperf_deb_package_dir_path') or
                                  "/opt/packages/")
             home_ubuntu = "/home/ubuntu/"
@@ -205,15 +206,16 @@
                                                      home_ubuntu)
             transport.exec_command('sudo dpkg -i {}*.deb'.format(home_ubuntu))
         else:
-            logger.info("Installing iperf3 using apt")
+            logger.info("Installing iperf, iperf3 using apt")
             preparation_cmd = config.get('iperf_prep_string') or ['']
             transport.exec_command(preparation_cmd)
             transport.exec_command('sudo apt-get update;'
-                                   'sudo apt-get install -y iperf3')
+                                   'sudo apt-get install -y iperf3 iperf')
 
         # Log whether iperf is installed with version
-        check = transport.exec_command('dpkg -l | grep iperf3')
-        logger.debug(check.decode('utf-8'))
+        check = transport.exec_command('dpkg -l | grep iperf')
+        logger.info(check.decode('utf-8'))
 
         # Staring iperf server
         transport.exec_command('nohup iperf3 -s > file 2>&1 &')
+        transport.exec_command('nohup iperf -s > file 2>&1 &')
