Contact GECAD NET  

Inregistrare   Login  

    KNOWLEDGEBASE

Cum pot comuta rapid intre mai multe setari de retea in linux ?

08 iulie 2006

CAUTARE


FREE SECURITY TOOLS















SONDAJ
Care este principala provocare in implementarea proiectelor de securizare a mediului IT?








 

De multe ori apare nevoia de a putea comuta rapid intre diferite setari de retea: spre exemplu proprietarii de notebook-uri, in functie de reteaua locala la care se conecteaza (acasa, la servici, etc.), vor fi nevoiti de fiecare data sa editeze fisierele de configurare pentru retea. Solutia aceasta nu este insa acceptabila.

Exista o alternativa mult mai comoda la solutia de mai sus: folosirea unei variabile de mediu setate la bootare si modificarea serviciului de retea pentru a verifica valoarea variabilei mai sus amintite inainte de pornirea serviciului.

Spre exemplu, in cazul unei distributii Debian Linux, acestia sunt pasii ce trebuie urmati:

1. Modificarea bootloader-ului (in acest caz LILO), pentru setarea variabilei ce va fi pasata lui init. Sa presupunem ca fisierul /etc/lilo.conf cuprindea urmatoarea inregistrare:
image=/vmlinuz
label="Debian Sid"
read-only

Dupa modificare, aceste linii s-au transformat in:

image=/vmlinuz
label="Home"
read-only
append="LOCATION=home"

image=/vmlinuz
label="Work"
read-only
append="LOCATION=work"

Nu uitati sa rulati din nou "lilo", pentru ca setarile de mai sus sa fie aplicate.

In cazul in care aveti grub, sintaxa este mai simpla. O inregistrare ca mai jos:

title Debian Sid
root (hd0,0)
kernel (hd0,0)/vmlinuz root=/dev/hda3

se va transforma in:

title Home
root (hd0,0)
kernel (hd0,0)/vmlinuz root=/dev/hda3 LOCATION=home

title Work
root (hd0,0)
kernel (hd0,0)/vmlinuz root=/dev/hda3 LOCATION=work

2. Acum va trebui sa modificam serviciul de retea, pentru a tine cont de variabila de mai sus. Mai intai, trebuie sa observam ca, in cazul Debian, setarile relevante pentru retea (adresa IP, masca retea, gateway), sunt scrise in fisierul /etc/network/interfaces. In momentul in care serviciul /etc/init.d/networking este pornit, prin apelarea cu parametrul "start", el va executa (printre altele) un "ifup -a", care implicit va citi valorile din fisierul "interfaces".

Ca atare vom executa comenzile:

cp /etc/network/interfaces /etc/network/interfaces.home
cp /etc/network/interfaces /etc/network/interfaces.work
cp /etc/resolv.conf /etc/resolv.conf.home
cp /etc/resolv.conf /etc/resolv.conf.work

Va trebui sa editam apoi corespunzator fisierele mai sus amintite (interfaces.home, interfaces.work, resolv.conf.home si resolv.conf.work). Ultimele doua fisiere vor cuprinde setarile relevante pentru DNS.

Sa aruncam acum o privire asupra fisierului /etc/init.d/networking. Se observa ca in cazul in care este apelat cu parametrul "start", acestea sunt liniile ce se executa:

case "$1" in
start)
doopt spoofprotect yes
doopt syncookies no
doopt ip_forward no

echo -n "Configuring network interfaces."
ifup -a
echo "done."
;;

Vom modifica liniile de mai sus astfel:

case "$1" in
start)
doopt spoofprotect yes
doopt syncookies no
doopt ip_forward no

echo "Configuring network interfaces."

if [ "${LOCATION}" = "home" ];then
echo -n "Setting home environment for network."
ifup -a -i /etc/network/interfaces.home
cp /etc/resolv.conf.home /etc/resolv.conf
echo "home" > /etc/network/location
fi

if [ "${LOCATION}" = "work" ];then
echo -n "Setting work environment for network."
ifup -a -i /etc/network/interfaces.work
cp /etc/resolv.conf.work /etc/resolv.conf
echo "work" > /etc/network/location
fi

echo "done."
;;

Dupa cum se poate vedea, au mai fost adaugate la scriptul de mai sus si urmatoarele linii:

echo "work" > /etc/network/location
echo "home" > /etc/network/location

Acestea au fost adaugate pentru a pastra valoarea variabilei LOCATION si dupa pornire (aceasta nu are relevanta decat la bootare, variabila fiind stearsa apoi). Ne vom folosi de fisierele create mai sus in momentul in care vom edita si sectiunea referitoare la "restart" din serviciul de retea.

Vom inlocui astfel liniile de mai jos:

force-reload|restart)
echo -n "Reconfiguring network interfaces."
ifdown -a
ifup -a
echo "done."
;;

cu urmatoarele:

force-reload|restart)
echo "Reconfiguring network interfaces."
ifdown -a

LOCATION=`cat /etc/network/location`
if [ "${LOCATION}" = "home" ];then
echo -n "Setting home environment for network."
ifup -a -i /etc/network/interfaces.home
cp /etc/resolv.conf.home /etc/resolv.conf
fi

if [ "${LOCATION}" = "work" ];then
echo -n "Setting work environment for network."
ifup -a -i /etc/network/interfaces.work
cp /etc/resolv.conf.work /etc/resolv.conf
fi

echo "done."
;;


Foarte probabil va trebui sa inlocuiti si pentru partea de oprire a serviciului de retea linia "ifdown -a", dupa modelul de mai sus.

In acest moment totul este pregatit, iar la rebootare veti avea de ales din meniul LILO intre "Home" si "Work". Functie de alegerea facuta, se vor incarca setarile de retea corespunzatoare fiecarui caz.

De remarcat ca in cazul in care dorim sa schimbam setarile de retea "din mers", fara a reporni, va trebui sa schimbam valoarea lui /etc/network/location. Spre exemplu:

echo "work" > /etc/network/location
/etc/init.d/networking restart

PROGRAME AFECTATE

nici unul

Autor: Mihai Vasilescu


Politica de confidentialitate     Termeni de folosire     Contact Developed by Webdev