User login

Poll

Doriti un alt design pentru forum ?
Da
50%
Nu
50%
Total votes: 6

[banner]

[banner]

[banner]

natd

Salut !
Cum pot sa dau acces la internet prin natd (ipfw) pentru un singur computer ? Eventual, sa se verifice si MAC-ul inainte...

natd

http://www.unixro.net/tips/st/18.html

+ eventual un /etc/ethers unde pastrezi static ip + mac

natd

Salut !
Nu m-am exprimat corect... cum pot da internet pentru un singur computer ? Stiu cum sa configurez natd pentru mai multe sisteme, dar ma intereseaza cum pot sa dau acces pentru fiecare in parte.
Am o retea care trebuie sa o conectez la internet si gateway-ul lucreaza si ca server de fisiere si server de baze de date. Deci, nu pot bloca accesul la server. Dar ma intereseaza da dau internet doar la o parte din computere.
natd, dupa cum am observat eu, adauga o regula in lista ipfw care da net pentru toate computerele...
De asemenea, as fi curios cum pot sa fac si limitare (banuiesc ca se face cu pipe) dar sa fie limitare doar pentru internet, nu si pentru lucrul direct cu serverul, pentru ca transferul de fisiere in LAN vreau sa aiba cat de cat o viteza respectabila... doar de aia ii LAN :P
Chestia-i ca as putea sa-l pun pe linux si sa folosesc iptables... dar prefer FreeBSD ;)

natd

In primul rand, (dupa parerea mea) conteaza rezultatul, nu ce solutie folosesti (Linux/BSD/MS) atata timp cat face ceea ce vrei tu.

In al doilea rand nu ar trebui sa folosesti gateway-ul si ca server de date si fisiere. Asa ca, daca nu ai f mari restrictii de buget poti sa-ti iei un PI/II cu 2-2.5 mil pe care sa-l folosesti ca si router/firewall. Serverele vor fi mai libere si tie cred ca ti-ar fi mai usor sa dai acces prin gateway doar la cine vrei.

Daca e vorba de NAT si traffic shaping eu as spune ca pf ar fi cel mai potrivit.

natd

colinbsd wrote:
In primul rand, (dupa parerea mea) conteaza rezultatul, nu ce solutie folosesti (Linux/BSD/MS) atata timp cat face ceea ce vrei tu.

Am inceput de prin Decembrie sa lucrez pe FreeBSD si imi place mai mult decat Linux sau orice altceva, si e sistemul de operare in care as vrea sa ma "specializez". Sincer, am mai multa incredere in FreeBSD decat in Linux sau orice alta versiune de UNIX, fie ea si comerciala.

colinbsd wrote:
Daca e vorba de NAT si traffic shaping eu as spune ca pf ar fi cel mai potrivit.

Asta trebuie incercata... au mai spus si altii ca pf e mai bun decat ipfw... trebuie sa studiez putin problema ;-)

natd

Sergiu-IT wrote:
Asta trebuie incercata... au mai spus si altii ca pf e mai bun decat ipfw... trebuie sa studiez putin problema ;-)

Combinatia ipfw + natd este cu dus si intors ;-). In acest caz pachetele care pleaca de la statia din retea ajung la router, sunt procesate de setul de reguli ipfw de pana la "divert natd ip from any to any" cu adresa ip originala. dupa ce trece si prin natd adresa ip nu mai este cea de LAN, ci adresa de alias, dupa cum e configurat natd. La retur se intampla ceva asemanator, doar ca pana la regula cu divert are ip public si dupa ce reintra in firewall din divert socket are adresa de lan. Cred ca `man libalias` ar trebui sa prezinte situatia un pic mai detaliat decat am facut-o eu. Pentru a rezolva problema cu viteza decenta la server + viteza limitata (indecenta) pentru internet trebuie sa determini pozitia in setul de reguli ipfw unde trebuie sa trimiti pachetele in queue, tinand cont de faptul ca implicit ceea ce ai clasificat intr-o coada nu mai revine in firewall. Inserarea pachetului in queue este ultima operatie pe care ar trebui sa o faci. Daca aceasta situatie nu ti se pare potrivita si stii sigur ca nu treci un pachet prin mai multe queues poti sa incerci sysctl net.inet.ip.fw.one_pass=0' si sa faci setul de reguli cum doresti. Pe scurt, ceea ce ai de facut este

# cateva prerechizite
/sbin/kldload dummynet
/sbin/ipfw enable one_pass # nu cred ca merge natd + ipfw + dummynet altfel,
mare atentie la dublarea pachetelor in queues
/sbin/natd -n wan_iface --unregistered-only
# definitii de pipe-uri pentru traficul la si de la server
/sbin/ipfw pipe 1 config bw 99mbit/s; /sbin/ipfw pipe 2 config bw 99mbit/s
# pentru ca internetul nu va ajunge asa curand la 100mbit/s e de preferat sa faci alte pipe-uri pentru internet. Poti sa le definesti asimetric
/sbin/ipfw pipe 3 config bw 256kbit/s # down
/sbin/ipfw pipe 4 config bw 256kbit/s # up
# Ceva filtre + clasificare pentru acces din LAN la server
/sbin/ipfw add pipe 1 tcp from to me in via lan_iface port
# si returul de la server la workstations
/sbin/ipfw add pipe 2 tcp from me to out via lan_iface # mai pui dupa necesitati si alte protocoale
# si poti sa te ocupi si de clasificarea pentru internet
/sbin/ipfw add pipe 4 ip from to any in via lan_if
/sbin/ipfw add divert natd ip from any to any # nu cred ca e o idee buna sa trimiti altfel pachete catre natd ;-), daca gasesti una spune-mi
# si clasificarea la download
/sbin/ipfw add pipe 3 ip from any to out via lan_if
Ar mai fi o gramada de lucruri de spus, man dummynet de aici inainte :) . Si succes!

Hint: Daca folosesti ipnat (pentru nat) + [ipfw & dummynet (pentru shaping)] poti sa te joci mult mai bine cu queue-urile, nu mai apare natd-ul ala care sa incurce socotelile si nici necesitatea de a seta sysctl net.inet.ip.fw.one_pass=0, insa o sa munceasca CPU in 2 engine-uri de fitering.

natd

Problema cu NATul! Ce nu e corect aici sau nu ajunge?

IPFW.rules

#config kanals
add 1 allow ip from 87.87.87.87 to me keep-state
add 2 allow ip from 192.168.15.12 to any keep-state # my IP
add 6 check-state
add 10 allow ip from me to any keep-state

#pipes & queue
pipe 1 config bw 192Kb delay 0 queue 20
pipe 2 config bw 192Kb delay 0 queue 20
...

queue 10 config queue 5 pipe 1 weight 5
queue 11 config queue 5 pipe 1 weight 10
queue 20 config queue 5 pipe 2 weight 5
queue 21 config queue 5 pipe 2 weight 10
...


#selectia
add 20 skipto 100 ip from 192.168.15.1/24 to any
add 22 skipto 300 ip from any to any

add 99 skipto 1000 ip from any to any
add 199 skipto 1000 ip from any to any
add 299 skipto 1000 ip from any to any

#acces LAN
add 100 deny tcp from 192.168.15.1/24 to me 777 keep-state
add 110 allow icmp from 192.168.15.1/24 to me 777 keep-state
add 121 queue 10 ip from 192.168.15.11 to any keep-state #1st klient
add 122 queue 20 ip from 192.168.15.13 to any keep-state #2nd klient
add 123 queue 11 ip from 192.168.15.14 to any keep-state #3rd klient
add 124 queue 21 ip from 192.168.15.15 to any keep-state #4th klient
...


add 181 divert 8668 from 192.168.15.1/24 to any out via  rl0 # rl0-87.87.87.87

#any 
add 310 allow icmp from any to me keep-state
add 1001 allow ip from any to any


RC.conf

#This file now contains just the overrides from /etc/defaults/rc.conf.
font8x14="NO"
font8x16="NO"
font8x8="NO"
hostname="serverBSD.nodamain.com"
ifconfig_rl0="inet 87.87.87.87 netmask 255.255.x.x"
ifconfig_rl1="inet 192.168.15.254 netmask 255.255.255.0"
defaultrouter="87.87.87.x"
mouse_enable="YES"
usbd_enable="YES"
sshd_enable="YES"
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_type="OPEN"
firewall_quiet="NO"
firewall_logging="YES"
gateway_enable="YES"
router_enable="YES"
router_flags="-q"
router="/sbin/routed"
natd_enable="YES"
natd_program="/sbin/natd"
natd_interface="rl0"



#kernel
#hints  "GENERIC.hints"




options SCHED_4BSD
options INET
options INET6
options FFS
options SOFTUPDATES
options UFS_ACL
options UFS_DIRHASH
options MD_ROOT
options NFSCLIENT
options NFSSERVER
options NFS_ROOT
options MSDOSFS
options CD9660
options PROCFS
options PREUDOFS
options GEOM_GPT
options COMPAT_43
options COMPATF_FREEBSD4
options SCSI_DELAY=15000
options KTRACE
options SYSVSHM
options SYSVMSG
options SYSVSEM
...
options ADAPTIVE_GIANT
options HZ=1000
options IPDIVERT
options DUMMYNET
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
device apic   #I/O APIC

natd

_alien wrote:
Problema cu NATul! Ce nu e corect aici sau nu ajunge?

IPFW.rules

#config kanals
add 1 allow ip from 87.87.87.87 to me keep-state
add 2 allow ip from 192.168.15.12 to any keep-state # my IP
add 6 check-state
add 10 allow ip from me to any keep-state

#pipes & queue
pipe 1 config bw 192Kb delay 0 queue 20
pipe 2 config bw 192Kb delay 0 queue 20
...

queue 10 config queue 5 pipe 1 weight 5
queue 11 config queue 5 pipe 1 weight 10
queue 20 config queue 5 pipe 2 weight 5
queue 21 config queue 5 pipe 2 weight 10
...


#selectia
add 20 skipto 100 ip from 192.168.15.1/24 to any
add 22 skipto 300 ip from any to any

add 99 skipto 1000 ip from any to any
add 199 skipto 1000 ip from any to any
add 299 skipto 1000 ip from any to any

#acces LAN
add 100 deny tcp from 192.168.15.1/24 to me 777 keep-state
add 110 allow icmp from 192.168.15.1/24 to me 777 keep-state
add 121 queue 10 ip from 192.168.15.11 to any keep-state #1st klient
add 122 queue 20 ip from 192.168.15.13 to any keep-state #2nd klient
add 123 queue 11 ip from 192.168.15.14 to any keep-state #3rd klient
add 124 queue 21 ip from 192.168.15.15 to any keep-state #4th klient
...


add 181 divert 8668 from 192.168.15.1/24 to any out via  rl0 # rl0-87.87.87.87

#any 
add 310 allow icmp from any to me keep-state
add 1001 allow ip from any to any


RC.conf

#This file now contains just the overrides from /etc/defaults/rc.conf.
font8x14="NO"
font8x16="NO"
font8x8="NO"
hostname="serverBSD.nodamain.com"
ifconfig_rl0="inet 87.87.87.87 netmask 255.255.x.x"
ifconfig_rl1="inet 192.168.15.254 netmask 255.255.255.0"
defaultrouter="87.87.87.x"
mouse_enable="YES"
usbd_enable="YES"
sshd_enable="YES"
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_type="OPEN"
firewall_quiet="NO"
firewall_logging="YES"
gateway_enable="YES"
router_enable="YES"
router_flags="-q"
router="/sbin/routed"
natd_enable="YES"
natd_program="/sbin/natd"
natd_interface="rl0"



#kernel
#hints  "GENERIC.hints"




options SCHED_4BSD
options INET
options INET6
options FFS
options SOFTUPDATES
options UFS_ACL
options UFS_DIRHASH
options MD_ROOT
options NFSCLIENT
options NFSSERVER
options NFS_ROOT
options MSDOSFS
options CD9660
options PROCFS
options PREUDOFS
options GEOM_GPT
options COMPAT_43
options COMPATF_FREEBSD4
options SCSI_DELAY=15000
options KTRACE
options SYSVSHM
options SYSVMSG
options SYSVSEM
...
options ADAPTIVE_GIANT
options HZ=1000
options IPDIVERT
options DUMMYNET
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
device apic   #I/O APIC

Pai sa vedem la ce faci nat:

#selectia
add 20 skipto 100 ip from 192.168.15.1/24 to any
add 22 skipto 300 ip from any to any

este echivalent cu

add 20 skipto 300 ip from not 192.168.15.1/24 to any
add 22 skipto 100 ip from 192.168.15.1/24 to any

iar regula de divert are index...

add 181 divert 8668 from 192.168.15.1/24 to any out via  rl0

181. Deci .. o sa faca match mai rar si implicit divert + natd o sa aiba ceva mai multa relaxare.
Regula cu index 99 nu va face match niciodata, pentru ca in 20 si 22 s-au procesat toate pachetele IP, poate doar pentru pachete layer2.
Check the ruleset again.

post-edit: pachetepe le care le trimiti in divert socket nu trebuie sa fie doar cele dinspre LAN catre internet, ci si cele din internet inapoi, pentru a le reface adresa LAN.

natd

m-am clarificat cu NATD-ul:

case ${firewall_type} in 
[Oo][Pp][Ee][Nn] 
my rules 
;;

RC.conf
firewall_type=open

rc.firewall 
${fwcmd} add allow ip from 192.168.x.x to any keep-state 
${fwcmd} add.... 
${fwcmd} add.... 
${fwcmd} add.... 
${fwcmd} pipe.... 
${fwcmd} queue.... 
... 
${fwcmd} add 65000 pass all from any to any 
;;

unde:

case ${firewall_quiet} in 
[Yy][Ee][Ss] 
                  fwcmd="/sbin/ipfw -q" 
                   ;; 
*) 
                  fwcmd="/sbin/ipfw" 
                   ;; 
esac

natd

Salut,

vad ca nu a mai scris nimeni demult pe domeniul de limitari ...

din cate am priceput si eu studiind prin diverse locuri am ajuns la asta:

ipfw -q -f flush
oif="ed0"
odns="84.247.42.193"
cmd="ipfw -q add"
cmd2="ipfw"
ks="keep-state"
oif2="ed1"
#definire clienti 128
c1="10.0.0.2"
#definiri limite
$cmd2 pipe 1 config bw 99mbit/s # DL LAN 
$cmd2 pipe 2 config bw 99mbit/s # UP LAN
$cmd2 pipe 3 config bw 128kbit/s # DL client
$cmd2 pipe 4 config bw 128kbit/s # UL client
#limitari LAN
$cmd pipe 1 tcp from $oif2 to me in via $oif2
$cmd pipe 2 tcp from me to $oif2 out via $oif2
#limitari www
$cmd pipe 4 ip from $c1 to any in via $oif2
$cmd divert natd ip from any to any
$cmd pipe 3 if from any to $c1 out via $oif2

ideea este ca vreau sa limitez numai traficul de iesire la 128 si restul sa ramana nelimitat(sau limitat la 99mbit/s)
conexiunea la net este prin PPPoE si clientii folosesc DHCP

se poate cumva face ca ip-ul(sau/si) MAC-ul de la clienti sa fie citit dintr-un alt loc in ideea sa nu mai adaug cate 2 linii aici , una cu definirea ip-ului la client si alta cu limitarea aferenta?

si dummy se apeleaza numai prin "/sbin/kldload dummynet" ? in BSD 4.10 sau trebuie obligatoriu compilat kernelul cu optiunile de IP_FIREWALL ..etc ?

sper sa nu fi facut o varza prea mare :P