Upewniamy sie, ze kernel ma wkompilowane odpowiednie opcje (IP: advanced router i IP: equal cost multipath, nia zaszkodzi wkompilowac wszystko w tym ciagu z IP na poczatku 

) i nalozana ta latke: 
http://www.ssi.bg/~ja/routes-2.4.29-9.diff . W NND to sa kernele od 2.4.32-5nnd w gore. Pozniej dodajemy odpowiednie moduly do sieciowek  w /etc/rc.conf (o ile ich juz tam nie ma) i usuwamy lan i internet z daemons w tym samym pliku. Podnoszenie sieciowek i zakladanie routingu odbywa sie za pomoca skryptu autorstwa zespolu z Politechniki Gdanskiej pod kierownictwem mgr inż. Wojciecha Gumińskiego (zgubilem adres skad sciagnalem projekt, ale zainteresowanym moge go podeslac):
#!/bin/sh -x
#
IFI=eth2            #interfejs lokalny
IPI=192.168.1.1         #adres IP interfejsu lokalnego
NWI=192.168.1.0         #adres sieci lokalnej
NMI=24            #maska sieci lokalnej
IFE1=eth0            #interfejs 1 zewnetrzny
IFE2=eth1            #interfejs 2 zewnetrzny
IPE1=80.80.80.82      #adres IP interfejsu 1 zewnetrznego
IPE2=90.90.90.90      #adres IP interfejsu 2 zewnetrznego
NWE1=80.80.80.80      #adres sieci 1 zewnetrznej
NWE2=90.90.90.88      #adres sieci 2 zewnetrznej
NME1=29            #maska sieci 1 zewnetrznej
NME2=29            #maska sieci 2 zewnetrznej
BRD1=80.80.80.87      #adres rozgloszeniowy sieci 1 zewnetrznej
BRD2=90.90.90.95      #adres rozgloszeniowy sieci 2 zewnetrznej
GWE1=80.80.80.81      #brama dla interfejsu 1 zewnetrznego
GWE2=90.90.90.89      #brama dla interfejsu 2 zewnetrznego
#ustawienia interfejsow lokalnego i LAN
ip link set lo up
ip addr flush dev lo
ip addr add 127.0.0.1/8 brd + dev lo
ip link set $IFI up
ip addr flush dev $IFI
ip addr add $IPI/$NMI brd + dev $IFI
#regula z priorytetem 50
ip rule add prio 50 table main
ip route del default table main
#ustawienia interfejsow zewnetrznych
ip link set $IFE1 up
ip addr flush dev $IFE1
ip addr add $IPE1/$NME1 brd $BRD1 dev $IFE1
ip link set $IFE2 up
ip addr flush dev $IFE2
ip addr add $IPE2/$NME2 brd $BRD2 dev $IFE2
#regula z priorytetem 222
ip route del default table 222
ip rule add prio 222 table 222
ip route add default table 222 proto static nexthop via $GWE1 dev $IFE1 nexthop via $GWE2 dev $IFE2
#regula z priorytetem 201
ip rule del from $NWE1/$NME1 table 201
ip rule add prio 201 from $NWE1/$NME1 table 201
ip route add default via $GWE1 dev $IFE1 src $IPE1 proto static table 201
ip route append prohibit default table 201 metric 1 proto static
#regula z priorytetem 202
ip rule del from $NWE2/$NME2 table 202
ip rule add prio 202 from $NWE2/$NME2 table 202
ip route add default via $GWE2 dev $IFE2 src $IPE2 proto static table 202
ip route append prohibit default table 202 metric 1 proto static
#wyczyszczenie pamieci cache rutingu 
ip route flush cache
Najlepiej umiescic ten skrypt w /etc/rc.d/, nadac mu prawa do wykonania i dopisac do demonow w /etc/rc.conf w miejsce, gdzie byl lan i internet.
Zmodyfikowany firewall Zciecha (nie pytajcie o inne, bo ich nigdy nie uzywalem): UWAGA: kilka zmiennych jest skopiowanych z poprzedniego skryptu i trzeba je tutaj takze zmienic na wlasne!
#!/bin/sh
# firewall 0.1-2004.12.27 Zciech (poprawka w lini 113 i 49 - macieks)
#modyfikacja do obslugi 2 lacz
# W podstawowej wersji caly ruch z inerfejsow wewnetrznych jest dopuszczony i maskowany
# ruch z internetu zabroniony poza pakietami "powracajacymi" juz nawiazanych polaczen
# i polaczen na strone www (port 80 tcp) oraz pingi 1/s
. /etc/rc.conf 
. /etc/rc.d/functions
NWI=192.168.1.0
NMI=24
IFE1=eth0
IFE2=eth1
IPE1=80.80.80.82
IPE2=90.90.90.90
i=`which iptables`
case $1 in
start)
    if [ -e /proc/sys/net/ipv4/tcp_ecn ];then
   echo 0 > /proc/sys/net/ipv4/tcp_ecn
    fi
    echo 1 > /proc/sys/net/ipv4/ip_forward
    if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
   echo 1 > /proc/sys/net/ipv4/tcp_syncookies
    fi
    for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
   echo  1 > $f
    done
    $i -F
    $i -F -t nat
    $i -P INPUT DROP
    $i -P FORWARD DROP
    $i -P OUTPUT ACCEPT
    # interfejs lo
    $i -A INPUT -i lo -j ACCEPT
    $i -A FORWARD -o lo -j ACCEPT
    # Blaster i Saser
    $i -A INPUT -p tcp --dst 0/0 -m multiport --dport 135,445 -j DROP
    $i -A FORWARD -p tcp --dst 0/0 -m multiport --dport 135,445 -j DROP
    # Odrzucamy z komunikatem ICMP Port Unreachable polaczenia
    # na IDENT oraz SOCKS (czesto sprawdzane przez serwery IRC)
    # Jesli udostepniasz te uslugi zaplotkuj (#) odpowiedne linie
    # zaplotkuj jesli nie chcesz udostepniac serwisu ident do inetu
    if [ "$IDENT" = "1" ]; then
   $i -A INPUT -p tcp -i $IFE1 --dport 113 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE2 --dport 113 -j ACCEPT
    else
        $i -A INPUT -p tcp --dst 0/0 --dport 113  -j REJECT --reject-with icmp-port-unreachable
    fi
    $i -A INPUT -p tcp --dst 0/0 --dport 1080 -j REJECT --reject-with icmp-port-unreachable
    # zaplotkuj jesli nie chcesz udostepniac serwisu  http do inetu
    if [ "$WWW" = "1" ]; then
   $i -A INPUT -p tcp -i $IFE1 --dport 80 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE2 --dport 80 -j ACCEPT
    fi
    # zaplotkuj jesli nie chcesz udostepniac serwisu  https do inetu
    if [ "$HTTPS" = "1" ]; then
   $i -A INPUT -p tcp -i $IFE1 --dport 443 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE2 --dport 443 -j ACCEPT
    fi
    # zaplotkuj jesli nie chcesz udostepniac serwisu  ftp do inetu
    if [ "$FTP" = "1" ]; then
   $i -A INPUT -p tcp -i $IFE1 --dport 20 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE1 --dport 21 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE2 --dport 20 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE2 --dport 21 -j ACCEPT
    fi
    # zaplotkuj jesli nie chcesz udostepniac poczty do inetu
    if [ "$MAIL" = "1" ]; then
   $i -A INPUT -p tcp -i $IFE1 --dport 110 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE1 --dport 25 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE2 --dport 110 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE2 --dport 25 -j ACCEPT
    fi
    # zaplotkuj jesli nie chcesz udostepniac SSH do inetu
    if [ "$SSH" = "1" ]; then
        PORT_SSH=`grep ^Port /etc/ssh/sshd_config| cut -f 2 -d " "`
   [ -z $PORT_SSH ] && PORT_SSH=22
   $i -A INPUT -p tcp -i $IFE1 --dport $PORT_SSH -j ACCEPT
   $i -A INPUT -p tcp -i $IFE2 --dport $PORT_SSH -j ACCEPT
    fi
    # zaplotkuj jesli nie chcesz udostepniac serwera IMAP do inetu
    if [ "$IMAP" = "1" ]; then
   $i -A INPUT -p tcp -i $IFE1 --dport 143 -j ACCEPT
   $i -A INPUT -p udp -i $IFE1 --dport 143 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE2 --dport 143 -j ACCEPT
   $i -A INPUT -p udp -i $IFE2 --dport 143 -j ACCEPT
    fi
    # zaplotkuj jesli nie chcesz udostepniac serwera IMAPS do inetu
    if [ "$IMAPS" = "1" ]; then
   $i -A INPUT -p tcp -i $IFE1 --dport 993 -j ACCEPT
   $i -A INPUT -p udp -i $IFE1 --dport 993 -j ACCEPT
   $i -A INPUT -p tcp -i $IFE2 --dport 993 -j ACCEPT
   $i -A INPUT -p udp -i $IFE2 --dport 993 -j ACCEPT
    fi
    # pingi pozwalamy
    $i -A INPUT -p icmp --icmp-type echo-request -j ACCEPT -m limit --limit 1/sec
#przyklad przekierowania portow na emule
#przekierowanie dla tasiora
#$i -I FORWARD -p tcp -d 192.168.1.45 --dport 4662 -j ACCEPT
#$i -t nat -A PREROUTING -p tcp -i $IFE1 --dport 4662 -j DNAT --to 192.168.1.45
#$i -t nat -A PREROUTING -p tcp -i $IFE2 --dport 4662 -j DNAT --to 192.168.1.45
#$i -I FORWARD -p udp -d 192.168.1.45 --dport 4672 -j ACCEPT
#$i -t nat -A PREROUTING -p udp -i $IFE1 --dport 4672 -j DNAT --to 192.168.1.45
#$i -t nat -A PREROUTING -p udp -i $IFE2 --dport 4672 -j DNAT --to 192.168.1.45
#malo zrozumiale dla mnie reguly ze skryptu lb
$i -X keep_state -t nat
$i -X keep_state -t filter
#regula i lancuch podtrzymania polaczen
#tabela filter   
$i -t filter -N keep_state
$i -t filter -A keep_state -m state --state RELATED,ESTABLISHED -j ACCEPT
$i -t filter -A keep_state -j RETURN
#regula i lancuch podtrzymania polaczen
#tabela nat
$i -t nat -N keep_state
$i -t nat -A keep_state -m state --state RELATED,ESTABLISHED -j ACCEPT
$i -t nat -A keep_state -j RETURN
#przekierowania do lancucha podtrzymania pol.
#polaczen w pozostalych tabelach
$i -t nat -A PREROUTING -j keep_state
$i -t nat -A POSTROUTING -j keep_state
$i -t nat -A OUTPUT -j keep_state
$i -t filter -A INPUT -j keep_state
$i -t filter -A FORWARD -j keep_state
$i -t filter -A OUTPUT -j keep_state
    # Wszystkie polaczenia z innych interfejsow niz interfejs do internetu pozwalamy 
    $i -A INPUT -i eth2  -j ACCEPT
    $i -A FORWARD -i eth2 -j ACCEPT
    # maskarada zostala zastapiona SNATem
  $i -t nat -A POSTROUTING -o $IFE1 -s $NWI/$NMI -j SNAT --to $IPE1
  $i -t nat -A POSTROUTING -o $IFE2 -s $NWI/$NMI -j SNAT --to $IPE2
    # Zezwalamy na wszystko co odbywa sie w ramach juz dozwolonych polaczen
    $i -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
    $i -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
    wynik
    ;;
stop)
    $i -F INPUT
    $i -F FORWARD
    $i -F OUTPUT
    $i -P INPUT DROP
    $i -P FORWARD DROP
    $i -P OUTPUT DROP
    echo 0 > /proc/sys/net/ipv4/ip_forward
    wynik
    ;;
esac
 
Dobrym pomyslem jest dodanie /etc/iptables/firewall do sekcji NoUpgrade w /etc/pacman.conf , zeby nam wszystkiego nie wcielo przy aktualizacji iptables.
W w/w projeckie autorzy proponuja zatrudnic niceshapera do podzialu lacza. Wedlug nich wystarczy odwrocic mu upload z downloadem i wszystko bedzie ladnie dzialalo. Jako, ze nie pokazali wynikow swojej pracy, a mi sie to nie udalo, to stosuje htb Zciecha (
http://ww1.devel-nnd.brb.pl/nnd/repo.te ... pkg.tar.gz).
Konfigurujemy htb na interfejsach eth0 (wychodzacy) i eth2 (przychodzacy). W DSL download nie jest tak wazny, wiec mozna sobie pozwolic na jedna kolejke, wiec jako predkosci lacza podajemy 95% sumy obydwoch lacz dla downloadu (w przypadku DSLi 4 mbit bedzie to ok. 7800 kbit) i 100% downloadu z JEDNEGO lacza (w tym samym przypadku 512 kbit). Reszta konfiguracji pozostaje taka sama jak w przypadku jednego lacza. Teraz najmilsza czesc: edytujemy /usr/sbin/rchtb, kopiujemy czesc odpowiadajaca za upload (zaczyna sie od komentarza INTERFEJS ETH0, a konczy jedna linia z regula kolejki po ostatnim uzytkowniku) i zmieniamy w tej czesci kazde eth0 na eth1 i numer klasy 2:costam na 3:costam. Jest z tym troche zabawy, wiec jak ktos ma czas, checi i umiejetnosci, to moze przerobic konfigurator htb.
Kilka uwag i juz koncze:
Jak ktos ma w sieci nalogowych graczy w csa, to pewnie beda narzekali, ze trzeba ciagle wpisywac haslo do steama. Rozwiazanie:
/usr/sbin/iptables -t nat -I POSTROUTING -s 
ip gracza -d 207.173.177.0/24 -j SNAT --to 
ip przypisane eth0
/usr/sbin/iptables -t nat -I POSTROUTING -s 
ip gracza -p udp --dport 20000:65000 -j SNAT --to 
ip przypisane eth0
Wiem, ze ten zakres portow to lekka przesada, ale serwery csa dzialaja na roznych dziwnych portach i nie zauwazylem jeszcze, zeby powodowal jakies problemy (np. p2p dzialaja na nizszych).
Jak z jakiegos powodu chcesz, zeby uzytkownik korzystal z jednego lacza:
ip rule add form 
ip przypisane do eth1 lub eth2 table 201 (lub 202, jak przekierowujesz na 2 lacze)
ip rule add from 
ip uzytkownika table 201 (202 dla drugiego lacza)
Po jakichkolwiek zmianach w tablicy routingu trzeba ja odswiezyc, wiec:
ip route flush cache
Jak bedziesz mial problemy z dzialaniem dhcp, upewnij sie, ze w /etc/rc.conf zmienna DHCPIF=eth2
Uff, to juz koniec. Mi by sie nie chcialo tyle czytac 

 Wszelkie uwagi, wytkniecia bledow, najlepiej z poprawa mile widziane.
Na koniec dobra rada: Kup sobie jedno porzadne lacze, albo router cisco, ktory zrobi za Ciebie ten pieprz... load balancing.