Meeskond "Tartu rõõm"

From ICO wiki
Jump to navigationJump to search

Liikmed

  • Inger Romanenko
  • Sander Saveli
  • Sander Arnus
  • Kalmer Tart
  • Kristjan Rõõm

Meie eesmärk intensiivõppe raames

Automaatne võrguühenduste konfigureerimine erinevate võrkudega

Konfigureerida arvuti, millel on 3G, Wifi, Ethernet-over-Powerline ja Etherneti pordid ning mille operatsioonisüsteemiks on Ubuntu Linux. Võrguühendust vahetataks ühenduse olemasolu ja prioriteetide alusel üle erinevate tehnoloogiate võimalikult lihtsalt ja kiirelt. IP aadress ei pea samaks jääma. Wifi adapter valib ise parima avaliku võrgu, kui ei ole konfigureeritud teisiti. Kui Wifi ühendus kaob, proovib teisi ka taustal. Kõik ümberlülitamised logitakse. Näiteks: Prioriteetideks on Ethernet:1; EoP:2; Wifi:3; 3G:4. Ühendatakse kõikidesse võimalikesse võrkudesse ning kui Ethernet ära kukub ning pole võimalik ühenduda ka läbi EoP, toimub ühenduse ümberlülitamine Wifi võrku. Kui Wifi ära kukub, siis ühendutakse 3G võrku. Kui tuleb suvaline public wifi tagasi, ühendutakse sinna jne. Luua lihtne kasutajaliides Android telefonile, mis lubab üle bluetooth ühenduse erinevaid võrke ja prioriteete konfigureerida ning vaadata ühenduste ajalugu.

Ajakava/progress

Esmaspäev 26.03.2012

Eesmärgid:

  • Tutvuda olukorraga ja tehnoloogiatega
  • Kohtuda Ericssoni esindajaga, saada täpne ülevaade ülesandest.
  • Panna paika algne tegevuskava.

Küsimused Ericssonile:

  • Kuidas teha vahet eop-l ja ethernetil?
  • Mis tehnoloogiaid kasutada
  • Miks selline ülesanne?
  • Kus seda kasutama võidakse hakata?


Edusammud:

  • Leidsime badVPN NCD http://code.google.com/p/badvpn/wiki/NCD, nimelise võrguhaldustarkvara ning proovime sellega prioritiseerida erinevaid võrguliideseid.
  • Kohtusime Ericssoni esindajaga ning saime täpsema ülevaate ülesandest. Peame määrama ühendustele prioriteedid ning valima parima ühenduse liigi vastavalt prioriteedile. Wifi puhul peame ühenduma public wifisse ning kui on mitu erinevat võrku saadaval, proovima erinevaid. Võrgutegevust logitakse.

Ericssonist saime katsetamiseks kaasa järgneva tehnika :

  • nettop PC FIT-PC2
  • 3G EMT mobiilse internetimodemi
  • bluetooth adapteri
  • ethernet over powerline seadmed

Küsimus: Kas kasutame enda leitud badVPN NCD-d või kasutame Linuxis vaikimisi töös olevat Network Manageri?

Materjalid badVPN NCD kohta:

Tegime katseid virtualiseeritud keskkonnas. Hetkel suudab NCD prioriteetide alusel ühenduda erinevatesse ethernet liidestega.

Otsustasime enda leitud lahenduse kasuks, sest badVPN NCD teeb täpselt seda mis meil vaja - ühendub erinevatesse võrkudesse prioriteedide alusel. Hetkel tundub, et Network Manageri kasutades peaksime tunduvalt rohkem loogikat ise valmis kirjutama.

Läksime üle katsetustele päris masinas. Installeerisime nettopi peale Lubuntu Linuxi.


Hakkame modifitseerima badVPN-i, et saada tööle ka Wi-Fi ja 3G.

Tulemus: NCD suudab prioriteedide alusel valida parima ühenduse wifi ja etherneti vahel. Hetkel aga on probleem wifi public võrkudega, nimelt ühendub wifi adapter ainult etteantud võrku. Tuleks kirjutada skript, mis otsib avatud wifi võrke. Alustasime ka mobiilse interneti lahendusega, kuid hetkel tunudb, et NCD seda võimalust ei toeta.

NCD konfiguratsioon

#
# Example NCD program.
# All interfaces are disabled by default.
# Remove/comment the first line of a process to activate the interface.
#

process ethernet1 {
   # Set device.
   var("eth1") dev;

   # Wait for device and link.
   net.backend.waitdevice(dev);
   net.up(dev);
   net.backend.waitlink(dev);

   # DHCP configuration.
   # net.ipv4.dhcp() will block here until it obtaines an IP address.
   # It doesn't check the obtained address in any way,
   # so as a basic security measure, do not proceed if it is local.
   net.ipv4.dhcp(dev) dhcp;
   ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
   ifnot(test_local);
   var(dhcp.addr) addr;
   var(dhcp.prefix) addr_prefix;
   var(dhcp.gateway) gateway;
   var(dhcp.dns_servers) dns_servers;

   # Static configuration.
   # To use, comment/remove the DHCP configuration above and uncomment this.
   #var("192.168.111.116") addr;
   #var("24") addr_prefix;
   #var("192.168.111.1") gateway;
   #list("192.168.111.14", "193.2.1.66") dns_servers;

   # Assign IP address.
   net.ipv4.addr(dev, addr, addr_prefix);

   # Go on configuring the network.
   multiprovide("NET-ethernet");
}

process eop  {
   # Set device.
   var("eth2") dev;

   # Wait for device.
   net.backend.waitdevice(dev);
   net.up(dev);
   net.backend.waitlink(dev);

   # DHCP configuration.
   # net.ipv4.dhcp() will block here until it obtaines an IP address.
   # It doesn't check the obtained address in any way,
   # so as a basic security measure, do not proceed if it is local.
   net.ipv4.dhcp(dev) dhcp;
   ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
   ifnot(test_local);
   var(dhcp.addr) addr;
   var(dhcp.prefix) addr_prefix;
   var(dhcp.gateway) gateway;
   var(dhcp.dns_servers) dns_servers;

   # Assign IP address.
   net.ipv4.addr(dev, addr, addr_prefix);

   # Go on configuring the network.
   multiprovide("NET-eop");
}


process pp {
   # Set device.
   var("ppp0") dev;

   # Wait for device.
   net.backend.waitdevice(dev);
   net.up(dev);
   net.backend.waitlink(dev);

   # DHCP configuration.
   # net.ipv4.dhcp() will block here until it obtaines an IP address.
   # It doesn't check the obtained address in any way,
   # so as a basic security measure, do not proceed if it is local.
   net.ipv4.dhcp(dev) dhcp;
   ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
   ifnot(test_local);
   #var(dhcp.addr) addr;
   #var(dhcp.prefix) addr_prefix;
   #var(dhcp.gateway) gateway;
   #var(dhcp.dns_servers) dns_servers;

   # Assign IP address.
   #net.ipv4.addr(dev, addr, addr_prefix);

   # Go on configuring the network.
   multiprovide("NET-pp");
}



process wlan {

   # Set device.
   var("wlan1") dev;

   # Wait for device and rfkill.
   net.backend.waitdevice(dev);
   net.backend.rfkill("wlan", dev);

   # Connect to wireless network.
   list() args;
   net.backend.wpa_supplicant(dev, "/etc/wpa_supplicant/all.conf", "/sbin/wpa_supplicant", args);

   # DHCP configuration. See above for static configuration.
   net.ipv4.dhcp(dev) dhcp;
   ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
   ifnot(test_local);
   var(dhcp.addr) addr;
   var(dhcp.prefix) addr_prefix;
   var(dhcp.gateway) gateway;
   var(dhcp.dns_servers) dns_servers;

   # Assign IP address to interface.
   net.ipv4.addr(dev, addr, addr_prefix);

   # Go on configuring the network.
   multiprovide("NET-wlan");
}

process NETCONF {
   # Wait for some network connection. Order by priority.
   list("NET-wlan", "NET-eop", "NET-pp", "NET-ethernet") pnames;
   multidepend(pnames) ifdep;
   
   #if(pnames == "NET-pp")
   
   var(ifdep.dev) dev;
   var(ifdep.addr) addr;
   var(ifdep.addr_prefix) addr_prefix;
   var(ifdep.gateway) gateway;
   var(ifdep.dns_servers) dns_servers;

   # Add default route.
   net.ipv4.route("0.0.0.0", "0", gateway, "20", dev);

   # Configure DNS servers.
   net.dns(dns_servers, "20");
}

Teisipäev 27.03.2012

Eesmärgid:

  • Saada valmis prioritiseerimine
  • Kirjutada skript, mis otsiks avatud wifi võrke
  • Saada tööle 3G
  • Alustada logimisega ning androidi rakenduse kirjutamisega.

Hakkame lähemalt uurima Network Manageri alternatiivina, sest badVPN-il NCD ja 3G konfiguratsioonid satuvad konflikti, mis teeb 3G ünhenduse initsialiseerimise keerukaks.

Selgus lõplikult, et NCD-ga ei õnnestu meil töötavat 3G-ga funktsionaalsust luua. Hakkasime ülesannet lahendama linuxi Network Manageri abil. Network Manageris toimib vaikimisi võrkude prioritiseerimine, esialgu tundub et ei ole võimalik ise prioriteete määrata, ilma source koodi muutmata.

Hakkame uurima erinevaid võimalusi kuidas võrke Network manageriga prioritiseerida Network Manageril on sisseehitatud kindlad prioriteedid ja selle raames toimib kõik väga hästi, aga probleem tekib sellestm et Network Manageris ei saa muuta prioriteete.

Lahendus: hakkasime meetrikute alusel prioritiseerima routing tables erinevate ühenduste default route, mille tulemusena saame luua ühenduste prioriteetide järjekorra.

Kirjutasime iga Interfacei üles ja allaminemise korral skriptid, mis lisavad ja kustutavad vastava default gateway ja metricuga routi IP route tabelist. Default gateway saame kätte Network Manageri käsurea tööriista - nmcli päringu kaudu. Nmcli on kõige kiirem võimalus, sest kliendi poole pealt küsib DHCP infot Network Manager.

IF UP skript

#!/bin/bash



if [ "$IFACE" = "eth1" ]; then
ADR=$(nmcli dev list iface eth1 | grep GATEWAY | cut -d " " -f20)
ip route del default
ip route add default via $ADR dev eth1 metric 5
fi;
if [ "$IFACE" = "eth2" ]; then
ADR=$(nmcli dev list iface eth2 | grep GATEWAY | cut -d " " -f20)
ip route del default
ip route add default via $ADR dev eth2 metric 2
fi;
if [ "$IFACE" = "wlan1" ]; then
ADR=$(nmcli dev list iface wlan1 | grep GATEWAY | cut -d " " -f20)
ip route del default
ip route add default via $ADR dev wlan1 metric 3
fi;
if [ "$IFACE" = "ppp0" ]; then
ADR=$(nmcli dev list iface ttyUSB0 | grep GATEWAY | cut -d " " -f20)
ip route del default
ip route add default via $ADR dev ppp0 metric 6
fi;


Kalmer hakkab uurima võimalusi kuidas teha androidi rakendust, millega saaks ühenduda bluetoothiga arvutiga ning konfigureerida võrgu prioriteete.



Tegime skripti wifi jaoks, mis otsib kõik avalikud wifi võrgud, mis on läheduses ja koostab nende kohta individuaalfailid mida kasutab Network Maganager võrkudesse automaatseks ühendamiseks.

IF up skript

#!/bin/bash



if [ "$IFACE" = "eth1" ]; then
ADR=$(nmcli dev list iface eth1 | grep GATEWAY | cut -d " " -f20)
ip route del default
ip route add default via $ADR dev eth1 metric 5
fi;
if [ "$IFACE" = "eth2" ]; then
ADR=$(nmcli dev list iface eth2 | grep GATEWAY | cut -d " " -f20)
ip route del default
ip route add default via $ADR dev eth2 metric 2
fi;
if [ "$IFACE" = "wlan1" ]; then
ADR=$(nmcli dev list iface wlan1 | grep GATEWAY | cut -d " " -f20)
ip route del default
ip route add default via $ADR dev wlan1 metric 3
fi;
if [ "$IFACE" = "ppp0" ]; then
ADR=$(nmcli dev list iface ttyUSB0 | grep GATEWAY | cut -d " " -f20)
ip route del default
ip route add default via $ADR dev ppp0 metric 6
fi;

Kolmapäev 28.03.2012

Eesmärgid:

  • Saada tööle 3G
  • Teha bluetooth ühendus
  • Teha logimine
  • Korrastada dokumentatsioon
  • Valmistuda presentatsiooniks

Vaikimisi 3G ühendus, tuleb üles liiga hilja. Ei saa kätte default gateway infot piisavalt kiiresti ja tänu sellele routing tablesse ei kirjutata default routei. Et saada kiiremini kätte 3g default gateway kirjutasime skripti, mis leiab 3g seadme ja loob ise ühenduse. SKRIPT