Routing - wszystko dobrze, a nie dzia

Masz problemy z siecią bądź internetem? Zapytaj tu
klapuch
Posty: 9
Rejestracja: 06 stycznia 2016, 19:45

Routing - wszystko dobrze, a nie działa

Post autor: klapuch »

Witam wszystkich.

Proszę o podpowiedź, bo utknąłem i nie wiem dlaczego nie działa.

Mam serwer na starym kompie na debianie, który rozdziela dwa sygnały internet (eth0 i eth3) na 2 sieci wewnętrzne (eth1 i eth2).
Tabela rutingu jest zrobiona według opisu http://lartc.org/howto/lartc.rpdb.multiple-links.html , dzieli wykorzystanie łącza 1:3 :

ip route add default scope global nexthop via y.y.y.y dev eth0 weight 1 nexthop via x.x.x.x dev eth3 weight 3

Ze względu na duże użycie energii elektrycznej (2,2 kWh dziennie) chcę przenieść serwer na raspberry.

I tak:
1) jak daję tylko jedno łącze do internetu eth0 lub eth3 - wszystko działa idealnie
2) jak daję dwa łącza, wpisem routingu jak wyżej, to download działa ale upload ma prędkość 0,02-0,08 Mb/s zamiast 8 Mb/s.
3) jak daję dwa łącza to czasami stronę trzeba otwierać dwa razy, tzn. za pierwszym razem gdzieś gubi pakiet, a za drugim otwiera od razu.

sprawdzałem obciążenie systemu top i htop - w czasie testów download (speedtest.pl) obciążenie 1 rdzenia wynosi 95%, rdzenie 2-4 poniżej 10%. Dużo, ale działa.
W czasie upload obciążenie nie przekracza 10% na żadnym rdzeniu, a nie działa.
Sprawdzałem w różnych konfiguracjach, różne tabele routingu, kasowałem wpisy iptables FORWARD, INPUT, OUTPUT + all ACCEPT, ciągle jest to samo. Podejrzewam, że komputerek może nie wyrabiać, ale to nie CPU i nie MEM - co mogę jeszcze sprawdzić oprócz obciążenia systemu htop'em?
Oczywiście mogę powrzucać konfiguracje jakie potrzeba, ale trochę tego jest.
Ma ktoś jakiś pomysł? Bo siedzę na tym chyba z miesiąc.
Awatar użytkownika
dedito
Moderator
Posty: 3518
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Trochę OT ale jak kupisz coś z możliwością wgrania openwrt to masz tam:
http://tplink-forum.pl/faq-alternatywne ... /#msg21111
klapuch
Posty: 9
Rejestracja: 06 stycznia 2016, 19:45

Post autor: klapuch »

sprytne, ale chcę Debiana, bo mam tam jeszcze drukarkę PDF i inne ciekawe rzeczy :)
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Zrób test - najpierw puść wszystko przez jedno łącze i sprawdź wynik, następnie przed drugie łącze. Jeśli za każdym razem będzie w porządku, to prawdopodobnie coś nie tak z konfiguracją.
Jak zmieniasz trasy to pamiętasz o wyczyszczeniu cache? Sprawdzałeś też, jak idą pakiety tcpdump'em - czy wychodząc wracają i tym samym łączem?
klapuch
Posty: 9
Rejestracja: 06 stycznia 2016, 19:45

Post autor: klapuch »

Przez jedno łącze osobno i drugie osobno wszystko jest idealnie.
Nie sprawdzałem tcpdumpem - nie wiem jak mogę sprawdzić przebieg pakietów, chociaż programu używałem. Możesz podpowiedzieć?

edycja - mam na myśli dokładną ścieżkę pakietu przez router, jeśli to w ogóle możliwe.
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2305
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Post autor: LordRuthwen »

klapuch pisze:sprytne, ale chcę Debiana, bo mam tam jeszcze drukarkę PDF i inne ciekawe rzeczy :)
Inne ciekawe rzeczy też na openwrt zainstalujesz :)
A mniej to prądu żre niż piecet. Polecam ci TPLinka 1043ND, od razu masz gigowego switcha :)
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Z jakiej wersji kernela korzystałeś a jaką masz na malince? Może tu jest pies pogrzebany: http://blog.outlaw.one.pl/2011/03/01/ip ... el-2-6-30/
klapuch
Posty: 9
Rejestracja: 06 stycznia 2016, 19:45

Post autor: klapuch »

kernel 3.18.11-v7+ i niestety to nie to. Ustawiałem filtry od 0 do 2 - bez zmian.

Zrobiłem 2 x ping i ustawiłem na iptables trace
jeden ping przeszedł normalnie:

Kod: Zaznacz cały

Jan  7 14:07:21 pasionek kernel: [ 4491.877945] TRACE: raw:PREROUTING :p olicy:2 IN=eth1 OUT= MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=21896 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=50
[B]- TRACE[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.878057] TRACE: mangle:PREROUTING :p olicy:7 IN=eth1 OUT= MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=21896 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=50
[B]- ACCEPT[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.878130] TRACE: nat:PREROUTING :p olicy:10 IN=eth1 OUT= MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=21896 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=50
[B]- ACCEPT[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.878236] TRACE: mangle:FORWARD:rule:3 IN=eth1 OUT=eth3 MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=21896 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=50
[B]- 3     236K   33M MARK       all  --  *      *       192.168.0.200        0.0.0.0/0            MARK set 0xc8[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.878326] TRACE: mangle:FORWARD :p olicy:10 IN=eth1 OUT=eth3 MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=21896 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=50 MARK=0xc8
[B]- ACCEPT[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.878404] TRACE: filter:FORWARD:rule:25 IN=eth1 OUT=eth3 MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=21896 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=50 MARK=0xc8
[B]- 25       2   120 ACCEPT     icmp --  eth1   eth3    0.0.0.0/0            0.0.0.0/0[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.878457] TRACE: mangle:POSTROUTING :p olicy:1 IN= OUT=eth3 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=21896 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=50 MARK=0xc8
[B]- ACCEPT[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.878505] TRACE: nat:POSTROUTING:rule:2 IN= OUT=eth3 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=21896 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=50 MARK=0xc8
[B]- 2     1926  108K SNAT       all  --  *      eth3    192.168.0.0/22      !192.168.0.0/22       to:89.25.153.60[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.893601] TRACE: raw:PREROUTING :p olicy:2 IN=eth3 OUT= MAC=:02 SRC=213.180.141.140 DST=89.25.153.60 LEN=60 TOS=0x00 PREC=0x00 TTL=56 ID=3784 PROTO=ICMP TYPE=0 CODE=0 ID=1 SEQ=50
[B]- TRACE[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.893694] TRACE: mangle:PREROUTING :p olicy:7 IN=eth3 OUT= MAC=:02 SRC=213.180.141.140 DST=89.25.153.60 LEN=60 TOS=0x00 PREC=0x00 TTL=56 ID=3784 PROTO=ICMP TYPE=0 CODE=0 ID=1 SEQ=50
[B]- ACCEPT[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.893807] TRACE: mangle:FORWARD :p olicy:10 IN=eth3 OUT=eth1 MAC=:02 SRC=213.180.141.140 DST=192.168.0.200 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=3784 PROTO=ICMP TYPE=0 CODE=0 ID=1 SEQ=50
[B]- ACCEPT[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.893865] TRACE: filter:FORWARD:rule:4 IN=eth3 OUT=eth1 MAC=:02 SRC=213.180.141.140 DST=192.168.0.200 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=3784 PROTO=ICMP TYPE=0 CODE=0 ID=1 SEQ=50
[B]- 4     420K  599M ACCEPT     all  --  eth3   *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED[/B]
Jan  7 14:07:21 pasionek kernel: [ 4491.893943] TRACE: mangle:POSTROUTING :p olicy:1 IN= OUT=eth1 SRC=213.180.141.140 DST=192.168.0.200 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=3784 PROTO=ICMP TYPE=0 CODE=0 ID=1 SEQ=50
[B]- ACCEPT[/B]


a drugi się zgubił:

Jan  7 14:07:33 pasionek kernel: [ 4503.220299] TRACE: raw:PREROUTING :p olicy:2 IN=eth1 OUT= MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=22018 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=51
[B]- TRACE[/B]
Jan  7 14:07:33 pasionek kernel: [ 4503.220402] TRACE: mangle:PREROUTING :p olicy:7 IN=eth1 OUT= MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=22018 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=51
[B]- ACCEPT[/B]
Jan  7 14:07:33 pasionek kernel: [ 4503.220486] TRACE: mangle:FORWARD:rule:3 IN=eth1 OUT=eth0 MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=22018 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=51
[B]- 3     236K   33M MARK       all  --  *      *       192.168.0.200        0.0.0.0/0            MARK set 0xc8[/B]
Jan  7 14:07:33 pasionek kernel: [ 4503.220546] TRACE: mangle:FORWARD :p olicy:10 IN=eth1 OUT=eth0 MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=22018 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=51 MARK=0xc8
[B]- ACCEPT[/B]
Jan  7 14:07:33 pasionek kernel: [ 4503.220608] TRACE: filter:FORWARD:rule:14 IN=eth1 OUT=eth0 MAC=:00 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=22018 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=51 MARK=0xc8
[B]- 14   43825 3222K ACCEPT     all  --  *      eth0    0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED[/B]
Jan  7 14:07:33 pasionek kernel: [ 4503.220654] TRACE: mangle:POSTROUTING :p olicy:1 IN= OUT=eth0 SRC=192.168.0.200 DST=213.180.141.140 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=22018 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=51 MARK=0xc8
[B]- ACCEPT[/B]
w ogóle nie trafił do nat?

----------

jak daję

Kod: Zaznacz cały

ip route add default scope global nexthop via 10.0.0.138 dev eth0 [B]weight 1[/B] nexthop via y.y.y.y. dev eth3 [B]weight 50[/B]
to jakoś działa, tzn. upload ma 50% przepustowości. Tak samo 50:1. Ustawienie 1:100 już niczego więcej nie zmienia. Najgorzej jest jak ustawiam 1:1.

Kod: Zaznacz cały

[B]ip route show[/B]
default
        nexthop via 10.0.0.138  dev eth0 weight 1     
        nexthop via 89.25.153.1  dev eth3 weight 1   
10.0.0.0/24 dev eth0  scope link  src 10.0.0.1
89.25.153.0/26 dev eth3  scope link  src 89.25.153.60
192.168.0.0/24 dev eth1  scope link  src 192.168.0.1
192.168.1.0/24 dev eth2  scope link  src 192.168.1.1

[B]ip route show table T1[/B]
default via 10.0.0.138 dev eth0
10.0.0.0/24 dev eth0  scope link  src 10.0.0.1

[B]ip route show table T2[/B]
default via 89.25.153.1 dev eth3
89.25.153.0/26 dev eth3  scope link  src 89.25.153.60

[B]ip rule show[/B]
0:      from all lookup local
32762:  from all fwmark 0x2 lookup T2
32763:  from 89.25.153.1 lookup T2
32764:  from all fwmark 0x1 lookup T1
32765:  from 10.0.0.138 lookup T1
32766:  from all lookup main
32767:  from all lookup default
Awatar użytkownika
marcin1982
Moderator
Posty: 1730
Rejestracja: 05 maja 2011, 12:59
Lokalizacja: Zagłębie Dąbrowskie

Post autor: marcin1982 »

Proszę nie pisać postu pod postem. Do prezentacji ważnych danych systemowych, wyników poleceń z konsoli, plików konfiguracyjnych używaj tagów CODE
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Mój skrypt, który ja używałem i działał LB poprawnie:

Kod: Zaznacz cały

#!/bin/sh
#set -x

IP=/usr/sbin/ip

# WAN1
IF1=eth1
IP1=aa.bb.cc.dd
GW1=aa.bb.cc.dc
NE1=aa.bb.cc.db/29

# WAN2
IF2=eth2
IP2=xx.yy.zz.ac
GW2=xx.yy.zz.ab
NE2=xx.yy.zz.aa/29

#$IPT -t nat -A POSTROUTING -o eth1 -s 10.0.0.0/24 -j SNAT --to $IP1
#$IPT -t nat -A POSTROUTING -o eth2 -s 10.0.0.0/24 -j SNAT --to $IP2

function stop() {
# czyszczenie regol routingu
    $IP route flush cache
#    $IP rule flush all
    $IP route del default 2> /dev/null

    $IP rule del from $IP1 table T1 2> /dev/null
    $IP route del default via $GW1 dev $IF1 src $IP1 proto static table T1 2> /dev/null
    $IP route del prohibit default table T1 metric 1 proto static 2> /dev/null

    $IP rule del from $IP2 table T2 2> /dev/null
    $IP route del default via $GW2 dev $IF2 src $IP2 proto static table T2 2> /dev/null
    $IP route del prohibit default table T2 metric 1 proto static 2> /dev/null
}

function default() {
    $IP route add default via $GW1
}

function start() {
# ustawianie regol routingu
    $IP rule add from $IP1 table T1
    #$IP route add $NE1 dev $IF1 src $IP1 table T1
    #$IP route add default via $IP1 table T1
    $IP route add default via $GW1 dev $IF1 src $IP1 proto static table T1
    $IP route append prohibit default table T1 metric 1 proto static

    $IP rule add from $IP2 table T2
    #$IP route add $NE2 dev $IF2 src $IP2 table T2
    #$IP route add default via $IP2 table T2
    $IP route add default via $GW2 dev $IF2 src $IP2 proto static table T2
    $IP route append prohibit default table T2 metric 1 proto static

    $IP route add default scope global \
                nexthop via $GW1 dev $IF1 weight 1 \
                nexthop via $GW2 dev $IF2 weight 1

    ##$IP route add $NE1 dev $IF1 src $IP1
    ##$IP route add $NE2 dev $IF2 src $IP2

    $IP route flush cache
}


case "$1" in
    'stop')
        echo "Czyszczenie konfiguracji dla LoadBalancing'u..."
        stop
        echo " ...ukonczone."
        ;;
    'start')
        echo "Ustawianie regol dla LoadBalancing'u..."
        stop
        start
        echo " ...ukonczone."
        ;;
    'default')
        echo "Ustawianie regol dla LoadBalancing'u..."
        stop
        echo " ukonczone."
        echo "Ustawianie domyslnego routingu przez $GW1..."
        default
        echo " OK."
        ;;
    *)
        echo "Uzycie: nexthop stop | start"
        ;;
esac

ODPOWIEDZ