From 8081a5520a441b43a8a7a73f3a90c7aacfaa8e10 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sun, 24 Feb 2019 21:05:27 +0100 Subject: Move everything one level up --- tasks/nat_vlc/task.py | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 tasks/nat_vlc/task.py (limited to 'tasks/nat_vlc/task.py') diff --git a/tasks/nat_vlc/task.py b/tasks/nat_vlc/task.py new file mode 100644 index 0000000..5224495 --- /dev/null +++ b/tasks/nat_vlc/task.py @@ -0,0 +1,126 @@ +# kpov_util should be imported by add_assignment.py + +# Poglej nek film na nekem določenem URL. +# (?md5 vsota filma?) + +# Nastavi nek računalnik tako, da bo izvajal NAT. +#TODO: finish this + +instructions = { + 'si': '''\ +

+Postavi dva navidezna računalnika: SimpleArbiter in NATServer. NATServer naj ima dva omrežna vmesnika - z enim naj bo povezan na lokalno omrežje, na katerem naj bo tudi simpleArbiter, z drugim pa na Internet. + +

+Na NATServer skonfiguriraj omrežne vmesnike tako, da bo imel dostop do Interneta in da bo imel na lokalnem omrežju {{IP_NAT}}. Na NATServer ustvarite še uporabnika {{IP_NAT_user}}. + +

+Poskrbi, da bo SimpleArbiter prek DHCP dobil naslov {{IP_simple}}. Poskrbi, da bo NATServer deloval kot prehod za SimpleArbiter in izvajal NAT. +''', + 'en': '''\ +

+Set up two virtual machines: SimpleArbiter and +NATServer. NATServer should have two network +adapters. Connect the first adapter to SimpleArbiter and the +second adapter to the Internet. + +

+Configure the network in NATServer so that one interface is connected to the Internet while the other is connected to SimpleArbiter and has the address {{IP_NAT}}. Create a user called {{IP_NAT_user}} on NATServer. + +

+Configure a DHCP server on NATServer so that SimpleArbiter gets the IP {{IP_simple}}. Also, set up NAT on NATServer and set it as the gateway for SimpleArbiter. +''', +} + +computers = { + 'NATServer': { + 'disks': [ + { 'name': 'student-NATServer', + }, + ], + 'network_interfaces': [{'network': 'net1'}, {'network': 'test-net'}], + 'flavor': 'm1.tiny', + 'config_drive': False + }, + 'SimpleArbiter': { + 'disks': [ + { 'name': 'simpleArbiter', + }, + ], + 'network_interfaces': [{'network': 'net1'}], + 'flavor': 'm1.tiny', + 'config_drive': False + }, +} + +networks = { 'net1': {'public': False}, 'test-net': {'public': True} } + +#ne potrebujemo dnsjev in ip za malibreznewtork manager? +params_meta = { + 'IP_simple': {'descriptions': {'si': 'Naslov SimpleArbiter', 'en': 'SimpleArbiter address'}, 'w': False, 'public': True, 'type': 'IP', 'generated': True}, + 'IP_NAT': {'descriptions': {'si': 'Naslov NATServer', 'en': 'NATServer address'}, 'w': False, 'public': True, 'type': 'IP', 'generated': True }, + 'IP_NAT_user': {'descriptions': {'si': 'Username na NATServer', 'en': 'Username on NATServer'}, 'w': False, 'public' : True, 'type' : 'username', 'generated' : True}, + 'IP_NAT_passwd': {'descriptions': {'si': 'Password na NATServer', 'en': 'Password on NATServer'}, 'w': True,'public' : True, 'type' : 'passwd', 'generated' : False}, +} + +def task(IP_simple, IP_NAT, IP_NAT_user, IP_NAT_passwd): + import pexpect + + results = kpov_util.ssh_test(IP_NAT, IP_NAT_user, IP_NAT_passwd, ( + ('IP_NAT_ip_forward', 'cat /proc/sys/net/ipv4/ip_forward'), + )) + + # Check if If IP_simple is connected to NAT + results['IP_simple_ping_to_NAT'] = pexpect.run('ping -c 5 {}'.format(IP_NAT), encoding='utf-8') + # Check routing table on IP_simple + results['IP_simple_routing_table'] = pexpect.run('route -n', encoding='utf-8', env={'PATH': '/bin:/sbin'}) + # Tracert Check if IP_simple is connected to internet + results['IP_simple_to_internet'] = pexpect.run('traceroute 8.8.8.8', encoding='utf-8') + + return results + +def gen_params(user_id, params_meta): + params = dict() + r = random.Random(user_id) + # IP_NM, DNS_NM, IP_static, DNS_static) + # dns_servers = ['193.2.1.66', '193.2.1.72', '8.8.8.8', '8.8.4.4', '208.67.222.222', '208.67.220.220'] + net = kpov_util.IPv4_net_gen(r, 253, True, False) + # params['DNS_NM'] = r.choice(dns_servers) + params['IP_NAT'], params['IP_simple'] = kpov_util.IPv4_addr_gen(r, net, 2) + params['IP_NAT_user'] = kpov_util.default_generators['username'](r) + # params['IP_NM'] + # params['IP_simple'] = kpov_util.IPv4_addr_gen(r, net, 1) + # params['DNS_static'] = r.choice(dns_servers) + return params + +def task_check(results, params): + import re + score = 0 + hints = [] + if re.search( + "PING.*\r\n64 bytes from {}: icmp_seq=[0-9]+ ttl=64 time=[0-9.]* ms".format( + params['IP_NAT']), results['IP_simple_ping_to_NAT']): + score += 3 + else: + hints.append("Ping to NAT incorrect") + if results['IP_NAT_ip_forward'].strip() == "1": + score += 2 + else: + hints.append("ip_forward not set on NAT?") + rs = r"1 +{0} +\({0}\)".format(params['IP_NAT']) + if re.search(rs, + results['IP_simple_to_internet']): + score += 3 + else: + hints.append("traceroute not OK") + gateway=r'0\.0\.0\.0 +{} +0\.0\.0\.0 +UG'.format(params['IP_NAT'].replace('.', '\.')) + if re.search(gateway,results['IP_simple_routing_table']) and \ + re.search("Kernel IP routing table\r\nDestination", results['IP_simple_routing_table']): + score += 2 + else: + hints.append("route not OK") + return score, hints + +def prepare_disks(templates, task_params, global_params): + write_default_config(templates['simpleArbiter'], global_params) + -- cgit v1.2.1