Freesco, NND, CDN, EOS http://forum.freesco.pl/ |
|
2xDSL wdrozony load balancing+podzial lacza [rozwiazanie] http://forum.freesco.pl/viewtopic.php?f=22&t=11195 |
Strona 1 z 4 |
Autor: | tasiorek [ piątek, 10 lutego 2006, 18:10 ] |
Tytuł: | 2xDSL wdrozony load balancing+podzial lacza [rozwiazanie] |
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 ![]() #!/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 ![]() Na koniec dobra rada: Kup sobie jedno porzadne lacze, albo router cisco, ktory zrobi za Ciebie ten pieprz... load balancing. |
Autor: | tasiorek [ czwartek, 23 lutego 2006, 13:44 ] |
Tytuł: | |
Widze, ze zainsteresowanie tematem zniklo ![]() trzeba zmienic na taki: Zmiana potrzebna tylko do umozliwienia wrzucania pakietow do odpowiednich tabel routingu po znacznikach iptables (po ip dziala bez tego). W sumie nie wiem dlaczego tak, bo zamarkowane pakiety z tego co zauwazylem wracaja tym samym laczem co wyszly. Jak ktos wie, gdzie popelniam blad, to prosze o wyprowadzenie mnie z niego. EDIT: Obnizenia bezpieczenstwa nie trzeba sie obawiac, bo ochrone przed ip spoofingiem dla dsl zapewnia tepsa (przynajmniej tak twierdzi). |
Autor: | cycu [ piątek, 24 lutego 2006, 21:07 ] |
Tytuł: | |
Zrobiłem to na red hacie, nie działa - gubi powracajace pakiety (chyba) bo pingi nie wszystkiue wracają , jeszcze nie wiem dlaczego. poza tym po wywołaniu tego skryptu w ip route show nie mam zadnej domyślnej trasy , dziwne, ale jeszcze posiedzę na tym. |
Autor: | tasiorek [ sobota, 25 lutego 2006, 03:28 ] |
Tytuł: | |
cycu pisze: ip route show nie mam zadnej domyślnej trasy , dziwne, ale jeszcze posiedzę na tym.
A gdzies jest napisane, ze powinienes miec? Domyslna trase masz w tabelli 222. Zobacz sobie wynik polecenia: ip rule. Co do gubienia pakietow, to wkompilowales tego patcha o ktorym napisalem na poczatku? |
Autor: | Luc3k [ sobota, 25 lutego 2006, 12:38 ] |
Tytuł: | |
Ja bym sugerowal, aby topiki tego typu przyklejac. Nie trzeba bedzie w razie potrzeby szukac, a i ilosc zapytan o podobne rozwiazanie zapewnie zmaleje. |
Autor: | cycu [ sobota, 25 lutego 2006, 12:53 ] |
Tytuł: | |
Cytuj: Co do gubienia pakietow, to wkompilowales tego patcha o ktorym napisalem na poczatku?
Niestety wkompilowałem szukam od tygodnia jakiegoś dobrego sposobu na load balancing miedzy Polpakiem a TkExpress i jedyne co osiągnałem to właśnie gubienie pakietów testuje to na RH 2.4.22 - prawdziwy router stoi na debianie 2.6.8-2 (jadro ofkors) Zaczynam wątpic w mozliwość ustawienia tego bez współprcy ISP, w moim przypadku raczej o tym nie ma mowy |
Autor: | tasiorek [ sobota, 25 lutego 2006, 13:04 ] |
Tytuł: | |
To, ze bez wspolpracy z ISP nie uzyskasz takiej wydajnosci i beda problemy (pisalem o nich juz wielokrotnie) to jasne. IP: equal cost multipath wkompilowales? Masz iproute2? Wyskakuja jakies bledy przy uruchomieniu? Ciezko jest mi teraz sobie przypomniec co dokladnie jest do tego wymagane. Pewnie o polowie rzeczy nawet nie wiem ![]() EDIT: Zerknij tu: http://tasior.iglu.cz/nnd/projekt_niezawodne_lacze.doc . Na tym sie wzorowalem. |
Autor: | cycu [ sobota, 25 lutego 2006, 13:29 ] |
Tytuł: | |
własnie to jest najgorsze,ze nie ma błedów, iproute jest , equal w jądrze też jest , robiłem też na podstawie opisu z lukasz.bromirski.net i efekt jest podobny- a nawet gorszy (niby są dwie domyślne trasy, a chodzi wszystko jednym i gubi) Ps coś jeszcze trzeba zaznaczyc do kompilacji?Na stronie z łatką nie znalazłem infa o tym |
Autor: | tasiorek [ sobota, 25 lutego 2006, 13:59 ] |
Tytuł: | |
Nie moze isc jednym laczem, skoro w domyslnej trasie przyjelo Ci nexthop bez wyrzucenia bledu. Patch jest potrzebny po to, zeby pakiety wracaly tym laczem z ktorego wyszly. Poprostu zainstaluj NND, tam masz wszystko przygotowane pod obsluge 2 lacz. |
Autor: | cycu [ sobota, 25 lutego 2006, 14:57 ] |
Tytuł: | |
nie wchodzi w rachubę zainstalowanie NNd , na routerze jest cała masa innych programów (poczta, www, baza, dns, FTP vhcs, squid itd ) samo robienie backupów i przywracanie tego...wole sie jeszcze pomęczyć z tydzień nad load balancingiem |
Autor: | tasiorek [ sobota, 25 lutego 2006, 15:00 ] |
Tytuł: | |
No to raczej Ci nie pomoge. Masz 2 opracowania na ten temat. Milej zabawy. |
Autor: | cycu [ czwartek, 16 marca 2006, 17:49 ] |
Tytuł: | |
no i sprawa załatwiona, w zasadzie to banalna sprawa ten load balancing, teraz trzaskam to w 15 minut (nie licząc kompilacji jadra) , wszystko śmiga, aż sie router trzęsie, łącze made by tpsa w połaczeniu z symetrykiem PKP - wypas nie z tej ziemi. Siedziałem na neostradzie u kumpla ostatnio i muszę stwierdzić ze neostrada jest o klasę gorsza niż moja sieć. Linux to jednak potęga jest. PS. Problemy z gubieniem pakietów na routerku testowym wzięły się z karty sieciowej wyjętej z Macintosha - wygladała jak zwykły realtek , ale ale gubiła pakiety (mimo,ze bez load balancingu działała ok.) wymieniłem kartę i ruszyło... |
Autor: | Albercik [ piątek, 17 marca 2006, 23:21 ] |
Tytuł: | |
Jakie wpisy muszą być w rt_tables ? |
Autor: | tasiorek [ piątek, 17 marca 2006, 23:26 ] |
Tytuł: | |
# cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 222 222 202 202 201 201 0 unspec # |
Autor: | rychmar [ piątek, 31 marca 2006, 14:32 ] |
Tytuł: | |
Powiem tak,2 dni walki i LB zrobiony ale mam problem z duzymi pingami.Do tej pory miałem Niceshapera + IMQ i naprawde śmigało az miło.Natomiast z HTB jest chyba problem bo nie radzi sobie dobrze z p2p.Co polecacie??HTB z grupami załatwi sprawe?? |
Autor: | tasiorek [ piątek, 31 marca 2006, 16:48 ] |
Tytuł: | |
| | \/ Ewentualnie podzial po uslugach |
Autor: | rychmar [ wtorek, 4 kwietnia 2006, 02:45 ] |
Tytuł: | |
Kolejny problem, jedno z łaczy nie ma DNS-ów!! wszystko idzie po IP a drugie ma. Wyczytałem ze trzeba zainstalowac na NND0.2 stary net_conf i tak zrobiłem pacman -S net_conf.I nic to nie dało jest tak samo .Robie testy tak , restart serwera i wypinam jedno łącze no i net jest (gg swieci ale Tlen nie-czyli brak DNS-ów) ,restart serwera wpinam drugie łacze w odpowiednią karte i net jest dns-sy są!! Kurcze co ja robie źle?? |
Autor: | tasiorek [ wtorek, 4 kwietnia 2006, 07:12 ] |
Tytuł: | |
rychmar pisze: Kolejny problem, jedno z łaczy nie ma DNS-ów!!
![]() Co do Twojego problemu, to powiem Ci wiecej. Te DNSy ![]() Na powaznie to poprostu co drugie polaczenie kierowane jest na to lacze ktory wypiales i dlatego to nie dziala. Wyczysc cache routingu i uruchom gg i tlena w odwrotnej kolejnosci, to tlen bedzie dzialal, a gg nie. |
Autor: | przemek_nnd [ wtorek, 4 kwietnia 2006, 09:44 ] |
Tytuł: | |
Czy mógłbyś to zgłosic do mantisa - można by dodać to do net_conf'a - na pewno sie przyda pozdrawiam |
Autor: | tasiorek [ wtorek, 4 kwietnia 2006, 16:28 ] |
Tytuł: | |
przemek_nnd pisze: można by dodać to do net_conf'a
Nie. Sposobow na load balancing jest duzo (sam probowalem juz 4). Kombinacji 2 lacz jeszcze wiecej. Do tego dochodzi to, ze lacza moga miec rozne predkosci (niekoniecznie z takim samym stosunkiem up/down). Samo dodanie do net_confa niewiele daje. Trzebaby jeszcze napisac konfigurator kolejkowania na 2 lacza. Podsumowujac: roboty byloby duzo, load balancing dalej by kulal, a przydaloby sie to niewielkiej liczbie osob. Poza tym testowac tez nie bardzo jest gdzie. Dorob konfiguratory i przetestuj , to zobaczysz ile jest przy tym pracy i ilu osobom to sie przyda. Dodac do mantisa jest zawsze latwo. |
Strona 1 z 4 | Strefa czasowa UTC+2godz. |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |