# UWAGA: wszystko tutaj jest czysto teoretyczne i nieprzetestowane ( niedlugo testne ). # UWAGA#2: to jest ten lepszy pomysl # # zalozenia: # + nie uzywamy MARKow do niczego innego ( P2P itp ) # + mamy ipset(8) oraz set w iptables # TODO: # + jakis rodzaj latwego wylaczania lacza z lb => condition? # mozna zrobic ipt_recent oraz iptree ( timeouty przydzielania do lacz ) # == dynamiczny load-balancing == po pewnym czasie braku uzywania lacza # przez IP zostanie one "przebalansowane" na inne lacze MAX_LACZ=3 # wagi lacz WAGA[1]=2 WAGA[2]=2 WAGA[3]=1 # suma wszystkich wag sumawag=0 for((x=1; x<=$MAX_LACZ; x++)); do ble=${WAGA[$x]} sumawag=$(($sumawag+$ble)) done # debug ipt="echo iptables" ip="echo ip" $ipt -t mangle -N lb $ipt -t mangle -A PREROUTING -i eth1.10 -s 10.0.0.0/8 -d ! 195.117.92.16/27 \ -m state --state NEW -j lb addlb="$ipt -t mangle -A lb" for((x=1; x<=$MAX_LACZ; x++)); do # sprawdzamy czy mamy juz IPeka w jakims setcie, jesli tak to wychodzimy $addlb -m set --set lacze$x src -j RETURN done # ..jesli nie mamy, to w zaleznosci od "countera" nowych polaczen # przydzielamy go do seta 1,2 lub 3 ( tutaj jest wlasciwa logika # load-balancingu ) c=0 for((x=1; x<=$MAX_LACZ; x++)); do for((y=1; y<=${WAGA[$x]}; y++)); do $addlb -m nth --counter 1 --every $sumawag --packet $c -j SET --add-set lacze$x src c=$(($c+1)) done done # a teraz dajemy marka w zaleznosci od seta/lacza ktorym potem skierujemy # go do odpowiedniej tablicy routingu == fizycznego lacza for((x=1; x<=$MAX_LACZ; x++)); do $ipt -t mangle -A PREROUTING -m set --set lacze$x src -j MARK $x $ip rule del fwmark $x table polpak$x > /dev/null 2>&1 $ip rule add fwmark $x table polpak$x done Jakub Wartak -vnull