iptables - создание туннеля (PortTunnel)

Аватара пользователя
zelo

iptables - создание туннеля (PortTunnel)

Сообщение zelo »

....така задача появилась:

на машине c адресом в сети 192.168.33.3 нужно все подключения на порт 334 тунеллировать на порт 333, так чтобы подключения на порт 333 приходили (создавались) с адресом источника 192.168.33.3

Знаю, под Вынь есть, реализующая всё это, программа - PortTunnel. Подскажите эт всё как под Линь учинить.

Делал так:

#iptables –A PREROUTING –t nat –p tcp –dport 334 -j REDIRECT –to-port 333 ...но входящие соединения на порт 333 шли с адресом источника, а не с адресом 192.168.33.3, вот!..

Ещё пробовал эдак:

#iptables –t nat –A PREROUTING –p tcp –d 192.168.33.3 –dport 334 -j NAT –to-destination 192.168.33.3:333 ...таж фигня..



Еже кто разумел проблему, то будте добры, растолкуйте что да как/куда..



....заранее спасиБо!..
Аватара пользователя
Dm1try

Re: iptables - создание туннеля (PortTunnel)

Сообщение Dm1try »

Зачем это нужно, можно узнать?
Аватара пользователя
1Space

Re: iptables - создание туннеля (PortTunnel)

Сообщение 1Space »

Что-то не совсем понял из поста Изображение



Есть в сети ПК1 с адресом 192.168.33.3, а также ПК2 с адресом ххх.ххх.ххх.ххх. ПК2 подключается к ПК1 к порту 334, и необходимо это соединение на ПК1 перевести на порт 333 и заменить адрес источника на 192.168.33.3, так ?

Тогда врядли получится подменить адрес источника. Потому что такая подмена делается в таблице nat в цепочке postrouting с помощью -j SNAT, в данном случае пакеты в эту цепочку не попадают.



P.S. Не ругайте сильно, если не то написал Изображение
Аватара пользователя
Dm1try

Re: iptables - создание туннеля (PortTunnel)

Сообщение Dm1try »

....долго сказывать, но оч нужно, поверьте на слово
Аватара пользователя
zelo

Re: iptables - создание туннеля (PortTunnel)

Сообщение zelo »

У меня как раз проблема подобного рода, но порт надо прокидывать из одной подсети (192.168.1.0/24) в другую (192.168.0.0/24).



Почитал вот это:
http://www.opennet.ru/base/net/dnat_linux.txt.html


И решил написать простенький скриптик для удобства:



Код:

Код: Выделить всё

#!/bin/sh
#IP внутренней сети, передаётся первым параметром
INT_IP=$1
#IP внешней сети
EXT_IP="192.168.0.1"
INT_PORT=$2
EXT_PORT=$3
#интерфейс, который смотрит во внутреннюю подсеть
INT_IF="br0"
#Это может пригодиться потом 
#EXT_IF="vlan1"
iptables -t nat -A  PREROUTING -p tcp -d $EXT_IP --dport $EXT_PORT -j DNAT --to-destination $INT_IP:$INT_PORT
iptables -A FORWARD -i $INT_IF -d $INT_IP -p tcp --dport $INT_PORT -j ACCEPT

Теперь по идее, запустив этот скрипт с параметрами, скажем

./portout 192.168.1.4 80 80

мы должны обращаясь на 192.168.0.1:80 получить доступ на 80-й порт машины 192.168.1.4, но этого почему-то не происходит.





Код:

Код: Выделить всё

[admin@router scripts]$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[admin@router scripts]$ iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
VSERVER    all  --  anywhere             192.168.0.1
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Chain VSERVER (1 references)
target     prot opt source               destination
[admin@router scripts]$ cat /etc/hosts | grep book
192.168.1.4 book
[admin@router scripts]$ ./portout.sh 192.168.1.4 80 80
[admin@router scripts]$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             book               tcp dpt:www
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[admin@router scripts]$ iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
VSERVER    all  --  anywhere             192.168.0.1
DNAT       tcp  --  anywhere             192.168.0.1        tcp dpt:www to:192.168.1.4:80
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Chain VSERVER (1 references)
target     prot opt source               destination

Подскажите пожалуйста, что же я делаю не так?
Аватара пользователя
Dm1try

Re: iptables - создание туннеля (PortTunnel)

Сообщение Dm1try »

ИМХО, примерно вот так (при default политиках DROP):



Код:

Код: Выделить всё

iptables -A  PREROUTING -t nat -p tcp -d $EXT_IP --dport $EXT_PORT -j DNAT --to-destination $INT_IP:$INT_PORT
iptables -A FORWARD  -t filter -p all -i $EXT_IF -o $INT_IF -j ext-to-int
iptables -A FORWARD  -t filter -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -N  ext-to-int
iptables -A ext-to-int -p tcp -d $INT_IP --dport INT_PORT -j ACCEPT
iptables -A ext-to-int -p all -d $INT_IP -m state --state ESTABLISHED,RELATED -j ACCEPT



В Вашем случае, опять таки ИМХО, будет достаточно просто:



Код:

Код: Выделить всё

iptables -A  PREROUTING -t nat -p tcp -d $EXT_IP --dport $EXT_PORT -j DNAT --to-destination $INT_IP:$INT_PORT

Далеше пакет пойдет в FORWARD и получит по умолчанию ACCEPT, далее в POSTROUTING - ACCEPT и т.д.
Аватара пользователя
Dm1try

Re: iptables - создание туннеля (PortTunnel)

Сообщение Dm1try »

ИМХО, примерно вот так (при default политиках DROP):



Код:

Код: Выделить всё

iptables -A  PREROUTING -t nat -p tcp -d $EXT_IP --dport $EXT_PORT -j DNAT --to-destination $INT_IP:$INT_PORT
iptables -A FORWARD  -t filter -p all -i $EXT_IF -o $INT_IF -j ext-to-int
iptables -A FORWARD  -t filter -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -N  ext-to-int
iptables -A ext-to-int -p tcp -d $INT_IP --dport INT_PORT -j ACCEPT
iptables -A ext-to-int -p all -d $INT_IP -m state --state ESTABLISHED,RELATED -j ACCEPT



В Вашем случае, опять таки ИМХО, будет достаточно просто:



Код:

Код: Выделить всё

iptables -A  PREROUTING -t nat -p tcp -d $EXT_IP --dport $EXT_PORT -j DNAT --to-destination $INT_IP:$INT_PORT

Далеше пакет пойдет в FORWARD и получит по умолчанию ACCEPT, далее в POSTROUTING - ACCEPT и т.д.
Аватара пользователя
alive_corpse

Re: iptables - создание туннеля (PortTunnel)

Сообщение alive_corpse »

Я знаю, форвард в дальнейшем будет DROP, поэтому скрипт пишется сразу так.



Я сглупил. Одну машину пересадил из одной подсети в другую, но пытался зайти на 192.168.0.1 с машины из 192.168.1.0/24, ибо с квм свитчем перепутал машины. Сорри, всё работает... Изображение
Аватара пользователя
alive_corpse

Re: iptables - создание туннеля (PortTunnel)

Сообщение alive_corpse »

....на самом то деле нифига не решено :-)

....чо мне с PortTunnelle`м то делать? :-):-):-)
Аватара пользователя
[mzd]

Re: iptables - создание туннеля (PortTunnel)

Сообщение [mzd] »

Цитата zelo:



....на самом то деле нифига не решено :-)

....чо мне с PortTunnelle`м то делать? :-):-):-)
iptables - создание туннеля (PortTunnel)




Если Вы не опишете зачем это нужно - то вам никто и не ответит.



В общем случае - я уже сказал выше.
Ответить

Вернуться в «Общий по Linux»