The OpenNET Project / Index page

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

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

"Проброс порта наружу с помощью iptables"  
Сообщение от Dmitry (??) on 04-Мрт-09, 22:56 
Здравствуйте всем!

Помогите пожалуйтса разобраться с iptables, тема конечно не новая, но всё чего нашёл на опеннет и в Инете у меня не работает.

топология такая есть сервер (GW_IP) (но он не gateway по умолчанию) с одним eth0 и public_IP на нём, и есть внутренний web-сервер(WEB_IP) c private_IP, к которому необходимо обращаться с наружи через GW_IP. Соответственно друг друга они видят.
необходимо что бы при обращении с наружи к GW_IP:1234 запросы уходили на WEB:80 и соответственно возвращались тем же путём. Что сделал - на GW_IP прописал

iptables -t nat -A PREROUTING -i eth0 -p tcp --dst GW_IP --dport 1234 -j DNAT --to-destination WEB_IP:80

iptables -t nat -A POSTROUTING -o eth0 -p tcp --dst WEB_IP --dport 80 -j SNAT --to-source GW_IP:1234

при попытке обратиться с наружи на GW_IP:1234 браузер пытается перейти на WEB_IP:80 ну и соответствеено ни разу туда не попадает, собссно и не должен. При просмотре tcpdump`ом все запросы и ответы идут правильно те сначала отрабатывает PREROUTING подмненяя destintion на WEB_IP затем POSTROUTING подменяет src на  GW_IP, а сам GW отдаёт уже клиентскому браузеру наверное пакеты с src=WEB_IP почему не происходит трансляции? какое ещё правило нужно или мож эти не правильные?  

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

 Оглавление

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


1. "Проброс порта наружу с помощью iptables"  
Сообщение от angra (ok) on 04-Мрт-09, 23:53 
Правильно ли я понимаю, что у вас всего один интерфейс на машине и при этом GW_IP и WEB_IP в одной подсети? Или на eth0 висит алиас для подсети в которой WEB_IP?

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

2. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitry (??) on 05-Мрт-09, 00:41 
На обоих  серверах по одному интерфейсу и у GW IP реальный а у WEB private, но на маршрутизаторе, через который они видят друг друга прописан частный маршрут что бы эти адреса друг друга видели  

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

3. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitriy (??) on 05-Мрт-09, 13:28 
Ну то есть адреса на серверах из разных подсетей


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

4. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitry (??) on 05-Мрт-09, 22:50 
Видно не судьба ...


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

5. "Проброс порта наружу с помощью iptables"  
Сообщение от reader (ok) on 05-Мрт-09, 23:35 
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dst WEB_IP --dport 80 -j SNAT --to-source GW_IP(без порта)

показали бы лучше ifconfig, route -n и iptables-save с машин, скрыв часть белых адресов, но так чтобы разные адреса отличались

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

6. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitry (??) on 06-Мрт-09, 00:44 
без порта эффект то же что и с портом

не совсем понял зачем нужен ifconfig но вот привожу для GW server

ifconfig
eth0      Link encap:Ethernet  HWaddr GW_MAC
          inet addr:GW_IP  Bcast:GW_BROADCAST  Mask:255.255.255.240
          inet6 addr: GW_MAC Scope:Global
          inet6 addr: GW_MAC Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:839935200 errors:0 dropped:0 overruns:0 frame:0
          TX packets:822960608 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:493050075 (470.2 MiB)  TX bytes:559739347 (533.8 MiB)
          Interrupt:10 Memory:f8000000-f8012100

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:20033470 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20033470 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1583804771 (1.4 GiB)  TX bytes:1583804771 (1.4 GiB)


тоже самое для будет для WEB server с единственной разницей что там Ip-шники из внутренней сети

route -n

тоже не очень информативен так как у каждой из двух машин (GW и WEB) свои (разные) шлюзы, а с маршрутизатора к сожалению не могу route показать - нет доступа туда.Но там, повторюсь, частный маршрут прописан - типа если GW захочет сходить к WEBу то ходить ему нуно через такой то адрес-шлюз ну и может быть тоже самое для WEB прописано, хотя наверное хватит и того что для GW.
а вот что говорит iptables -t nat --list -vn (только nat тк других правил нет)

Chain PREROUTING (policy ACCEPT 210K packets, 22M bytes)
pkts bytes target     prot opt in     out     source               destination
    8   384 DNAT       tcp  --  eth0   *       0.0.0.0/0            GW_IP         tcp dpt:GW_PORT to:WEB_IP:80

Chain POSTROUTING (policy ACCEPT 1037K packets, 89M bytes)
pkts bytes target     prot opt in     out     source               destination
    1    48 SNAT       tcp  --  *      eth0    0.0.0.0/0            WEB_IP     tcp dpt:80 to:GW_IP

Chain OUTPUT (policy ACCEPT 1039K packets, 89M bytes)
pkts bytes target     prot opt in     out     source               destination

на WEB сервере iptables соответственно не задействован

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

7. "Проброс порта наружу с помощью iptables"  
Сообщение от Oyyo on 06-Мрт-09, 09:50 
да, вам явно нужен телепат

>route -n
>
>тоже не очень информативен так как у каждой из двух машин (GW и WEB) свои (разные) шлюзы, >а с маршрутизатора к сожалению

ошибаетесь, эта информация не лишняя, ну бог сней, если это засекречено

ответте
то,что вы называете маршрутизатором, является для вас шлюзом?
то,что вы называете маршрутизатором, является для WEB шлюзом?

GW и WEB находятся на одной физической линии или подключены к разным интерфейсам на маршрутизаторе

на GW можно получить информацию с WEB, т.е. в браузере что нибудь плезное отображается?

мир о WEB ни чего не знает?

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

8. "Проброс порта наружу с помощью iptables"  
Сообщение от Oyyo on 06-Мрт-09, 10:05 
чуть незабыл, на GW forward разрешён?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitriy (??) on 06-Мрт-09, 14:35 

"то,что вы называете маршрутизатором, является для вас шлюзом?" - является шлюзом для GW (ну вообще оно для всех шлюзом является)
"то,что вы называете маршрутизатором, является для WEB шлюзом?" - является шлюзом для WEB

"GW и WEB находятся на одной физической линии или подключены к разным интерфейсам на маршрутизаторе?" к разным интерфейсам маршрутизатора

"на GW можно получить информацию с WEB, т.е. в браузере что нибудь плезное отображается?" - да можно, отображается всё что там есть

"мир о WEB ни чего не знает?" - нет конечно, мир ничего не знает о WEB и WEBу (как в прочем и все кто в его сети) запрещено общаться с внешним миром, (запрещено маршрутизатором)  

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

10. "Проброс порта наружу с помощью iptables"  
Сообщение от Oyyo on 07-Мрт-09, 09:28 
на GW forward разрешён?

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

11. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitry (??) on 07-Мрт-09, 12:11 
"на GW forward разрешён?" - разрешён только не уверен, что это играет какую то роль, на сколько я понимаю (хотя могу ошибаться) форвард необходим когда задействованы два интерфейса на GW, что бы пакеты проходили с интерфейса на интерфейс и обратно, у меня то всего один if. Но повторюсь в любом случае cft ip_forward выдаёт  1  


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

12. "Проброс порта наружу с помощью iptables"  
Сообщение от Oyyo on 07-Мрт-09, 18:25 
>"на GW forward разрешён?" - разрешён только не уверен, что это играет
>какую то роль, на сколько я понимаю (хотя могу ошибаться) форвард
>необходим когда задействованы два интерфейса на GW, что бы пакеты проходили
>с интерфейса на интерфейс и обратно, у меня то всего один
>if. Но повторюсь в любом случае cft ip_forward выдаёт  1
>

правила прохождения пакетов ни кто не отменял и количество интерфейсов роли не играет

по идее все должно работать и судя по счетчикам пакеты бегают, не понятно следующее
>при попытке обратиться с наружи на GW_IP:1234 браузер пытается перейти на WEB_IP:80

дело в том, что браузер не может знать о существовании WEB_IP:80 и не должен ни куда переходить, он должен получать ответы от GW
не знаю, что делается в FORWARD таблицы filter,если там всё в ACCEPT ?то должно работать, ну попробуй ещё упростить правило
>iptables -t nat -A POSTROUTING -o eth0 -p tcp --dst WEB_IP --dport 80 -j SNAT --to-source GW_IP

до банального маскарада
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

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

13. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitry (??) on 08-Мрт-09, 00:33 
маскарадинг тож не помог.
Н асколько я вижу tcpdump`ом пакеты между серверами ходят верно те извне приходит запрос на GW_IP:GW_PORT который форвадиться на WEB_IP:80 с подменой DST_IP и потом WEB_IP:80 получив запрос отвечает на GW_IP:PORT,  а вот тут видимо происходит что то не правильное потому что получается, что GW_IP:PORT получив ответ от WEB_IP:80 клиенту отдаёт пакет не подменяя SRC, ну то есть когда идёт ответ клиентскому браузеру то в этих пакетах SRC = WEB_IP:80 , а должен подменяться на GW_IP:PORT (по крайней мере в Опере видно, а вот эексплорер даж не пытается ничего сделать просто отсылает на Google поискать что такое GW_IP)  жесть какая то


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

14. "Проброс порта наружу с помощью iptables"  
Сообщение от Oyyo on 08-Мрт-09, 09:20 
>маскарадинг тож не помог.
>Н асколько я вижу tcpdump`ом пакеты между серверами ходят верно те извне
>приходит запрос на GW_IP:GW_PORT который форвадиться на WEB_IP:80 с подменой DST_IP
>и потом WEB_IP:80 получив запрос отвечает на GW_IP:PORT,  а вот
>тут видимо происходит что то не правильное потому что получается, что
>GW_IP:PORT получив ответ от WEB_IP:80 клиенту отдаёт пакет не подменяя SRC,
>ну то есть когда идёт ответ клиентскому браузеру то в этих
>пакетах SRC = WEB_IP:80 , а должен подменяться на GW_IP:PORT (по
>крайней мере в Опере видно,

какаято хрень получается, при маскараде, в том виде как я написал, всё что уходит с eth0 должно подменяться SRC на GW_IP
что-то ты не так делаешь, не всё здесь говоришь
> а вот эексплорер даж не пытается
>ничего сделать просто отсылает на Google поискать что такое GW_IP)  
>жесть какая то

не понял, т.е. клиент не видит GW, а простой пинг GW_IP на удаленном клиенте что говорит?


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

15. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitry (??) on 08-Мрт-09, 15:06 
действительно какая-нибудь молочь вышла из поля зрения,
послушал tcpdump`ом PORT на GW_IP - все пакеты проходят правильно, те запрос идёт так CLIENT_IP -> GW_IP:PORT -> WEB_IP:80 , ответ такой
WEB_IP:80 -> GW_IP:PORT -> CLIENT

из Инета пинги от/до GW_IP ходят без вопросов

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

16. "Проброс порта наружу с помощью iptables"  
Сообщение от Oyyo on 08-Мрт-09, 19:30 
>действительно какая-нибудь молочь вышла из поля зрения,
>послушал tcpdump`ом PORT на GW_IP - все пакеты проходят правильно, те запрос идёт так CLIENT_IP -> GW_IP:PORT -> WEB_IP:80 , ответ такой
>WEB_IP:80 -> GW_IP:PORT -> CLIENT
>
>из Инета пинги от/до GW_IP ходят без вопросов

покажи tcpdump -i eth0

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

17. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitry (??) on 09-Мрт-09, 00:35 
не совсем то, что просили, но это не хуже, и спасибо Вам за то, что тратите своё время и опыт на меня

tcpdump tcp -ni eth0 port GW_PORT

00:25:39.108751 IP client_IP.2219 > GW_IP.PORT: S 3885310013:3885310013(0) win 16384 <mss 1352,nop,nop,sackOK>
00:25:39.108794 IP GW_IP.PORT > WEB_IP.80: S 3885310013:3885310013(0) win 16384 <mss 1352,nop,nop,sackOK>
00:25:39.110021 IP WEB_IP.80 > GW_IP.PORT: S 4252819869:4252819869(0) ack 3885310014 win 5840 <mss 1460,nop,nop,sackOK>
00:25:39.110030 IP GW_IP.PORT > client_IP.2219: S 4252819869:4252819869(0) ack 3885310014 win 5840 <mss 1460,nop,nop,sackOK>
00:25:39.116144 IP client_IP.2219 > GW_IP.PORT: . ack 1 win 17576
00:25:39.116155 IP GW_IP.PORT > WEB_IP.80: . ack 1 win 17576
00:25:39.182141 IP client_IP.2219 > GW_IP.PORT: P 1:406(405) ack 1 win 17576
00:25:39.182164 IP GW_IP.PORT > WEB_IP.80: P 1:406(405) ack 1 win 17576
00:25:39.182835 IP WEB_IP.80 > GW_IP.PORT: . ack 406 win 6432
00:25:39.182841 IP GW_IP.PORT > client_IP.2219: . ack 406 win 6432
00:25:39.183981 IP WEB_IP.80 > GW_IP.PORT: P 1:240(239) ack 406 win 6432
00:25:39.183987 IP GW_IP.PORT > client_IP.2219: P 1:240(239) ack 406 win 6432
00:25:39.306313 IP client_IP.2219 > GW_IP.PORT: . ack 240 win 17337
00:25:39.306339 IP GW_IP.PORT > WEB_IP.80: . ack 240 win 17337

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

18. "Проброс порта наружу с помощью iptables"  
Сообщение от Oyyo on 09-Мрт-09, 07:01 
>не совсем то, что просили, но это не хуже, и спасибо Вам
>за то, что тратите своё время и опыт на меня
>

некогда анализировать, ухожу на работу,но
>tcpdump tcp -ni eth0 port GW_PORT
>
>00:25:39.108751 IP client_IP.2219 > GW_IP.PORT: S 3885310013:3885310013(0) win 16384 <mss 1352,nop,nop,sackOK>
>00:25:39.108794 IP GW_IP.PORT > WEB_IP.80: S 3885310013:3885310013(0) win 16384 <mss 1352,nop,nop,sackOK>
>00:25:39.110021 IP WEB_IP.80 > GW_IP.PORT: S 4252819869:4252819869(0) ack 3885310014 win 5840 <mss 1460,nop,nop,sackOK>

здесь что-то не так
>[оверквотинг удален]
>00:25:39.116144 IP client_IP.2219 > GW_IP.PORT: . ack 1 win 17576
>00:25:39.116155 IP GW_IP.PORT > WEB_IP.80: . ack 1 win 17576
>00:25:39.182141 IP client_IP.2219 > GW_IP.PORT: P 1:406(405) ack 1 win 17576
>00:25:39.182164 IP GW_IP.PORT > WEB_IP.80: P 1:406(405) ack 1 win 17576
>00:25:39.182835 IP WEB_IP.80 > GW_IP.PORT: . ack 406 win 6432
>00:25:39.182841 IP GW_IP.PORT > client_IP.2219: . ack 406 win 6432
>00:25:39.183981 IP WEB_IP.80 > GW_IP.PORT: P 1:240(239) ack 406 win 6432
>00:25:39.183987 IP GW_IP.PORT > client_IP.2219: P 1:240(239) ack 406 win 6432
>00:25:39.306313 IP client_IP.2219 > GW_IP.PORT: . ack 240 win 17337
>00:25:39.306339 IP GW_IP.PORT > WEB_IP.80: . ack 240 win 17337

посмотри внимательно правильноли делал замену ИП адресовна "WEB_IP.80 > GW_IP.PORT"
вечером приду отпишу как должно выглядеть

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

19. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitry (??) on 09-Мрт-09, 17:38 
в том и дело, что по tcpdump`у всё правильно, нигде нет строки в которой клиент обращается напрямую к WEB или наоборот весь обмен через GW, кстати говоря PREROUTING вводил первым но с ключём -А (добавление в конец цепи, хоть там других и нет правил) а вот POSTROUTING с ключём -I те добавление в начало цепи, по другому пакеты до WEB не доходят и кстати в PREROUTING`е в правиле порт указываю иначе ответ идёт не на нужный порт GW а на всякие разные
iptables -t nat -D POSTROUTING -p tcp --src WEB_IP --sport 80 -j SNAT --to-source GW_IP:PORT


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

20. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitry (??) on 09-Мрт-09, 17:40 
извиняюсь ключик в POSTROUTE конечно -I а не -D :)


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

21. "Проброс порта наружу с помощью iptables"  
Сообщение от Oyyo on 09-Мрт-09, 22:30 
>iptables -t nat -D POSTROUTING -p tcp --src WEB_IP --sport 80 -j
>SNAT --to-source GW_IP:PORT

что-то этого правила я не понял

у меня когда что-то не получается, начинаю идти от простого ...
попробуй сначала без трансляции порта, тебе нужны всего два правила
1. запросы приходящие к тебе на 80-тый порт перенаправить на WEB_IP
если у тебя на GW крутится веб можешь остановить на время теста, и так

iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination WEB_IP

все запросы на 80 порт перенаправляем на WEB_IP, для того, чтоб ответы вернулись к нам с WEB_IP , перенаправленный запрос посылаем от имени GW

iptables -t nat -I POSTROUTING -o eth0 -d WEB_IP -j MASQUERADE

все запросы на WEB_IP маскарадим и ни какой трансляции портов в этом правле т.к. мы не можем знать с какого порта придёт запрос
если в таком виде заработает в PREROUTING добавь трансляцию порта,
в POSTROUTING трансляции не должно быть, только подмена исходящего адреса

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

22. "Проброс порта наружу с помощью iptables"  
Сообщение от Dmitriy (??) on 10-Мрт-09, 12:47 
блин вот я тёмный, разобрался
как оказалось на WEB_IP страничка, к которой было обращение, была не в корне htdocs, а в отдельном каталоге, а в корне был index в котором была одна строчка Location http://WEB_IP/в_папку/нужной_странички (те редирект ссылка с абсолютным путём)  - короче поправил редирект на относительный и всё заработало.
Спасибо Вам огромное  - мир не без добрых людей!


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

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

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




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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