Institute of Computer Science
  1. Courses
  2. 2018/19 fall
  3. Operating Systems (LTAT.06.001)
ET
Log in

Operating Systems 2018/19 fall

  • Pealeht
  • Loengud
  • Praktikumid
  • Kodutööd

IP ruutimine

Praktikumi eesmärgiks on tutvuda IP-pakettide ruutimisega läbi mitme võrgu.

IP-aadress on arvutivõrgus asuva seadme identifikaator: seadmele määratud alaline või ajutine tunnusnumber, mille abil erinevatesse võrkudesse ühendatud seadmed üksteist leiavad. Internet koosneb paljudest võrkudest, mis omakorda võivad koosneda alamvõrkudest jne. Kahte võrku ühendaval seadmel on üks IP-aadress ühe võrgu jaoks ning teine IP-aadress teise võrgu jaoks.

IP-aadressid saavad liidestele tekkida käsitsi konfigureeritult ("staatiliselt") või automaatselt vastavalt selles võrgus jagatavale infole. IPv4 puhul jagatakse dünaamilisi aadresse DHCP protokolliga, selleks töötab võrgu mingis masinas DHCP server ning dünaamiliselt aadressi hankivates klientarvutites töötab vastaval liidesel DHCP klient. Näiteks NAT võrguga VirtualBoxis pakub DHCP teenust VirtualBox ise, aga lihtsas koduvõrgus pakub DHCP-d tavaliselt ruuter. Suuremates võrkudes võib DHCP server olla eraldi (dubleeritud) masin.

IPv4 aadress jaguneb sisemiselt kaheks osaks - mingi osa kõrgemaid bitte identifitseerib võrgu ning üle jäävad madalamad bitid identifitseerivad üksikut masinat (hosti) seal võrgus. Võrgumask näitab, missugused bitid on võrgu identifitseerimiseks (see võib igas võrgus isemoodi olla, niikaua kui kaugemad ruuterid teavad sellise võrgu asukohta).

Praktikum toimub mitme virtuaalse Linuxi-arvutiga, mis moodustavad meile tavapärast olukorda matkiva struktuuri, kus lõppkasutaja peab "laia Internetiga" ühendamiseks pakette saatma läbi mitme võrgu. Eesmärk on ühendada Internetiga kahe ruuteri taga olev klientarvuti, nagu näidatud joonisel.

  • Ruuter1 saab oma välise ühenduse IP-aadressi DHCP abil automaatselt ja VirtualBox laseb ta NATi kaudu Internetti.
  • Ruuter2 saab oma ühenduse Ruuter1 käest, nende vahel on IP-võrk 192.168.X.0/24, kus X on teie matriklinumbri kaks viimast kohta.
  • Klient saab omakorda ühenduse Ruuter2 käest ja nende vahel on IP-võrk 192.168.{X+1}.64/26.

NB! Praktikumis seadistatakse iga tegevusega veidi täiendavat funktsionaalsust ja juhendi lõpuks saab valmis näidis, kuidas Interent töötab. Küll aga tähendab see seda, et ühtegi punkti ei tohi vahele jätta ega ainult osaliselt teha, sest muidu ei hakka lõpplahendus tööle. Samuti pöörake tähelepanu, et tihti peidab järgmine tegevus ära mõne veateate olukorra, kus ping või pakettide edastamine ei toimi.

Masinate loomine

Alustuseks tekita endale kolm (3) virtuaalmasinat, mille vahel pakette ruutida.

  1. Esimese asjana peaksid tõmbama endale net.ova ja importima oma VirtualBoxi.
  2. Klooni endale kolm (3) täiendavat virtuaalmasinat - olgu nende nimeks <sinuperekonnanimi>-ruuter1, <sinuperekonnanimi>-ruuter2 ja <sinuperekonnanimi>-klient. Iga masina kloonimiseks tee järgmist:
    • Vali virtuaalmasin net
    • parem klahv net virtuaalmasinal -> Clone, nimeks sinuperekonnanimi-...; vali linnuke MAC aadressi reinitisaliseerimise kohta -> Next -> Linked clone -> Clone.
  3. Anna igale hostile erinev hostinimi, et masinaid lihtsamini eristada
    • Logi masinasse sisse kasutajana kasutaja, parool isherenow
    • Muuda failis /etc/hostname arvuti nimi ära
     sudo nano /etc/hostname
    
    • Muuda ka failis /etc/hosts oma masina DNS-nimi ära, sest igas korralikult konfitud masinas on failis /etc/hosts oma masina kohta kirje (harilikult päris IP-aadressiga, aga sageli piisab kasvõi sellisest minimaalsest nagu siin Ubuntus - tegu on masinasisese IP-ga)
     sudo nano /etc/hosts
    
    • Tee masinale võrguliideste ümberühendamiseks viisakas välja lülitamine ehk halt - vajuta klaviatuuril parem Ctrl + H.

Võrkude ühendamine

  1. Tekita endale kaks VirtualBoxi sisest Host-only võrku: File -> Host Network Manager-> Create. Lisa sinna kaks võrku (Linuxi hostis vboxnet0 ja vboxnet1, Windowsi hostis: VirtualBox Host-Only Ethernet Adapter ja VirtualBox Host-Only Ethernet Adapter #2). Keela kummalgi seadistustest ära DHCP server. Selleks vali Network aknas DHCP server sakk ning võta linnuke eest Enable DHCP server valikult.
  2. Seadista ruuter1 võrguliidesed:
    • ruuter1 Settings -> Network
    • Adapter 1: enabled, Attached to: NAT
    • Adapter 2: enabled, Attached to: Host-only Adapter, Name: VirtualBox Host-Only Ethernet Adapter (Linuxis vboxnet0)
  3. Seadista ruuter2 võrguliidesed:
    • ruuter2 Settings -> Network
    • Adapter 1: enabled, Attached to: Host-only Adapter, Name: VirtualBox Host-Only Ethernet Adapter (Linuxis vboxnet0)
    • Adapter 2: enabled, Attached to: Host-only Adapter, Name: VirtualBox Host-Only Ethernet Adapter #2 (Linuxis vboxnet1)
  4. Seadista kliendi võrguliidesed:
    • klient Settings -> Network
    • Adapter 1: enabled, Attached to: Host-only Adapter, Name: VirtualBox Host-Only Ethernet Adapter #2 (Linuxis vboxnet1)
    • Adapter 2: disabled

Võrguaadresside konfigureerimine

Siin jaotises kirjeldame igale Linuxi virtuaalmasina liidesele sobivad IP-aadressid.

  1. Seadista kõigile masinatele võrgukonfiguratsioon vastavalt allolevale infole.
  • Esiteks tapa maha olemasolev vaikimisi DHCP klient eth0 liidesel, et see hiljem probleeme ei tekitaks:
sudo ifdown eth0

Seadistamise lõpuks peab olema selline seis (seadistamise näited ise on allpool):

  • ruuter1 - eth0 DHCP (vaikimisi), eth1 staatiline 192.168.X.1/24
  • ruuter2 - eth0 staatiline 192.168.X.2/24, eth1 staatiline 192.168.{X+1}.65/26
  • klient - eth0 staatiline 192.168.{X+1}.66/26, eth1 puudub
  • Võrgu aadresside käsitsi seadistamiseks Linuxis redigeeri /etc/network/interfaces faili
sudo nano /etc/network/interfaces

Selleks on järgmised vihjed:

  • Näide DHCP kasutusest:
auto eth0
iface eth0 inet dhcp
  • Näide staatilisest IP-aadressist:
auto eth7
iface eth7 inet static
        address 10.0.0.1
        netmask 255.255.240.0
        network 10.0.0.0
        broadcast 10.0.15.255
  • Asendage loomulikult liidese nimi, aadress ja mask ning arvutage harjutuse mõttes välja ka network (võrgu algus) ja broadcast (hosti osas kõik bitid 1). Sellesse faili gateway lisamine pole vajalik, kuna me tegeleme ruutimisega allpool käsitsi. Arvutatud netmask ja broadcast väärtusi võite kontrollida siit.
  1. Muudatuste aktiveerimiseks tehke iga muudetud liidese kohta järgmist (õige liidesenimiega!):
 sudo ifdown eth7
 sudo ifup eth7

ning vaadake, et ifup vigu ei annaks.

  1. Tulemusena tekkinud liideste IP-aadresside kontrolliks kasutage
ifconfig -a

või

ip addr l

Testime ühendusi naabritega

  1. Pingige mõlema naabri ühendused läbi
    • Esiteks pingige ruuter1-st ruuter2 aadressi 192.168.X.2 - peab vastama
    • Teiseks pingige ruuter1-st internetti aadressi 8.8.8.8 - peab vastama
    • Kolmandaks pingige ruuter2-st kliendi aadressi 192.168.{X+1}.66 - peab vastama
    • Neljandaks pingige ruuter2-st internetti aadressi 8.8.8.8 - peab vastama veateatega Network is unreachable
    • Kui Testid 1-3 ei vasta (ehk annavad veateadet Network is unreachable), lahendage probleem enne kui jätkate praktikumiga

Häälestame ruuterid pakette edastama

Võibolla panite tähele, et eelmistes testides Ruuter1 sai juba Internetiga ühendust, kuid ruuter2 ja klient ei oska veel Internetti üles leida. Järgnevalt näitame, kuidas seadistada käsitsi pakettide edasisaatmist sihtkohta ehk ruutimist (ametlik eestikeelne termin on marsruutimine).

  1. Häälestame ruutingutabelid. Teeme seda lihtsuse mõttes mittepermanentselt.
    • Ruutingutabeli vaatamiseks on käsk
     ip route
    
    Paneme tähele, et vahetult ühendatud võrkude kohta on ruuting juba automaatselt lisatud.
    • Ruutingu lisamise käsu kuju on järgmine:
     sudo ip route add 10.1.2.0/24 via 1.2.3.4
    
    Seejuures peab 1.2.3.4 olema next hop IP address paketi teel ehk järgmine seade, mis on konfigureeritava seadmega vahetult võrguga ühendatud. Ruuteri (1.2.3.4) maski (/24 vms) pole vaja lisada, sest sihtruuteri näol on alati tegu konkreetse seadmega, mitte võrguga.
  2. Kasutades neid käske, tekitage kõigile kolmele masinale sobivad ruutingutabelid:
    • ruuter1 peab teadma, kus on 192.168.{X+1}.64/26 võrk; teist sisevõrku ja Internetti teab ta niigi.
    • ruuter2 peab teadma, kustkaudu pääseb Internetti. Aadressina saab kasutada sõne default reaalse IP ja maski 0.0.0.0/0 asemel. (Mõlemad sisevõrgud on tal niigi teada kuna need on vahetult ühendatud)
    • klient peab teadma, et Interneti (kogu mittekohaliku võrguliikluse) jaoks peab ta pakette saatma ruuter2-le.
     sudo ip route add default via 1.2.3.4
    
  3. Vaikimisi ei edasta laiatarbe-opsüsteemid pakette eri liideste vahel, et mitte võrgus segadust tekitada. Selleks, et Linux hakkaks liideste vahel pakette edastama, tuleb vastavad liidesed seadistada edastama. Meie teeme seda siin lihtsuse mõttes mitte-permanentselt (pärast rebooti tuleks uuesti teha).
    • Nii ruuter1 kui ruuter2 mõlemad Ethernet-liidesed häälestage IP-pakette edastama:
     sudo -i
     echo "1" > /proc/sys/net/ipv4/conf/eth0/forwarding
     echo "1" > /proc/sys/net/ipv4/conf/eth1/forwarding
     exit
    
  4. Testime algul ping ja mtr abil (mtr - teenäitaja, "traceroute"):
    • Pingige kõikidest masinatest kõiki meie poolt konfitud IP-aadresse - peavad toimima
    • Pingige kõikidest masinatest 8.8.8.8 (Google) - peaks pingima ainult ruuter1-st, mujalt mitte.
    • Uurige muudest masinatest mtr abil, kuhu jõuab 8.8.8.8 liiklus - peab jõudma ruuter1-ni.
  5. ruuter2 ja klient ei pääse välja sellepärast, et sihtmasin ei saada nende IP-aadressidega vastuspakette tagasi ruuter1 poole, kuna need ei ole ruuter1 võrgust. Seega peame häälestama ruuter1 omakorda NAT ruuteriks, et ta peidaks ruuter2 ja kliendi enda IP-aadressi taha ära ning väljastpoolt paistaks kõik võrgupaketid nagu ruuter1-st (siis saadab sihtmasin vastused ruuter1-le tagasi).
    • ruuter1-s aktiveerige NAT (mittepermanentselt):
     sudo iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    
    See tähendab, et pärast ruutinguotsuse tegemist (et pakett väljub eth0 kaudu) rakendame IP maskeraadi ehk lihtsat viisi SNAT-i.
    • Testige ruuter2 ja kliendi masinatest
     mtr 8.8.8.8
    
    

Erinevalt varasemast peab see nüüd toimima.

DNS seadistamine

Eelnevalt seadistasime IP võrgu, mis suudab edukalt Interneti (Google serveriga) suhelda. Arvutid on osavad numbritega ja eelistavad seega numbreid omavahel suhtluseks ja üksteisele viitamiseks. Inimesed jällegi eelistavad kasutada asjadele viitamiseks nimesid. Selle asemel, et kirjutada aadressiribale 193.40.5.73, on hulga mugavam kirjutada www.ut.ee. DNS ülesanne ongi tõlkida inimkujul masinanimed masinloetavateks IP-aadressideks.

  1. Veenduge, et hetkel meil DNS nimesid Klient virtuaalamsin lahendada ei oska.
ping www.neti.ee 
  1. Lisage DNS serverite kirjed klient masinasse, selleks sisestage käsk sudo ifdown eth0 ja avage fail /etc/network/interfaces ja lisage sinna eth0 kirjelduse juurde 2 rida (neist gateway rida on selleks, et taastada vaikeruuting selliseks, mida me enne käsitsi tegime):
gateway 192.168.{X+1}.65
dns-nameservers 1.1.1.1 

Lubage uuesti eth0 võrguliides käsuga sudo ifup eth0

  1. Proovige, et ping www.neti.ee nüüd töötab
ping www.neti.ee 

ja samuti mtr www.neti.ee

mtr www.neti.ee 

Praktikumi arvestus

  1. Praktikumi arvestuse jaoks esitage lahendusena ekraanipilt kliendiarvutist eduka mtr www.neti.ee väljundiga.
13. Praktikum 13 - IP ruutimine
Solutions for this task can no longer be submitted.

(Tähtaeg 2 nädalat)

Lisainfo

Klaviatuuri keele ära muutmiseks saate Ubuntu's kasutada järgmist käsku: sudo dpkg-reconfigure keyboard-configuration

  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment