UWAGA: to dokument czysto teoretyczny, zamierzam to dopiero przetestowac. UWAGA#2: nie jest skonczony, brak "odtwarzania" marka przez CONNMARK (--restore-mark) UWAGA#3: mam lepszy pomysl od tego tutaj zaprezentowanego Jak zrealizowac pseudo outgoing loadbalancing(tm ;) dla dosyc duzej grupy klientow(=adresow IP): Nie bede sie dlugo rozwodzil dlaczego tak a nie inaczej, cel jest prosty- wykorzystac potencjal np 2xInternetDSL, kazdy po 2mbit. W sumie 4mbit downloadu. Zalozenia: + mamy duzo komputerow ( np 250 ). + kazdy operator stosuje techniki antyspoofingowe ( nie wpuszcza innej adresacji na routerze brzegowym od tej ktora nam przyznal ). + jako bramka: linux 2.6.x + ipset + jest duzo polaczen TCP/UDP a nie mozemy puszczac ich po DSLach w stylu round-robin ( kazde kolejne polaczenie idzie innym laczem, niezaleznie od zrodla ) bo to "psuje" dzialanie pewnych stron bankowych, rwie sesje GG, sa problemy z FTP, IRC-DCC i nie wiadomo czy cos jeszcze... Pomysl polega na markowaniu calych polaczen w tablicy mangle w PREROUTING na podstawie set-ow , np: iptables -t mangle -A PREROUTING -i $LANIF -m state --state NEW -m set --set doISP1 src -j CONNMARK --set-mark 0x1 iptables -t mangle -A PREROUTING -i $LANIF -m state --state NEW -m set --set doISP2 src -j CONNMARK --set-mark 0x2 itd. Nastepnie skierowaniu zaznaczonych pakietow do odpowiednich tablic routingu (tutaj robione jest zalozenie ze sa juz one odpowiednio przygotowane, inny default route, przekopiowane trasy itp.): ip rule add fwmark 1 table isp1 ip rule add fwmark 2 table isp2 itd.. A potem na wyjsciu jeszcze musimy przepisac adres zrodlowy(NAT) dla klientow: iptables -t nat -A POSTROUTING -o $ISP1_IF -j SNAT --to-source $ISP1_IP iptables -t nat -A POSTROUTING -o $ISP2_IF -j SNAT --to-source $ISP2_IP itd.. I teraz przychodzi juz nam teraz tylko napisac prosty skrypt: #!/bin/bash ile_laczy=2 klasa="192.168.0" # zalozenie: 192.168.0.1 to my for((x=2;x<250;x++)); do let ble=1+$x%$ile_laczy # dodajemy ipeka do ktoregos setu ipset -A "doISP$ble" "$klasa.$x" done Rozwiazanie to powinno sie sprawdzac w miare w sieciach o duzej liczbie hostow. Przykladowy skrypt mozna rozbudowac znacznie bardziej. Ot chocby przepisac go w perlu suguerujac sie baza SQLowa do podjecia decyzji ktorym laczem powinno isc dane IP ( biorac rowniez pod uwage potrzebny transfer ). Moznaby tez napisac prostego daemona wykrywajacego poczatek transmisji od jakiegos IPeka w sieci i wtedy na podstawie biezacego stanu lacz skierowanie go odpowiednim laczem + usuwanie po jakims czasie braku transmisji ( np 12h ). Mozna spiac z PPPoE/PPTPd i zrobic wiele innych cudow ;) Jakub Wartak -vnull