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

Исходное сообщение
"DNAT d iptables"

Отправлено silent79 , 27-Окт-10 14:12 
Доброго времени суток.
У меня такой вопрос. Есть сервер на который приходит интернет и есть второй сервер на котором работает сервер БД. На первом сервере в iptables написано правило для переброса порта на второй сервер.

iptables -t nat -I PREROUTING -d 0.0.0.0/0 -p tcp --dport 64005 -j DNAT --to-destination 192.168.1.223
iptables -I FORWARD -s 0.0.0.0/0 -d 192.168.1.223 -p tcp --dport 64005 -j ACCEPT

iptables -t nat -I POSTROUTING -s 0.0.0.0/0 -d 192.168.1.223 -p tcp --dport 64005 -j SNAT --to-source 192.168.1.222
iptables -I FORWARD -d 0.0.0.0/0 -s 192.168.1.223 -p tcp --sport 64005 -j ACCEPT

Данными правилами я пропускаю порт 64005 на компьютер 192.168.1.223 и наоборот. Все работает, проблем нет, но есть одно но... Когда клиент из интернета цепляется к БД на порт 64005, то на сервере 192.168.1.223 видно, что данный клиент пришел с адреса 192.168.1.222. И вопрос такой - как мне переделать правило, чтобы на сервере БД фиксировался IP адрес из интернета.

За ранее спасибо.


Содержание

Сообщения в этом обсуждении
"DNAT d iptables"
Отправлено reader , 27-Окт-10 14:50 
>[оверквотинг удален]
> 64005 -j SNAT --to-source 192.168.1.222
> iptables -I FORWARD -d 0.0.0.0/0 -s 192.168.1.223 -p tcp --sport 64005 -j
> ACCEPT
> Данными правилами я пропускаю порт 64005 на компьютер 192.168.1.223 и наоборот. Все
> работает, проблем нет, но есть одно но... Когда клиент из интернета
> цепляется к БД на порт 64005, то на сервере 192.168.1.223 видно,
> что данный клиент пришел с адреса 192.168.1.222. И вопрос такой -
> как мне переделать правило, чтобы на сервере БД фиксировался IP адрес
> из интернета.
> За ранее спасибо.

это из-за правила с SNAT, если на 192.168.1.223 шлюзом указан 192.168.1.222, то для пакетов пришедших не из 192.168.1.0 подсети это привило можно убрать


"DNAT d iptables"
Отправлено silent79 , 27-Окт-10 15:51 
> это из-за правила с SNAT, если на 192.168.1.223 шлюзом указан 192.168.1.222, то
> для пакетов пришедших не из 192.168.1.0 подсети это привило можно убрать

Без этого правила вообще не работает перенаправление порта. Пакеты до сервера БД доходят а от него нет.



"DNAT d iptables"
Отправлено reader , 27-Окт-10 16:13 
>> это из-за правила с SNAT, если на 192.168.1.223 шлюзом указан 192.168.1.222, то
>> для пакетов пришедших не из 192.168.1.0 подсети это привило можно убрать
> Без этого правила вообще не работает перенаправление порта. Пакеты до сервера БД
> доходят а от него нет.

откуда проверяете?
из 192.168.1.0 подсети?


"DNAT d iptables"
Отправлено silent79 , 27-Окт-10 16:38 
> откуда проверяете?
> из 192.168.1.0 подсети?

и из этой сети подсети и из интернета. Без этого правила не пропускает.



"DNAT d iptables"
Отправлено reader , 27-Окт-10 17:16 
>> откуда проверяете?
>> из 192.168.1.0 подсети?
> и из этой сети подсети и из интернета. Без этого правила не
> пропускает.

покажите iptables-save с этой машины и таблицу маршрутизации с 192.168.1.223.
есть ли firewall на 192.168.1.223?

из подсети 192.168.1.0 работать так и не должно. что бы и из локалки работало, то нужен snat или 192.168.1.223 выводить в другую подсеть.


"DNAT d iptables"
Отправлено sHaggY_caT , 28-Окт-10 02:43 
> Доброго времени суток.
> У меня такой вопрос. Есть сервер на который приходит интернет и есть
> второй сервер на котором работает сервер БД. На первом сервере в
> iptables написано правило для переброса порта на второй сервер.

У нас так:

-A PREROUTING -d EXT.IP.ADD.RES -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.XX.XX.18:80
-A FORWARD -d 10.XX.XX.18 -p tcp -m tcp --dport 80 -j ACCEPT

На web-сервере видно (в частности, это видит Nginx в данном примере, да и любой другой публикуемый сервис) с какого IP-адреса приходит запрос. Правила несколько избыточны, так как автоматически генерируются скриптом. Их всего два (на публикуемый сервис), они есть только на гейтвее, и отсуствуют на публикуемой вовне машине, и этого достаточно.


"DNAT d iptables"
Отправлено reader , 28-Окт-10 10:25 
>[оверквотинг удален]
>> iptables написано правило для переброса порта на второй сервер.
> У нас так:
> -A PREROUTING -d EXT.IP.ADD.RES -i eth1 -p tcp -m tcp --dport 80
> -j DNAT --to-destination 10.XX.XX.18:80
> -A FORWARD -d 10.XX.XX.18 -p tcp -m tcp --dport 80 -j ACCEPT
> На web-сервере видно (в частности, это видит Nginx в данном примере, да
> и любой другой публикуемый сервис) с какого IP-адреса приходит запрос. Правила
> несколько избыточны, так как автоматически генерируются скриптом. Их всего два (на
> публикуемый сервис), они есть только на гейтвее, и отсуствуют на публикуемой
> вовне машине, и этого достаточно.

а FORWARD от 10.XX.XX.18 можно не разрешать? :)


"DNAT d iptables"
Отправлено sHaggY_caT , 28-Окт-10 10:43 

> а FORWARD от 10.XX.XX.18 можно не разрешать? :)

У нас по умолчанию все стоит в DROP. Если не разрешить, то DNAT и не будет работать



"DNAT d iptables"
Отправлено reader , 28-Окт-10 10:49 
>> а FORWARD от 10.XX.XX.18 можно не разрешать? :)
> У нас по умолчанию все стоит в DROP. Если не разрешить, то
> DNAT и не будет работать

но в вашем примере это не отражено и тем не менее сказано что "этого достаточно".
а это умышленное введение человека в заблуждение :) .


"DNAT d iptables"
Отправлено sHaggY_caT , 28-Окт-10 11:14 
> но в вашем примере это не отражено и тем не менее сказано
> что "этого достаточно".

Вы правы, так нельзя

> а это умышленное введение человека в заблуждение :) .

Не умышленное, а просто подразумевалось, что таки, из сообраений элементарной предосторожности, FORWARD будет стоять в DROP.
Конечно, правила пакетного фильтра зависят от дистрибутива, но моем допущение не настолько и невероятно, Вы согласны в свою очередь?

Избыточность есть в указаниях вида: -p tcp -m tcp это как раз делает скрипт, и аналогично для более сложных случаев.
Но я не рискнула на сонную голову убирать лишнее, что бы топикстартер получил гарантированно работатоспособный вариант.


"DNAT d iptables"
Отправлено reader , 28-Окт-10 11:49 
>> но в вашем примере это не отражено и тем не менее сказано
>> что "этого достаточно".
> Вы правы, так нельзя
>> а это умышленное введение человека в заблуждение :) .
> Не умышленное, а просто подразумевалось, что таки, из сообраений элементарной предосторожности,
> FORWARD будет стоять в DROP.

полностью ЗА!
> Конечно, правила пакетного фильтра зависят от дистрибутива, но моем допущение не настолько
> и невероятно, Вы согласны в свою очередь?

мы о разном.
правило:
-A FORWARD -d 10.XX.XX.18 -p tcp -m tcp --dport 80 -j ACCEPT
подразумевает что по умолчанию FORWARD будет стоять в DROP, иначе это правило излишнее.
значит нужно правило и для ответных пакетов. и я о том что это правило нужно было упомянуть :) .


> Избыточность есть в указаниях вида: -p tcp -m tcp это как раз
> делает скрипт, и аналогично для более сложных случаев.
> Но я не рискнула на сонную голову убирать лишнее, что бы топикстартер
> получил гарантированно работатоспособный вариант.

-p tcp - я бы не назвал избыточным, но зависит от нужд, а -m tcp - iptables сам добавит.


"DNAT d iptables"
Отправлено Гусище , 29-Окт-10 12:18 
Попробуй заменить
>iptables -t nat -I POSTROUTING [u]-s 0.0.0.0/0[/u] -d 192.168.1.223 -p tcp --dport 64005 -j SNAT --to-source 192.168.1.222

на
iptables -t nat -I POSTROUTING [u]-s 192.168.1.0/24(я просто предполагаю, что это ваша подсеть)[/u] -d 192.168.1.223 -p tcp --dport 64005 -j SNAT --to-source 192.168.1.222


А вообще reader всё верно сказал в самом первом посте. Ты наверно полностью убрал блок
iptables -t nat -I POSTROUTING -s 0.0.0.0/0 -d 192.168.1.223 -p tcp --dport 64005 -j SNAT --to-source 192.168.1.222
[u]iptables -I FORWARD -d 0.0.0.0/0 -s 192.168.1.223 -p tcp --sport 64005 -j ACCEPT[/u]

и ничего не заработало. :)


"DNAT в iptables"
Отправлено silent79 , 29-Окт-10 23:38 
> А вообще reader всё верно сказал в самом первом посте. Ты наверно
> полностью убрал блок
> iptables -t nat -I POSTROUTING -s 0.0.0.0/0 -d 192.168.1.223 -p tcp --dport
> 64005 -j SNAT --to-source 192.168.1.222
> [u]iptables -I FORWARD -d 0.0.0.0/0 -s 192.168.1.223 -p tcp --sport 64005 -j
> ACCEPT[/u]
> и ничего не заработало. :)

Большое спасибо ВСЕМ за советы. Да, я действительно так сделал и не заработало. Точнее заработало, но отвалилась другая сеть. Проблема оказалась на сервере 192.168.1.223, на нем было прописано 2 шлюза. Пришлось их удалить и прописать маршруты руками на разные подсети, на 0.0.0.0 и 10.0.0.0