Informatica
Sisteme de Operare
Subiect: Configurarea unui ruter Linux pentru doua retele sub-locale .
Introducere
Sistemul de operare linux cuprinde mai multe functionalitati printre care si accea de "routing". Doua sau mai multe subretele se pot interconecta prin intermediul unei astfel de solutii. Schema retelei este prezentata īn figura 1. De exemplu, daca un host din subnetul unu doreste sa acceseze un alt host din subnetul doi, masina linux va ruta pachetele astfel īncāt acestea sa ajunga la destinatie si īnapoi. Pentru interconectarea celor doua subretele, masina linux trebuie sa fie dotata cu doua interfete de retea. De asemenea, pentru fiecare host din subnetul unu care doreste sa acceseze un host din subnetul doi, trebuie setat ca si "gateway" masina linux. Astfel toate pachetele cu alta destinatie decāt subnetul curent, va fi trimis catre "gateway" īnspre directionare.
In afara de rutare se mai pot face si operatii de filtrare de pachete, astfel masina linux functionānd si ca un "firewall". Un "firewall" consta īntr-un set de reguli prin care se filtreaza traficul. De exemplu daca se doreste ca "host-ul"(adresa) A din subnetul unu sa acceze doar o pagina web aflata pe "host-ul" B din subnetul doi, regulile din "firewall" vor opri orice alt acces decāt cel dorit.
Un alt rol pe care-l poate īndeplini masina linux pe lānga rutare si filtrare de pachete, este acela de control al traficului. Prin aceasta functionalitate se īntelege controlul latimii de banda pentru un "host" sau pentru un grup de "host-uri". De exemplu din totalul latimii de banda se poate aloca un anumit procent unui trafic ce este critic iar restul sa fie īmpartit echitabil īntre ceilalti utilizatori.
Cerinte hardware
Masina linux este un PC cu doua interfete de retea, o interfata īntr-un "subnet" si cealalta īn celalalt "subnet". Cerintele hardware sunt in functie de distributia de linux folosita. Īn cazul de fata am utilizat Suse Linux 9.0. Cerintele hardware sunt:
Minime:
a. CD-ROM
b. Procesor: AMD Athlon/Duron, Intel Pentium III/4
c. RAM: 128 MB
d. Spatiu Hard-disk: 500MB
e. Interfete de retea: īn functie de mediul fizic, placi de retea Ethernet, modem-uri dial-up, de linie īnchiriata, DSL, interfete wireless etc.
Recomandate:
"Subneturile" sunt definite dupa cum urmeaza:
Adresele de IP ale interfetelor sunt:
Cerinte software.
Īn prima faza trebuie sa ne decidem asupra distributiei de Linux pe care dorim s-o folosim. Exista multe distributii de Linux, dar cele mai importante ar fi:
Īn cazul nostru, distributia linux folosita este Suse Linux 9.0, versiunea de kernel fiind 2.4.21. De asemenea sunt necesare urmatoarele programe:
insmod, lsmod, modprobe. Aceste "tool-uri" permit īncarcarea de module īn kernel. Modulele īncarcabile sunt de regula drivere. Astfel daca se instaleaza "hardware" nou īn masina linux, trebuie īncarcat modulul aferent acestuia pentru a-i asigura functionarea. Insmod īncarca un modul īn kernel, lsmod afiseaza modulele. Modprobe este mai performant īn sensul ca testeaza modulul īnainte de al īncarca. De exemplu driverele unei placi de retea trebuie īncarcate īn kernel, īn cazul īn care aceasta nu este compilata īn prealabil īn kernel:
insmod /lib/modules/2.4.21-99-default/kernel/drivers/net/r8169.o
ifconfig - permite configurarea interfetelor de retea. Fara argumente, comanda ifconfig, afiseaza starea interfetelor de retea active. Īn cazul īn care argumentul este o singura interfata, atunci se va afisa doar starea interfetei date. Pentru a se afisa si interfetele care sunt "down"(jos,picate) se foloseste argumetul -a.
ifconfig eth0 va afisa urmatoarele informatii:
eth0 Link encap:Ethernet HWaddr 00:09:6B:07:CF:B2
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4262267 errors:0 dropped:0 overruns:0 frame:0
TX packets:5121 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:296341473 (282.6 Mb) TX bytes:482373 (471.0 Kb)
Interrupt:9 Base address:0x2000 Memory:e8100000-e8100038
Se pot observa informatii cum ar fi adresa de IP, masca, adresa de broadcast, MAC-ul, numarul de pachete trimise/receptionate.
De asemenea cu comanda ifconfig se pot schimba setarile interfetei de retea. Comanda de mai jos va schimba adresa de IP si netmask-ul.
ifconfig eth0 192.168.0.10 netmask 255.255.255.0
route. Aceasta comanda permite vizualizarea/actualizarea tabelei de rutare. De regula se foloseste pentru a seta rute statice catre anumite "hosturi" sau subretele. Pentru afisarea tabelei de rutare se foloseste comanda route fara nici un parametru. "Output-ul" comenzii este cum urmeaza:
Destination Gateway GenMask Flags Metric Ref Use Iface
* 255.255.255.255 UH 0 0 0 eth0
* 255.255.255.255 UH 0 0 0 eth1
* 255.255.255.0 U 0 0 0 eth0
* 255.255.255.0 U 0 0 0 eth1
* 255.0.0.0 U 0 0 0 lo
default 192.168.1.100 0.0.0.0 UG 0 0 0 eth1
De observat ruta "default" care specifica adresa(gateway-ul) unde se vor trimite toate pachetele catre alte destinatii decat cele doua "subneturi".
iptables. Se foloseste pentru adaugarea, modificarea si vizualizarea tabelelor de reguli de filtrare din kernel. Pot fi create de catre utilizator si alte tabele. Fiecare tabela contine mai multe "chain-uri"(lanturi), iar fiecare "chain" este de fapt un sir de reguli peste care pachetele pot face sau nu, "matching"(potrivirea). Īn functie de regula peste care face "matching" un pachet poate fi:
Exista trei tabele disponibile. Daca kernelul este configurat sa īncarce automat modulele, atunci el va īncerca sa īncarce modulul necesar pentru fiecare tabela. Asta daca nu e īncarcat deja. Asadar cele trei tabele sunt:
Filter - este tabela implicita. Contine trei "chainuri" "Input"(pentru pachetele care intra), "Output"(pachete generate local), Forward(pachete ce trec prin).
Nat - aceasta tabela este consultata cand se īntalneste un pachet care creaza o noua conexiune. Are trei "chain-uri": "Prerouting"(pentru pachete care tocmai intra), Output(pachete generate local), "Postrouting"(pachete care sunt pe cale sa iasa)
Mangle - este o tabela folosita pentru alterarea pachetelor.
tc - afiseaza/actualizeaza setarile de control de trafic. Folosind aceasta comanda se pot īntārzia pachete. De fapt limitarea vitezei este de fapt o īntarziere a pachetelor. Se pot defini mai multe clase, fiecarei clase putāndu-i-se atribui un minim si un maxim. Clasele īsi pot īmrpumuta una alteia latime de banda.
Implemtarea solutiei
Pentru a īndeplini functiuni de "router", masina linux trebuie trebuie configurata dupa cum urmeaza:
i. se īncarca daca este nevoie modulele interfetelor de retea:
modprobe rtl8139.o
ii. daca interfetele de retea sunt "up", urmeaza configurarea lor
ifconfig eth0 192.168.0.1 netmask 255.255.255.0
ifconfig eth1 192.168.1.1 netmask 255.255.255.0
iii. se verifica daca cele doua interfete sunt "up and running"
ifconfig
iv. se face "enable" la "forwarding-ul" īntre cele doua interfete de retea.
echo 1 > /proc/sys/net/ipv4/ip_forward
v. introducerea de reguli īn "firewall". Pentru a se realiza acest lucru, cea mai simpla solutie este realizarea unui fisier de tip "batch". Acesta va contine regulile din "firewall".
IPTABLES="/usr/local/bin/iptables"
modprobe ip_tables
$ IPTABLES -F
$ IPTABLES -F -t nat
IPTABLES -X firewallvi. controlul traficului daca este cazul. Alegem interfata eth1
Stergerea qdisc-ului.
tc qdisc del dev eth1 root handle 1:
Definesc QDISC-ul mare
tc qdisc add dev eth1 root handle 1: htb (htb = regula de īntārziere)
Definesc clasele :
Clasa(1) parinte de 512kbit cu maxim 512kbit
tc class add dev eth1 parent 1: classid 1:1 htb rate 512kbit
Subclasa 2 cu 256kbit alocata(max 512kbit) si 2 subclase de cāte 128kbit(max 256kbit)
tc class add dev eth1 parent 1:1 classid 1:2 htb rate 256kbit ceil 512kbit
tc class add dev eth1 parent 1:2 classid 1:21 htb rate 128kbit ceil 256kbit
tc class add dev eth1 parent 1:2 classid 1:22 htb rate 128kbit ceil 256kbit
Subclasa 3
tc class add dev eth1 parent 1:1 classid 1:3 htb rate 256kbit ceil 512kbit
tc class add dev eth1 parent 1:3 classid 1:31 htb rate 4kbit ceil 32kbit
tc class add dev eth1 parent 1:3 classid 1:32 htb rate 4kbit ceil 32kbit
Setarea filtrelor pentru fiecare clasa
tc filter add dev eth1 parent 1: protocol ip prio 1 handle 21 fw classid 1:21
tc filter add dev eth1 parent 1: protocol ip prio 1 handle 22 fw classid 1:22
tc filter add dev eth1 parent 1: protocol ip prio 1 handle 31 fw classid 1:31
tc filter add dev eth1 parent 1: protocol ip prio 1 handle 32 fw classid 1:32
iptables -A POSTROUTING -t mangle -d 192.168.1.10/32 -j MARK --set-mark 21
iptables -A POSTROUTING -t mangle -d 192.168.1.20/32 -j MARK --set-mark 32
Bibliografie :
Internetul .
https://linuxfaqs.de/howto/iptableshowto.php#praxis
https://www.linuxfaq.de/f/cache/1266.html (pagina)
https://www.linuxfaq.de/f/cache/1266.html#tth_sEc3 (linku exact)
https://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/ip.htm
https://ccrma.stanford.edu/planetccrma/man/man8/insmod.8.html
https://www.faqs.org/docs/linux_network/x-087-2-iface.ifconfig.html
https://publib16.boulder.ibm.com/pseries/en_US/cmds/aixcmds3/ifconfig.htm
https://linux.about.com/od/commands/l/blcmdl8_route.htm
https://www.linuxguruz.com/iptables/scripts/rc.firewall_012.txt
|