URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 89375
[ Назад ]

Исходное сообщение
"iptables перебросить порты"

Отправлено mg , 14-Июл-10 22:35 
Господа с iptables уже дел не имел давно так что если что извиняйте.
Вот подвернулась задача просто перебросить порты с одного сервера на другой.
Написал маленький скрипт
-----------------------------------------
#!/bin/sh

EXT_IP=XXX.XXX.XXX.XXX
INT_IP=192.168.2.1
EXT_IF=eth1
PORT1=443
PORT2=443

iptables -F
iptables -F -t nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -d $EXT_IP -i $EXT_IF -p tcp -m tcp --dport $PORT2 -j DNAT --to-destination $INT_IP:$PORT1
iptables -t nat -A POSTROUTING -s $INT_IP -o $EXT_IF -p tcp -m tcp --dport $PORT1 -j SNAT --to-source $EXT_IP
iptables -A FORWARD -d $INT_IP -p tcp -m tcp --dport $PORT1 -m state --state NEW -j ACCEPT

-----------------------------------------------------

При запуске никаких ошибок не возникает
iptables -L и iptables -L -t nat  показывают что все правила применились.

Тем не менее ничего не работает никакой переброски не наблюдается. При этом телнет на машину 192.168.2.1 443 отрабатывает и подключается, а тот же телнет на XXX.XXX.XXX.XXX 443  - получаю таймаут.

проверил
cat /proc/sys/net/ipv4/ip_forward
1


Далее проверил что модуль загружен
lsmod
Module                  Size  Used by
ipt_state               3393  1
iptable_filter          4673  1
iptable_nat            31077  1
ip_conntrack           54297  2 ipt_state,iptable_nat
ip_tables              22337  3 ipt_state,iptable_filter,iptable_nat
parport_pc             29569  0
lp                     15345  0
parport                44621  2 parport_pc,lp

Даже не знаю уже что ещё сделать, у кого есть какие идеи?
От чего это может не работать ?


Содержание

Сообщения в этом обсуждении
"iptables перебросить порты"
Отправлено reader , 14-Июл-10 23:02 
>[оверквотинг удален]
>
>iptables -F
>iptables -F -t nat
>echo 1 > /proc/sys/net/ipv4/ip_forward
>iptables -t nat -A PREROUTING -d $EXT_IP -i $EXT_IF -p tcp -m
>tcp --dport $PORT2 -j DNAT --to-destination $INT_IP:$PORT1
>iptables -t nat -A POSTROUTING -s $INT_IP -o $EXT_IF -p tcp -m
>tcp --dport $PORT1 -j SNAT --to-source $EXT_IP
>iptables -A FORWARD -d $INT_IP -p tcp -m tcp --dport $PORT1 -m
>state --state NEW -j ACCEPT

а ESTABLISHED не хотите разрешить и FORWARD в обратную

>[оверквотинг удален]
> 29569  0
>lp            
>         15345  
>0
>parport            
>    44621  2 parport_pc,lp
>
>Даже не знаю уже что ещё сделать, у кого есть какие идеи?
>
>От чего это может не работать ?


"iptables перебросить порты"
Отправлено mg , 14-Июл-10 23:03 
>[оверквотинг удален]
>> 29569  0
>>lp            
>>         15345  
>>0
>>parport            
>>    44621  2 parport_pc,lp
>>
>>Даже не знаю уже что ещё сделать, у кого есть какие идеи?
>>
>>От чего это может не работать ?

А можно если не сложно пример показать, а то не совсем понятно что и куда обратно ...


"iptables перебросить порты"
Отправлено reader , 14-Июл-10 23:14 
>[оверквотинг удален]
>>>0
>>>parport            
>>>    44621  2 parport_pc,lp
>>>
>>>Даже не знаю уже что ещё сделать, у кого есть какие идеи?
>>>
>>>От чего это может не работать ?
>
>А можно если не сложно пример показать, а то не совсем понятно
>что и куда обратно ...

покажите iptables-save


"iptables перебросить порты"
Отправлено mg , 15-Июл-10 11:43 
>[оверквотинг удален]
>>>>    44621  2 parport_pc,lp
>>>>
>>>>Даже не знаю уже что ещё сделать, у кого есть какие идеи?
>>>>
>>>>От чего это может не работать ?
>>
>>А можно если не сложно пример показать, а то не совсем понятно
>>что и куда обратно ...
>
>покажите iptables-save

iptables-save
# Generated by iptables-save v1.2.11 on Thu Jul 15 10:40:43 2010
*filter
:INPUT ACCEPT [133889756:33103591113]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [133706573:84002194515]
-A FORWARD -d 192.168.2.1 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
COMMIT
# Completed on Thu Jul 15 10:40:43 2010
# Generated by iptables-save v1.2.11 on Thu Jul 15 10:40:43 2010
*nat
:PREROUTING ACCEPT [84008:8610341]
:POSTROUTING ACCEPT [11107:690543]
:OUTPUT ACCEPT [11076:688999]
-A PREROUTING -d XXX.XXX.XXX.XXX -i eth1 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.2.1:443
-A POSTROUTING -s 192.168.2.1 -o eth1 -p tcp -m tcp --dport 443 -j SNAT --to-source XXX.XXX.XXX.XXX
COMMIT
# Completed on Thu Jul 15 10:40:43 2010


"iptables перебросить порты"
Отправлено reader , 15-Июл-10 11:54 
>[оверквотинг удален]
>>покажите iptables-save
>
>iptables-save
># Generated by iptables-save v1.2.11 on Thu Jul 15 10:40:43 2010
>*filter
>:INPUT ACCEPT [133889756:33103591113]
>:FORWARD ACCEPT [0:0]
>:OUTPUT ACCEPT [133706573:84002194515]
>-A FORWARD -d 192.168.2.1 -p tcp -m tcp --dport 443 -m state
>--state NEW -j ACCEPT

тут и без этого все разрешено

>[оверквотинг удален]
># Completed on Thu Jul 15 10:40:43 2010
># Generated by iptables-save v1.2.11 on Thu Jul 15 10:40:43 2010
>*nat
>:PREROUTING ACCEPT [84008:8610341]
>:POSTROUTING ACCEPT [11107:690543]
>:OUTPUT ACCEPT [11076:688999]
>-A PREROUTING -d XXX.XXX.XXX.XXX -i eth1 -p tcp -m tcp --dport 443
>-j DNAT --to-destination 192.168.2.1:443
>-A POSTROUTING -s 192.168.2.1 -o eth1 -p tcp -m tcp --dport 443
>-j SNAT --to-source XXX.XXX.XXX.XXX

-A POSTROUTING -s 192.168.2.1 -o eth1 -p tcp -m tcp --sport 443
-j SNAT --to-source XXX.XXX.XXX.XXX

хотя лучше делать нат для всего что уходит с eth1, а фильтровать в таблице фильтров

>COMMIT
># Completed on Thu Jul 15 10:40:43 2010


"iptables перебросить порты"
Отправлено Andrey Mitrofanov , 19-Июл-10 11:47 
>*> а ESTABLISHED не хотите разрешить и FORWARD в обратную
>А можно если не сложно пример показать, а то не совсем понятно что и куда обратно ...

Соединения _состоят из тех пакетов, которые "идут" от клиента к серверу, и тех, которые "идут" _обратно. "Разрешить ESTABLISHED" и "обратные в FORWARD" обычно выглядит примерно так:

-A FORWARD -d 10.1.1.2 -j in_prtfwd
-A in_prtfwd -j in_prtfwd_eserver_s1
-A in_prtfwd -m state --state RELATED -j ACCEPT
-A in_prtfwd_eserver_s1 -p tcp --dport 4662 -m state --state NEW,ESTABLISHED -j ACCEPT

-A FORWARD -s 10.1.1.2 -j out_prtfwd
-A out_prtfwd -j out_prtfwd_eserver_s1
-A out_prtfwd -m state --state RELATED -j ACCEPT
-A out_prtfwd_eserver_s1 -p tcp --sport 4662 -m state --state ESTABLISHED -j ACCEPT


Это для _одного соединения. Замечаешь "инверсию" туда-оттуда и разницу NEW,ESTABLISHED vs ESTABLISHED (и да, там же ещё и RELATED...)? Пример, упрощённый немного, вот отсюда: http://www.opennet.me/openforum/vsluhforumID1/82167.html#2

...И да, за меня такие "умные" правила пишет firehol. Он же грузит модули ядра и включает ip_forward.


"iptables перебросить порты"
Отправлено Дядя Федор , 15-Июл-10 08:40 
Использовать для анализа tcpdump я голову не приходило?

"iptables перебросить порты"
Отправлено Дядя Федор , 15-Июл-10 08:41 
>Использовать для анализа tcpdump я голову не приходило?

Пардон. "в голову", конечно. Опечаточка


"iptables перебросить порты"
Отправлено nucleo , 15-Июл-10 15:57 
>[оверквотинг удален]
> 29569  0
>lp            
>         15345  
>0
>parport            
>    44621  2 parport_pc,lp
>
>Даже не знаю уже что ещё сделать, у кого есть какие идеи?
>
>От чего это может не работать ?

По-моему, строчка с POSTROUTING ... SNAT не нужна, т.к. DNAT делает обратную подмену адреса. Второй сервер ведь не будет устанавливать новые соединения?


"iptables перебросить порты"
Отправлено reader , 15-Июл-10 17:50 
>[оверквотинг удален]
>>0
>>parport            
>>    44621  2 parport_pc,lp
>>
>>Даже не знаю уже что ещё сделать, у кого есть какие идеи?
>>
>>От чего это может не работать ?
>
>По-моему, строчка с POSTROUTING ... SNAT не нужна, т.к. DNAT делает обратную
>подмену адреса. Второй сервер ведь не будет устанавливать новые соединения?

вообще то наверно да