summaryrefslogtreecommitdiff
path: root/tasks/nat_vlc
diff options
context:
space:
mode:
authorTimotej Lazar <timotej.lazar@fri.uni-lj.si>2019-02-24 21:05:27 +0100
committerTimotej Lazar <timotej.lazar@fri.uni-lj.si>2019-02-24 21:05:27 +0100
commit8081a5520a441b43a8a7a73f3a90c7aacfaa8e10 (patch)
treec7f49bd33ed19d53afc0ee9df8b2c82c200c5910 /tasks/nat_vlc
parent9963b74f777edf985540eac71b1ca095f88b8bca (diff)
Move everything one level up
Diffstat (limited to 'tasks/nat_vlc')
-rw-r--r--tasks/nat_vlc/howtos/en/index.html72
-rw-r--r--tasks/nat_vlc/howtos/images/1.jpgbin0 -> 35092 bytes
-rw-r--r--tasks/nat_vlc/howtos/images/2.jpgbin0 -> 40962 bytes
-rw-r--r--tasks/nat_vlc/howtos/si/index.html80
-rw-r--r--tasks/nat_vlc/task.py126
-rw-r--r--tasks/nat_vlc/video.py37
6 files changed, 315 insertions, 0 deletions
diff --git a/tasks/nat_vlc/howtos/en/index.html b/tasks/nat_vlc/howtos/en/index.html
new file mode 100644
index 0000000..6048647
--- /dev/null
+++ b/tasks/nat_vlc/howtos/en/index.html
@@ -0,0 +1,72 @@
+<html>
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=utf-8">
+</head>
+
+<body><font face="Georgia, Times New Roman, Times, serif">
+<strong><h1>NAT VLC:</h1></strong>
+<p><strong><h2>Explanation:</h2></strong><br>
+ Set up a computer so that it forwards all packets meant for a certain address, to another computer.</p>
+<p><strong><h2>Instructions:</h2></strong>
+ <h3>1. Create two VMs. SimpleArbiter using the disk simpleArbiter and NATServer. </h3>
+ You can get the disks at polz.si/media/uploads/kpov/virtualke. As for the NATServer VM, you can use any disk you want like base-student-desktop-2014.
+<br>
+ <h3>2. NATServer should have two network interfaces, one should connect to the simpleArbiter VM and the other to the internet.</h3>
+ Adapter 1 should be NAT and adapter 2 should be Internal Network.<br>
+ Simple Arbiter must be connected to the Internal Network.
+<br>
+ <img style="width: 500px; height: 310px;" src="../images/1.jpg" alt="slika-1"></img>
+ <h3>3.On NATServer use ifconfig or /etc/network/interfaces to configure the network interfaces you created in virtualbox.<br></h3>
+
+ -vim /etc/network/interfaces<br>
+ -Set it up like this:<br>
+ auto eth1<br>
+ iface eth1 inet static<br>
+ NETMASK 255.255.0.0 # Specify based on your requirement<br>
+ IPADDR 192.168.2.1 # Gateway of the LAN<br>
+ NETWORK 192.168.0.0 # Optional<br>
+ ADDRESS 192.168.0.0 <br>
+ -ifdown eth1<br>
+ -ifup eth1
+<br>
+<img style="width: 500px; height: 310px;" src="../images/2.jpg" alt="slika-2"></img>
+ <h3>4. Configure SimpleArbiter so that it uses NATServer as the default gateway.</h3>
+
+ <h3> 5. Set up DNS (etc/resolv.conf) on NATServer.</h3>
+ vim /etc/resolv.conf
+ nameserver 203.145.184.13 # Primary DNS Server provided by the ISP<br>
+ nameserver 202.56.250.5 # Secondary DNS Server provided by the ISP<br>
+ Than we set up the host:<br>
+ vim /etc/hosts<br>
+ Replace the first line with:<br>
+ 127.0.0.1 nat localhost.localdomain localhost<br>
+
+ <h3>6. Enable IP forwarding on NATServerju (should be run as root).</h3>
+ echo 1 > /proc/sys/net/ipv4/ip_forward
+
+ <h3>7. Set up NAT on NATServer using iptables.</h3>
+
+ apt-get install iptables<br>
+ iptables -F<br>
+ ptables -t nat -F<br>
+ iptables -t mangle -F <br>
+ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE<br>
+ iptables -A FORWARD -i eth1 -j ACCEPT<br><br>
+
+ service iptables restart
+
+ <h3>8. Use vlc on simpleArbiter to watch the video over your network. </h3> <br>
+
+
+ <h3>8. Additional resources </h3> <br>
+-https://www.howtoforge.com/nat_iptables<br>
+-http://www.bctes.com/nat-linux-iptables.html<br>
+
+
+
+
+
+</body>
+
+</html>
diff --git a/tasks/nat_vlc/howtos/images/1.jpg b/tasks/nat_vlc/howtos/images/1.jpg
new file mode 100644
index 0000000..adee258
--- /dev/null
+++ b/tasks/nat_vlc/howtos/images/1.jpg
Binary files differ
diff --git a/tasks/nat_vlc/howtos/images/2.jpg b/tasks/nat_vlc/howtos/images/2.jpg
new file mode 100644
index 0000000..f7868df
--- /dev/null
+++ b/tasks/nat_vlc/howtos/images/2.jpg
Binary files differ
diff --git a/tasks/nat_vlc/howtos/si/index.html b/tasks/nat_vlc/howtos/si/index.html
new file mode 100644
index 0000000..779cd54
--- /dev/null
+++ b/tasks/nat_vlc/howtos/si/index.html
@@ -0,0 +1,80 @@
+<html>
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=utf-8">
+</head>
+
+<body><font face="Georgia, Times New Roman, Times, serif">
+<strong><h1>NAT VLC:</h1></strong>
+<p><strong><h2>Naloga na hitro:</h2></strong><br>
+ Nastavi računalnik tako, da bo vse pakete za določene naslove prepošiljal na drug računalnik, vzpostavi NAT.</p>
+<p><strong><h2>Navodila:</h2></strong>
+ <h3>1. Postavi dva navidezna računalnika. SimpleArbiter z diskom simpleArbiter ter NATServer. </h3>
+ Virtualke dobiš na (polz.si/media/uploads/kpov/virtualke). Za NATServer lahko uporabiš base-student-desktop-2014.
+<br>
+ <h3>2. Postavi NAT server tako, da ima dva omrežna vmesnika. Z enim naj bo povezan na simpleArbiter, z drugim pa na internet.</h3>
+ (settings-Network) Adapter 1 nastavimo na NAT (omrežje), adapter 2 pa na InternalNetwork (lokalno).<br>
+ Simple Arbiter nastavimo na InternalNetwork(lokalno).
+<br>
+ <img style="width: 500px; height: 310px;" src="../images/1.jpg" alt="slika-1"></img>
+ <h3>3.Na NATServer z ukazom ifconfig in z datoteko /etc/network/interfaces skonfiguriraj omrežne vmesnike<br>
+ tako, da bo en povezan v WAN (internet) in en vmesnik na LAN (simpleArbiter).</h3>
+
+ -vim /etc/network/interfaces<br>
+ -dopišemo:<br>
+ auto eth1<br>
+ iface eth1 inet static<br>
+ NETMASK 255.255.0.0 # Specify based on your requirement<br>
+ IPADDR 192.168.2.1 # Gateway of the LAN<br>
+ NETWORK 192.168.0.0 # Optional<br>
+ ADDRESS 192.168.0.0 <br>
+ -ifdown eth1<br>
+ -ifup eth1
+<br>
+<img style="width: 500px; height: 310px;" src="../images/2.jpg" alt="slika-2"></img>
+ <h3>4. SimpleArbiter skofiguriraj tako, da bo privzeti prehod uporabljal NATServer.</h3>
+ Nastavi gateway, da ima IP od NATServerja.<br>
+ route add -net IP netmask MASK default gw IP dev eth0<br>
+
+ <h3> 5. Nastavi DNS (etc/resolv.conf) na NATServerju.</h3>
+ vim /etc/resolv.conf
+ nameserver 203.145.184.13 # Primary DNS Server provided by the ISP<br>
+ nameserver 202.56.250.5 # Secondary DNS Server provided by the ISP<br>
+ Nato nastavimo še host:<br>
+ vim /etc/hosts<br>
+ Prvo vrstico zamenjamo z:<br>
+ 127.0.0.1 nat localhost.localdomain localhost<br>
+
+ <h3>6. Omogoči posredovanje IP naslovov na NATServerju.</h3>
+ echo 1 > /proc/sys/net/ipv4/ip_forward
+
+ <h3>7. Nastavi NAT z uporabo paketa iptables na NATServerju.</h3>
+
+ apt-get install iptables<br>
+ iptables -F<br>
+ ptables -t nat -F<br>
+ iptables -t mangle -F <br>
+ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE<br>
+ iptables -A FORWARD -i eth1 -j ACCEPT<br><br>
+
+ service iptables restart
+
+ <h3>8. Na simpleArbiter z vlc preberi naslov, na katerem si lahko ogledaš kratek filmček. </h3>
+
+ apt-get install vlc-nox<br>
+ Nastavitev naslova:<br>
+ Open Media > OpenNetwork ....<br>
+
+
+
+ <h3>8. Dodatni viri </h3> <br>
+-https://www.howtoforge.com/nat_iptables<br>
+-http://www.bctes.com/nat-linux-iptables.html<br>
+
+
+
+
+
+</body>
+
+</html>
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': '''\
+<p>
+Postavi dva navidezna računalnika: <em>SimpleArbiter</em> in <em>NATServer</em>. <em>NATServer</em> 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.
+
+<p>
+Na <em>NATServer</em> skonfiguriraj omrežne vmesnike tako, da bo imel dostop do Interneta in da bo imel na lokalnem omrežju <code>{{IP_NAT}}</code>. Na <em>NATServer</em> ustvarite še uporabnika <code>{{IP_NAT_user}}</code>.
+
+<p>
+Poskrbi, da bo <em>SimpleArbiter</em> prek DHCP dobil naslov <code>{{IP_simple}}</code>. Poskrbi, da bo <em>NATServer</em> deloval kot prehod za <em>SimpleArbiter</em> in izvajal NAT.
+''',
+ 'en': '''\
+<p>
+Set up two virtual machines: <em>SimpleArbiter</em> and
+<em>NATServer</em>. <em>NATServer</em> should have two network
+adapters. Connect the first adapter to <em>SimpleArbiter</em> and the
+second adapter to the Internet.
+
+<p>
+Configure the network in <em>NATServer</em> so that one interface is connected to the Internet while the other is connected to <em>SimpleArbiter</em> and has the address <code>{{IP_NAT}}</code>. Create a user called <code>{{IP_NAT_user}}</code> on <em>NATServer</em>.
+
+<p>
+Configure a DHCP server on <em>NATServer</em> so that <em>SimpleArbiter</em> gets the IP <code>{{IP_simple}}</code>. Also, set up NAT on <em>NATServer</em> and set it as the gateway for <em>SimpleArbiter</em>.
+''',
+}
+
+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)
+
diff --git a/tasks/nat_vlc/video.py b/tasks/nat_vlc/video.py
new file mode 100644
index 0000000..3c21c82
--- /dev/null
+++ b/tasks/nat_vlc/video.py
@@ -0,0 +1,37 @@
+import string, random, os
+#You need to find PIL library on the internet. Just GOOGLE it!!! Other imports are standard.
+from PIL import Image, ImageDraw, ImageFont
+
+#Method for generating random string
+def randomString():
+ return ''.join(random.choice(string.lowercase) for i in range(30))
+
+
+image = Image.new("RGBA", (600,150), (255,255,255))
+draw = ImageDraw.Draw(image)
+
+#Font option is optional. If you don't want to use it figure out how to increase font size, because default is veeeeery small.
+
+font = ImageFont.truetype("georgia.ttf", 36)
+txt = randomString()
+
+draw.text((20,50), txt, (20,100,0), font)
+img_resized = image.resize((600,80), Image.ANTIALIAS)
+img_resized.save("out.png")
+
+#Creates .mp4 video from image out.png. Video is 1 second long.
+bashCommand = "avconv -r 1/5 -i out.png -b:v 1000k video.mp4"
+os.system(bashCommand)
+
+# Converts .mp4 video to .avi format. Still 1 second long. ( 2x )
+bashCommand = "avconv -i video.mp4 -c:a copy video.avi"
+os.system(bashCommand)
+
+bashCommand = "avconv -i video.mp4 -c:a copy video1.avi"
+os.system(bashCommand)
+
+# This loop will increas videos length by adding more picesec of the original video.
+last = int(input("Set video length in seconds: "))
+bashCommand = "avconv -i concat:video.avi\|video1.avi -c copy video.avi"
+for i in range(0, last-2):
+ os.system(bashCommand)