Sávszélesség korlátozása linux-szal
A szukseges eszkozok:
Szamitogep (486DX2+, 32MB ram)
2 halozati kartya (nem ne2k, mert promisc modban uzemelnek)
linux (Debian Sid nalam)
A feladat:
A router es a LAN kozott transzparens savszelesseg korlatozas
megvalositasa IP cim szerint.
A topologia:
+--------+ +-------+ +-----
| router |-----| linux |-----| LAN
+--------+ +-------+ +-----
1 2 3 4
1: 192.168.1.1 - 00:50:DA:4A:2F:15
2: eth0
3: eth1
4: 192.168.1.0/28
192.168.1.2 - 00:60:97:FF:41:BE
.
.
192.158.1.15 - 00:A0:24:4E:26:32
A telepites:
A mukodo linux alapfeltetel, csak a base-t szukseges telepiteni,
es az ossze service leallithato a cron es a syslog kivetelevel,
a felesleges csomagok (ppp, modconf, stb) eltavolithatoak.
Ezutan szukseg van az iproute csomagra, valamint a shaper csomagra,
ami kenyelmes konfiguraciot biztosit a cbq hasznalatahoz.
Tehat: apt-get install shaper
Uj kernelt kell forditani (nalam 2.4.5 mint aktualis verzio, ehhez
talan eleg stabil) a kovetkezokkel:
#
# General setup
#
CONFIG_SYSCTL=y
#
# QoS and/or fair queueing
#
CONFIG_NET_SCHED=y
CONFIG_NETLINK=y
CONFIG_RTNETLINK=y
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_CSZ=m
# CONFIG_NET_SCH_PRIO is not set
# CONFIG_NET_SCH_RED is not set
# CONFIG_NET_SCH_SFQ is not set
# CONFIG_NET_SCH_TEQL is not set
CONFIG_NET_SCH_TBF=m
# CONFIG_NET_SCH_GRED is not set
# CONFIG_NET_SCH_DSMARK is not set
CONFIG_NET_QOS=y
CONFIG_NET_ESTIMATOR=y
CONFIG_NET_CLS=y
# CONFIG_NET_CLS_TCINDEX is not set
# CONFIG_NET_CLS_ROUTE4 is not set
# CONFIG_NET_CLS_FW is not set
CONFIG_NET_CLS_U32=m
# CONFIG_NET_CLS_RSVP is not set
# CONFIG_NET_CLS_RSVP6 is not set
# CONFIG_NET_CLS_POLICE is not set
A halozati kartyakat ip cimek nelkul kell konfiguralni,
tehat a /etc/network/interfaces tartalma:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 0.0.0.0
network
netmask
iface eth1 inet static
address 0.0.0.0
network
netmask
Ez a csodas ifup/ifdown parosnak koszonhetoen hibauzenetet fog
eredmenyezni, viszont jol fog mukodni.
(Ha barmelyik halokartyanak IP cime van (ip aliasing is), akkor
az osszes nemnt winize dhcp kliense osszeomlik. Eleg bedugni a
hubba/switchbe.)
A /etc/network/options es a /etc/network/spoof-protect uresek.
A /etc/sysctl idevago tartalma:
net/ipv4/conf/all/rp_filter = 0
net/ipv4/conf/all/proxy_arp = 1
net/ipv4/ip_forward = 1
Ezutan kell egy rovid script, ami a routing es arp tablat beallitja:
/etc/rc.boot/proxyarp
#!/bin/bash
/usr/sbin/arp -i eth0 -f /etc/ethers.eth0 pub
/usr/sbin/arp -i eth1 -f /etc/ethers.eth1 pub
/sbin/route add -host 192.168.1.1 dev eth0
/sbin/route add -host 192.168.1.2 dev eth1
.
. A LAN osszes hostjat fel kell venni
.
/sbin/route add -host 192.168.1.15 dev eth1
/sbin/route add default gw 192.168.1.1
A /etc/ethers.eth0 tartalmazza a LAN hostjainak arp bejegyzeseit:
192.168.1.2 00:60:97:FF:41:BE
.
.
192.168.1.15 00:A0:24:4E:26:32
A /etc/ethers.eth1 tartalmazza a router arp bejegyzeset:
192.168.1.1 00:50:DA:4A:2F:15
Ha eddig keszen van, akkor a gep transzparensen atenged minden
forgalmat.
Ezutan kovetkezik a savszelesseg korlatozas. Ehhez a /etc/shaper
konyvtarban
kell ip cimenkent 2 filet letrehozni. Ezek nevei megkoteseket
tartalmaznak,
formatuma: cbq-xxx.yyy. Az xxx az azonosito es yyy neve.
A /etc/shaper/cbq-002.In tartalma:
DEVICE=eth1,10Mbit,1Mbit
RATE=64Kbit
WEIGTH=6Kbit
PRIO=5
RULE=192.168.1.2
A /etc/shaper/cbq-002.Out tartalma:
DEVICE=eth0,10Mbit,1Mbit
RATE=64Kbit
WEIGTH=6Kbit
PRIO=5
RULE=192.168.1.2,
Mivel a cbq csak kimeno forgalmat tud korlatozni, ezert van szukseg
2 queue-ra
minden IP cimhez. Ezzel kesz is, reboot, es mukodik (Nekem).
Ha nincs a disztribucioban shaper csomag, akkor a cbq megvalositasa
az iproute2
csomag parancsaival a dokumentacioban talalhato.
Remelem nem felejtettem ki semmit. A vonatkozo doksikat erdemes
elolvasni, sok
erdekes lehetoseg van meg.....
Halász Gábor