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