iptables, iproute2 - dwa

Masz problemy z siecią bądź internetem? Zapytaj tu
idrys
Posty: 3
Rejestracja: 19 czerwca 2009, 13:45

iptables, iproute2 - dwa łącza i przekierowanie portów

Post autor: idrys »

Witam.
Od dłuższego czasu szukam w internecie i pytam znajomych informatyków ale dotychczas nie udało mi się rozwiązać następującego problemu.

Do mojej sieci doprowadzono dwa łącz (a nawet trzy ale wkrótce z jednego będziemy rezygnowali). Chciałem więc obsłużyć oba łącza za pomocą iproute2, problem w tym, że prawdopodobnie nie działa obsługa tablic w iproute2.

Z obserwacji wynika, że sygnał wchodzi i dochodzi no maszyny wewnątrz sieci lokalnej ale wychodzi losowo raz jednym raz drugim łączem. Natomiast ja potrzebuję tak skonfigurować routing aby sygnał wchodził np. eth1 i tym samym interfejsem wychodził.

Inny problem to taki, że gdy chce połączyć się prze VNC to mogę się podpiąć tylko przez jedno łącze na raz (np eth2, eth3 już mnie nie wpuszcza ), a po pewnym czasie jest na odwrót (tzn eth3 mogę się połączyć, a eth2 mnie nie wpuszcza).

Czy do pełnej funkcjonalności iproute2 wymagana jest instalacja jakiś dodatkowych modułów?
Gdzie mam szukać? Wszystko co dotychczas znajdowałem to konfiguracja podobna do mojej.

Poniżej podaję moją konfigurację.

Oto część mojego iptables:

Kod: Zaznacz cały

iptables -I FORWARD -p tcp -d 10.0.0.56 --dport 5900 -j ACCEPT
iptables -I FORWARD -p udp -d 10.0.0.56 --dport 5900 -j ACCEPT

iptables -t nat -A PREROUTING --protocol tcp --destination-port 5900 -j DNAT --to-destination 10.0.0.56:5900
iptables -t nat -A PREROUTING --protocol udp --destination-port 5900 -j DNAT --to-destination 10.0.0.56:5900

iptables -t nat -A POSTROUTING -o eth2 -d 0/0 -j SNAT --to $IP1
iptables -t nat -A POSTROUTING -o eth3 -d 0/0 -j SNAT --to $IP2 
oraz iproute2:

Kod: Zaznacz cały

IF0="eth0"	#interfejs lokalny
IF1="eth1"	#interfejs zewnętrzny X OBECNIE ODPIÊTY!!
IF2="eth2"	#interfejs zewnętrzny Y
IF3="eth3"	#interfejs zewnętrzny Z

IP0="10.0.0.31"			#Adres sieci lokalnej
IP1="XXX.XXX.XXX.XXX" 	#Adres sieci zewnętrznej X
IP2="YYY.YYY.YYY.YYY" 		#Adres sieci zewnętrznej Y
IP3="ZZZ.ZZZ.ZZZ.ZZZ"		#Adres sieci zewnętrznej Z


P1="XXX.XXX.XXX.XXA" 	#Brama[adres routera] dla X
P2="YYY.YYY.YYY.YYB" 		#Brama[adres routera] dla Y
P3="ZZZ.ZZZ.ZZZ.ZZC"		#Brama[adres routera] dla Z

P0_NET="10.0.0.0/25"		#Adres sieci lokalnej
P1_NET="XXX.XXX.XXX.XXE/30" #Adres sieci zewnętrznej X
P2_NET="YYY.YYY.YYY.YYF/30" 	#Adres sieci zewnętrznej Y
P3_NET="ZZZ.ZZZ.ZZZ.ZZG/29"	#Adres sieci zewnętrznej Z

echo "Etap 1"
ip route replace $P1_NET dev $IF1 src $IP1 table T1
ip route replace default via $P1 table T1
ip route replace $P2_NET dev $IF2 src $IP2 table T2
ip route replace default via $P2 table T2
ip route replace $P3_NET dev $IF3 src $IP3 table T3
ip route replace default via $P3 table T3

echo "Etap 2"
ip route replace $P1_NET dev $IF1 src $IP1
ip route replace $P2_NET dev $IF2 src $IP2
ip route replace $P3_NET dev $IF3 src $IP3

ip route replace default via $P3

echo "Etap 3"
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
ip rule add from $IP3 table T3

#load balancing, parametrem weight mozemy ustawic ktore z laczy ma byc bardziej obciazone.

echo "Etap 4"
ip route replace default scope global nexthop via $P2 dev $IF2 weight 1 nexthop via $P3 dev $IF3 weight 1

#routing poloczen lokalnych serwera
echo "Etap 5"
ip route replace $P0_NET dev $IF0 table T1
ip route replace $P2_NET dev $IF2 table T1
ip route replace 127.0.0.0/8 dev lo table T1

ip route replace $P0_NET dev $IF0 table T2
ip route replace $P1_NET dev $IF1 table T2
ip route replace 127.0.0.0/8 dev lo table T2

ip route replace $P0_NET dev $IF0 table T3
ip route replace $P1_NET dev $IF1 table T3
ip route replace 127.0.0.0/8 dev lo table T3

#Odswiezanie tablicy routingu
ip route flush cache
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done 
Będę wdzięczny za jakąkolwiek podpowiedź, pomoc.
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Jesli robisz nexthopa na tablicy main to sytuacja jaka opisales jest jak najbardziej poprawna.
Na tablicy main ustaw po prostu domyslna brame.
Dzialac musi :)
idrys
Posty: 3
Rejestracja: 19 czerwca 2009, 13:45

Post autor: idrys »

No wydaje mi się, że już to mam:

Kod: Zaznacz cały

echo "Etap 4"
ip route replace default scope global nexthop via $P2 dev $IF2 weight 1 nexthop via $P3 dev $IF3 weight 1 
A mimo to mam z tym problem?
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Masz NEXTHOP-a więc raz pakiet idzie jedną bramą raz drugą.
Wyłącz go i ustaw po prostu domyślnie, bez żadnych nexthopów.
Resztę masz skonfigurowaną.

Edit.
Przeczytaj raz jeszcze, dokladnie, mojego poprzedniego posta ze zrozumieniem.
idrys
Posty: 3
Rejestracja: 19 czerwca 2009, 13:45

Post autor: idrys »

Teraz zrozumiałem i poprawiłem jednak efekt nadal mam fatalny, bo po wpisaniu:

Kod: Zaznacz cały

ip route replace default scope global via YYY.YYY.YYY.YYY dev eth2 scope global via XXX.XXX.XXX dev eth3
otrzymuję coś takiego:

Kod: Zaznacz cały

# ip route show
YYY.YYY.YYY.YYYb30 dev eth2  scope link  src YYY.YYY.YYY.YYY
XXX.XXX.XXc/29 dev eth3  scope link  src XXX.XXX.XXX
10.0.0.0/25 dev eth0  proto kernel  scope link  src 10.0.0.31
default via XXX.XXX.XXX dev eth3
Więc jestem w punkcie wyjścia, bo i tak nie jestem wstanie połączyć się z interfejsem YYY.YYY.YYY.YYY

Dziękuję za cierpliwość.
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Troszkę mieszasz, aczkolwiek droga dobra :)
Jeśli skonfigurowałeś sobie dodatkowe tablice dla każdego LANu, to w tablicy main nic nie zmieniaj. Ma pozostać brama która się ustawiła po starcie sieci.
Zerknij jeszcze tu
ODPOWIEDZ