Configurare router in FreeBSD
1) The scenario:
Avem un calculator care va fi folosit ca router, calculatorul are doua placi de retea (de0 si rl0), o placa este conectata la Internet prin IP public iar cealalta placa este conectata intr-o retea interna cu IP privat (IP ce va fi folosit ca gateway pentru celelalte masini din cadrul retelei).
De la furnizorul de internet (ISP) am primit urmatorul IP public: 82.79.81.12. Acest IP va fi folosit pe placa "de0" cu netmask 255.255.255.0, gateway 82.79.81.1 si DNS: 193.231.249.1
IP-ul interior va fi setat pe placa "rl0" cu adresa 192.168.10.1 si netmask: 255.255.255.0. Aceasta placa va fi conectata la un switch sau hub, la care vor fi conectate apoi statiile care vor folosi routerul pentru accesul la Internet.
2) Instalarea sistemului FreeBSD:
Deoarece masina va fi folosita ca router, este suficient a se alege pentru instalare optiunea Kern-Developer, optiune ce va instala toate programele binare, documentatia si sursele pentru nucleu. Vom avea nevoie de aceste surse pentru recompilarea nucleului (kernel).
3) Compilarea nucleului:
Vom compila nucleul FreeBSD pentru a activa suportul pentru firewall si limitarea traficului (ALTQ). Sursele nucleului se afla in directorul /usr/src/sys.
# cd /usr/src/sys/i386/conf
# cp GENERIC MYROUTER
Fisierul GENERIC contine setarile pentru nucleul implicit FreeBSD. Vom copia acest fisier sub numele MYROUTER si apoi vom edita MYROUTER
# vi MYROUTER
Adaugam urmatoarele linii in fisierul MYROUTER :
device pf # suport pentru firewallul PF device pflog # suport pentru pflog device pfsync # suport pentru pfsync options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build
Salvam fisierul, apoi vom genera fisierele de configurare folosind comanda:
# /usr/sbin/config MYROUTER
Compilam nucleul:
# cd /usr/src/sys/i386/compile/MYROUTER
# make depend
# make
# make install
Repornim calculatorul:
# reboot
4) In continuare editam fisierul /etc/hosts, trebuie sa arate astfel:
::1 localhost.net localhost 127.0.0.1 localhost.net localhost 82.79.81.12 router.net router 82.79.81.12 router.net.
5) Editam fisierul /etc/rc.conf (configuram adresele IP si activam firewallul) :
hostname="router.net" ifconfig_rl0="inet 192.168.10.1 netmask 255.255.255.0" ifconfig_de0="inet 82.79.81.12 netmask 255.255.255.0" defaultrouter="82.79.81.1" pf_enable="YES"
6) Editam fisierul /etc/resolv.conf pentru a adauga serverul care rezolva
domeniile (In acest fisier se adauga adresa DNS primita de la ISP):
domain router.net nameserver 193.231.249.1
7) Adaugam urmatoarea linie in /etc/sysctl.conf:
net.inet.ip.forwarding=1
8) Configuram firewallul pentru NAT. Editam fisierul /etc/pf.conf si adaugam urmatoarele linii la locul lor potrivit:
# Macros: define common values, so they can be refernced and changed easily. ext_if="de0" int_if="rl0" # Translation: specify how addresses are to be mapped or redirected. nat on de0 from rl0/24 to any -> de0 # Filtering: the implicit first two rules are pass in all pass out all
9) Repornim routerul:
# reboot
Sfat: Daca se fac modificari in fisierul /etc/pf.conf, trebuie dat un "flush" la firewall ceea ce puteti face cu comanda:
# pfctl -f /etc/pf.conf
Daca doriti mai multe detalii despre pachetele care circula intre router si clienti folositi comanda:
# pfctl -s all -vv | less
- Login to post comments
![[banner]](/images/banners/unixro.gif)
![[banner]](/images/banners/progra.png)
![[banner]](/images/banners/undeadly.png)
Configurare router in FreeBSD
Ca o completare:
In handbook scrie ca nu este necesara activarea PF - ului adaugand urmatoarele linii in kernel:
device pf
device pflog
device pfsync
Aceste optiuni sunt puse doar ca scop informational. Daca compilati PF in kernel acest modul nu mai functioneaza.
Configurare router in FreeBSD
Da, intr-adevar se poate face totul fara a recompila kernelul cu urmatoarele linii :
device pf
device pflog
device pfsync
Dar daca doriti limitare de banda (traffic-shaping) aveti nevoie de ALTQ care dupa cum stiu nu functioneaza daca nu este compilat in kernel.
Configurare router in FreeBSD
try ipfw/dummynet ( see manpages )
My personal favourite: http://www.bsdnews.org/02/dummynet.php
--
J
Configurare router in FreeBSD
Unii ar spune ca dummynet(4) e prea complicat ;-). pipe + dymamic queues e un concept demential ;-)
Apropos, pentru cine e mai in tema cu pf+altq: cum se poate face clasificarea pachetelor care ies dintr-un router cu NAT pe o coada egress care sa fie in stare sa diferentieze statiile interne? In exemplele pf pe care le-am intalnit am gasit doar cum se face asignarea unei cozi ingress pentru conexiunile initiate din reteaua locala, nu si la incadrarea intr-o coada egress pentru fiecare masina, ceea ce cred ca duce la imposibilitatea de a separa traficul egress per-internal-machine, ramanand doar clasificare per-port/protocol (nat printr-o singura adresa publica). Daca doreste cineva sa ma lamureasca....
PS: cu ipfw + dummynet se poate ;-)