[Rozw.] Dwa łącza problem z DNAT

Serwery i sieci oparte na Slackware, wszelkiego rodzaju usługi, troubleshooting.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
olek
Moderator
Posty: 63
Rejestracja: 2004-05-22, 00:37
Lokalizacja: Warszawa
Kontakt:

[Rozw.] Dwa łącza problem z DNAT

Post autor: olek »

Witam,
poprzednio miałem problem z kierowaniem ruchu z wewnątrz sieci, tym razem problem jest z przekierowanym usługami do wewnątrz sieci.

tablice routingu wygladają tak:

Kod: Zaznacz cały

root:/etc/rc.d# ip route list table T1
95.yyy.yyy.24/29 dev eth2  scope link
62.xxx.xxx.112/28 dev eth0  proto static  scope link  src 62.xxx.xxx.126
10.211.1.0/24 dev eth1  scope link
127.0.0.0/8 dev lo  scope link
default via 62.xxx.xxx.113 dev eth0

root:/etc/rc.d# ip route list table T2
95.yyy.yyy.24/29 dev eth2  proto static  scope link  src 95.yyy.yyy.30
62.xxx.xxx.112/28 dev eth0  scope link
10.211.1.0/24 dev eth1  scope link
127.0.0.0/8 dev lo  scope link
default via 95.yyy.yyy.25 dev eth2

root:/etc/rc.d# ip route list table main
95.yyy.yyy.24/29 dev eth2  proto kernel  scope link  src 95.yyy.yyy.30
62.xxx.xxx.112/28 dev eth0  proto kernel  scope link  src 62.xxx.xxx.126
10.211.1.0/24 dev eth1  proto kernel  scope link  src 10.211.1.44
127.0.0.0/8 dev lo  scope link
default via 62.xxx.xxx.113 dev eth0  metric 1

root:/etc/rc.d# ip rule
0:      from all lookup local
32763:  from all fwmark 0x2 lookup T2
32764:  from 95.yyy.yyy.30 lookup T2
32765:  from 62.xxx.xxx.126 lookup T1
32766:  from all lookup main
32767:  from all lookup default
DNAT i SNAT wygląda tak:

Kod: Zaznacz cały

$IPT -t nat -A PREROUTING -d $ZEW_IP -p tcp --dport 21 -j DNAT --to-destination 10.211.1.21:21
$IPT -t nat -A PREROUTING -d $ZEW_IP_2 -p tcp --dport 21 -j DNAT --to-destination 10.211.1.21:21
$IPT -A FORWARD -d 10.211.1.21 -p tcp --dport 21 -j ACCEPT
[...]
$IPT -t nat -A POSTROUTING -s $NAT_LAN -o $ZEW_INT -j SNAT --to-source $ZEW_IP
$IPT -t nat -A POSTROUTING -s $NAT_LAN -o $ZEW_INT_2 -j SNAT --to-source $ZEW_IP_2
Problem jest następujący. Łącząc się na ZEW_IP:21 (łącze nr 1) bez problemu dostaję się na FTP'a na 10.211.1.21. Niestety łącząc się na ZEW_IP_2:21 (łącze nr 2) pakiety przychodzące są na interfejsie łącza nr 2 (czyli dobrze) ale wychodzące są na interfejsie łącza nr 1. Dodatkowo pakiety wychodzące mają nr IP łącza nr 1 pomimo że są na interfejsie łącza nr 2.

Może i tym razem ktoś pomoże? Z góry dziękuję.
Ostatnio zmieniony 2009-11-15, 14:54 przez olek, łącznie zmieniany 1 raz.
Olek
slackware 7.1, 8.1, 9.1, 10.1, 11.1, 12.2 | www.olek.waw.pl | sklep.12a.pl

reat
Użytkownik
Posty: 43
Rejestracja: 2005-01-04, 19:55

Re: [Rozw.] Dwa łącza problem z DNAT

Post autor: reat »

Markuj połączenie wchodzące np CONNMARK, bo wychodzac trafia do tablicy routingu z 1 lacza.

Awatar użytkownika
olek
Moderator
Posty: 63
Rejestracja: 2004-05-22, 00:37
Lokalizacja: Warszawa
Kontakt:

Re: [Rozw.] Dwa łącza problem z DNAT

Post autor: olek »

Próbowałem markować pakiety. Wszystkie pakiety markowane -j mark --set-mark 2 idą przez łącze nr 2 i to raczej działa bo w ten sposób przekierowuje kilka hostów z sieci zewnętrznej.

Robiłem też markowanie połączenia wchodzącego:

Kod: Zaznacz cały

$IPT -t mangle -A PREROUTING -d $ZEW_IP_2 -p tcp --dport 21 -j MARK --set-mark 2
pakiety markują się poprawnie:

Kod: Zaznacz cały

root@brama:/etc/rc.d# cat /proc/net/ip_conntrack | grep port=21
tcp 6 17 SYN_RECV src=195.aaa.aaa.11 dst=95.yyy.yyy.30 sport=11409 dport=21 packets=1 bytes=48 src=10.211.1.21 dst=95.yyy.yyy.30 sport=21 dport=11409 packets=8 bytes=384 mark=2 use=1
jednak nadal wychodzą łączem nr 1 mając nr IP łącza 2, ip_conntrack przez cały czas pokazuje SYN_RECV dla tego połączenia.
Olek
slackware 7.1, 8.1, 9.1, 10.1, 11.1, 12.2 | www.olek.waw.pl | sklep.12a.pl

reat
Użytkownik
Posty: 43
Rejestracja: 2005-01-04, 19:55

Re: [Rozw.] Dwa łącza problem z DNAT

Post autor: reat »

Sprobuj CONNMARK, markuje cale polaczenie a nie pojedyncze pakiety.

Kod: Zaznacz cały

$IPT -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
$IPT -t mangle -A PREROUTING -d $ZEW_IP_2 -m mark -p tcp --dport 21 -j MARK --set-mark 2
$IPT -t mangle -A PREROUTING -p tcp -m mark --mark 2 -j CONNMARK --save-mark

Awatar użytkownika
olek
Moderator
Posty: 63
Rejestracja: 2004-05-22, 00:37
Lokalizacja: Warszawa
Kontakt:

Re: [Rozw.] Dwa łącza problem z DNAT

Post autor: olek »

w 2 linijce powinno być bez -m mark

Kod: Zaznacz cały

$IPT -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
$IPT -t mangle -A PREROUTING -d $ZEW_IP_2 -p tcp --dport 21 -j MARK --set-mark 2
$IPT -t mangle -A PREROUTING -p tcp -m mark --mark 2 -j CONNMARK --save-mark
ale rzeczywiście brakowało mi wpisu

Kod: Zaznacz cały

$IPT -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
myślałem że wpis:

Kod: Zaznacz cały

$IPT -t mangle -A PREROUTING -p tcp -m mark --mark 2 -j CONNMARK --save-mark
załatwia sprawę.

Dzięki za pomoc, wszystko działa jak powinno.
Olek
slackware 7.1, 8.1, 9.1, 10.1, 11.1, 12.2 | www.olek.waw.pl | sklep.12a.pl

ODPOWIEDZ