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
|