The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Port mapping!"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Port mapping!"  
Сообщение от stakado email(ok) on 19-Дек-07, 14:11 
Драсьте!
Попытался поднять порт-маппинг:

$iptables -t nat -I PREROUTING 1 -i $gnd_if -p tcp -s ${remote_ip[$i]} -d $gnd_ip --dport ${remote_port[$i]} -j DNAT --to-destination ${local_ip[$i]}:${local_port[$i]}
$iptables -t nat -I POSTROUTING 1 -o $gnd_if -p tcp -s ${local_ip[$i]} -d $int_ip --sport ${local_port[$i]} -j SNAT --to-source $gnd_ip:${remote_port[$i]}

remote_ip - ip удалённого хоста, с которого коннектимся (83.166.112.41)
local_ip - хост во внутренней сети, на который надо редиректить (10.0.0.2)
remote_port - порт на сервере, к которому соединяется удалённый хост (23)
local_port - порт на машине в локальной сети, на который редиректим (23)
gnd_if - внешний ифейс сервера
gnd_ip - ИП на ^ сетевухе
int_if - внутренний ифейс сервера
int_ip - ИП ^ сетевухи

Фаервол пуст.
tcpdump на внутренней сетевухе показывает:
13:55:10.169058 IP 83.166.112.41.1775 > 10.0.0.2.23: S 3349012975:3349012975(0) win 5840 <mss 1412,sackOK,timestamp 1295425638 0,nop,wscale 0>
13:55:13.180982 IP 83.166.112.41.1775 > 10.0.0.2.23: S 3349012975:3349012975(0) win 5840 <mss 1412,sackOK,timestamp 1295428639 0,nop,wscale 0>
13:55:19.174836 IP 83.166.112.41.1775 > 10.0.0.2.23: S 3349012975:3349012975(0) win 5840 <mss 1412,sackOK,timestamp 1295434639 0,nop,wscale 0>

Т.е. пакеты приходят и iptables их переправляет во внутреннюю сеть, а ответов от клиента (10.0.0.2) не видно.
Вопрос 1: не должен ли он подменять в пакетах ip источника?

Слушаем на клиенте (10.0.0.2) с помощью Ethereal - никакие пакеты на 23 порт не приходят. Если с сервера запустить, допустим, пинг, то пакеты приходят и в Ethereal видны.

Вопрос 2: где я накосячил и/или что забыл, что оно не работает? Подскажите, плиз.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

  • Port mapping!, sergey.shkolin, 14:25 , 19-Дек-07, (1)  
    • Port mapping!, stakado, 15:00 , 19-Дек-07, (2)  
  • Port mapping!, konst, 15:33 , 19-Дек-07, (3)  
    • Port mapping!, stakado, 15:54 , 19-Дек-07, (4)  
      • Port mapping!, konst, 16:05 , 19-Дек-07, (5)  
        • Port mapping!, stakado, 16:16 , 19-Дек-07, (6)  
          • Port mapping!, konst, 17:15 , 19-Дек-07, (7)  
            • Port mapping!, stakado, 09:45 , 21-Дек-07, (8)  

Сообщения по теме [Сортировка по времени | RSS]


1. "Port mapping!"  
Сообщение от sergey.shkolin (ok) on 19-Дек-07, 14:25 
>[оверквотинг удален]
>Т.е. пакеты приходят и iptables их переправляет во внутреннюю сеть, а ответов
>от клиента (10.0.0.2) не видно.
>Вопрос 1: не должен ли он подменять в пакетах ip источника?
>
>Слушаем на клиенте (10.0.0.2) с помощью Ethereal - никакие пакеты на 23
>порт не приходят. Если с сервера запустить, допустим, пинг, то пакеты
>приходят и в Ethereal видны.
>
>Вопрос 2: где я накосячил и/или что забыл, что оно не работает?
>Подскажите, плиз.

хватает обычно вот такого варианта.

Обозначения

        $EXT_R_IP - внешний IP роутера
        $LOCAL_IP - внутренний "фэйковый" адрес машины, которую надо "выкидывать" наружу
        $PORT1 - Порт, на который будут заходить извне и попадать на локальную машину
        $PORT2 - Порт, который "выбрасывается" наружу(например, 80 - http, либо 21 - ftp)


   На роутере говорим следующие команды(от рута)

# iptables -t nat -A PREROUTING -p tcp -d $EXT_R_IP --dport $PORT1 -j DNAT --to-destination $LOCAL_IP:$PORT2
# iptables -A FORWARD -i eth0 -d $LOCAL_IP -p tcp --dport $PORT2 -j ACCEPT


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Port mapping!"  
Сообщение от stakado email(ok) on 19-Дек-07, 15:00 
>[оверквотинг удален]
>        $PORT2 - Порт, который
>"выбрасывается" наружу(например, 80 - http, либо 21 - ftp)
>
>
>   На роутере говорим следующие команды(от рута)
>
># iptables -t nat -A PREROUTING -p tcp -d $EXT_R_IP --dport $PORT1
>-j DNAT --to-destination $LOCAL_IP:$PORT2
># iptables -A FORWARD -i eth0 -d $LOCAL_IP -p tcp --dport $PORT2
>-j ACCEPT

Хорошо, я убрал SNAT из POSTROUTING - эффект такой же.
Но вообще до SNAT дело не доходит, т.к. у меня указан --src 10.0.0.2 и --sport 23, а от 10.0.0.2:23 вообще нихрена не приходит. Так что SNAT в данной ситуации вообще ничего не решил.

Если пакеты в случае срабатывания DNAT не доходят ко локального клиента, а в обычном случае (без DNAT) доходят, то значит DNAT что-то не так конвертирует, что пакеты уходят в никуда.

Подскажите, плиз, куда копать!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Port mapping!"  
Сообщение от konst email(ok) on 19-Дек-07, 15:33 
>[оверквотинг удален]
>Т.е. пакеты приходят и iptables их переправляет во внутреннюю сеть, а ответов
>от клиента (10.0.0.2) не видно.
>Вопрос 1: не должен ли он подменять в пакетах ip источника?
>
>Слушаем на клиенте (10.0.0.2) с помощью Ethereal - никакие пакеты на 23
>порт не приходят. Если с сервера запустить, допустим, пинг, то пакеты
>приходят и в Ethereal видны.
>
>Вопрос 2: где я накосячил и/или что забыл, что оно не работает?
>Подскажите, плиз.

1. на 10.0.0.2 должен быть правильный роутинг
2. echo 1 >  /proc/sys/net/ipv4/ip_forward (или через sysctl)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Port mapping!"  
Сообщение от stakado email(ok) on 19-Дек-07, 15:54 
>1. на 10.0.0.2 должен быть правильный роутинг

маршрут к 10.0.0.2 по-любому указан правильно, потому как при запуске пинга с сервера пакеты до 10.0.0.2 доходят и возвращаются.
>2. echo 1 >  /proc/sys/net/ipv4/ip_forward (или через sysctl)

1 там стоит. Если бы она там не стояла, то пакеты бы оставались на внешнем интерфейсе, на внутренний не перебрасывались бы (собсна не осуществлялся бы форвардинг). У меня же tcpdump видит как пакеты уходят с внутренней сетевухи (описано в 1м посте).

Спасите-помогите, плииииз!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Port mapping!"  
Сообщение от konst email(ok) on 19-Дек-07, 16:05 
>>1. на 10.0.0.2 должен быть правильный роутинг
>
>маршрут к 10.0.0.2 по-любому указан правильно, потому как при запуске пинга с
>сервера пакеты до 10.0.0.2 доходят и возвращаются.

На самом 10.0.0.2 что выдает route? Там или дефолтом д.б. 10.0.0.23 или надо жестко прописать: route add -host (внеш.IP откуда приходят запросы) gw 10.0.0.23

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Port mapping!"  
Сообщение от stakado email(ok) on 19-Дек-07, 16:16 
>>>1. на 10.0.0.2 должен быть правильный роутинг
>>
>>маршрут к 10.0.0.2 по-любому указан правильно, потому как при запуске пинга с
>>сервера пакеты до 10.0.0.2 доходят и возвращаются.
>
>На самом 10.0.0.2 что выдает route? Там или дефолтом д.б. 10.0.0.23 или
>надо жестко прописать: route add -host (внеш.IP откуда приходят запросы) gw
>10.0.0.23

Сервер: внутр. сетевуха:
inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
маршрут:
цель            шлюз           маска                ифейс
10.0.0.0        0.0.0.0         255.255.255.0       eth0
Клиент: адрес - 10.0.0.2/24
Цель          Маска              шлюз            интерфейс     метрика
10.0.0.0    255.255.255.0        10.0.0.2        10.0.0.2       10
0.0.0.0          0.0.0.0         10.0.0.1        10.0.0.2       10

Интерфейс = 10.0.0.2 - винда так пишет.

>10.0.0.23

У меня где-нить этот адрес указан (в постах выше)? Может я просто опечатался в адресе где и упорно не хочу этого замечать?..

Ни в какие другие маршруты [внеш. ИП откуда приходят запросы] не попадает.

Серв и клиент соединены через обычный свич. Пинги между ними ходят нормально, т.е. с физической связью всё ок.

Повторюсь: на серве tcpdump показывает, что пакеты к 10.0.0.2 уходят. Но при мониторинге на клиенте Ethereal этих пакетов не видит! Т.е. получается, что с сервера ушли пакеты, а до клиента не дошли. И такая ситуация наблюдаются только с пакетами модифицированными DNAT. С остальными пакетами всё ок.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Port mapping!"  
Сообщение от konst email(ok) on 19-Дек-07, 17:15 
>[оверквотинг удален]
>
>
>Серв и клиент соединены через обычный свич. Пинги между ними ходят нормально,
>т.е. с физической связью всё ок.
>
>Повторюсь: на серве tcpdump показывает, что пакеты к 10.0.0.2 уходят. Но при
>мониторинге на клиенте Ethereal этих пакетов не видит! Т.е. получается, что
>с сервера ушли пакеты, а до клиента не дошли. И такая
>ситуация наблюдаются только с пакетами модифицированными DNAT. С остальными пакетами всё
>ок.

А с 10.0.0.2 пингуются $remoute_ip?

iptables -t nat -I POSTROUTING 1 -o $gnd_if -p tcp -s ${local_ip[$i]} -d $int_ip --sport ${local_port[$i]} -j SNAT --to-source $gnd_ip:...
сделать:
iptables -t nat -I POSTROUTING 1 -o $gnd_if -p tcp -s ${local_ip[$i]} -d $int_ip  -j SNAT --to-source $gnd_ip
iptables -t nat -I POSTROUTING 1 -o $gnd_if -p icmp -s ${local_ip[$i]} -d $int_ip  -j SNAT --to-source $gnd_ip
(последнее для проверки пингов)
Похоже 10.0.0.2 не знает куда (или как) отвечать  

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Port mapping!"  
Сообщение от stakado email(ok) on 21-Дек-07, 09:45 
>Похоже 10.0.0.2 не знает куда (или как) отвечать

Я же говорю - пакеты НЕ ДОХОДЯТ до клиента. Поэтому правильнее сказать не то, что он не знает КУДА отвечать, а он не знает НА ЧТО отвечать, т.к. запросы до него не доходят.

Если вдруг у кого будут интересные мысли - напишите, пожалуйста, а так это просто флейм разводить.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру