Routing - wszystko dobrze, a nie dzia
Routing - wszystko dobrze, a nie działa
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.
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.
Trochę OT ale jak kupisz coś z możliwością wgrania openwrt to masz tam:
http://tplink-forum.pl/faq-alternatywne ... /#msg21111
http://tplink-forum.pl/faq-alternatywne ... /#msg21111
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?
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?
- LordRuthwen
- Moderator
- Posty: 2341
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
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/
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:
w ogóle nie trafił do nat?
----------
jak daję
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.
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]
----------
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]
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
- marcin1982
- Moderator
- Posty: 1732
- Rejestracja: 05 maja 2011, 12:59
- Lokalizacja: Zagłębie Dąbrowskie
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