LINUX.ORG.RU
ФорумAdmin

Проброс порта внутри сети


0

1

Читал мануалы и форумы облазил но увы, решил только половину задачи.
Стандартная ситуация: стоит шлюз на Debian и раздает в локалке инет. И тут мне понадобилось открыть свой локальный http для всей локалки и всего мира.
Удалось реализовать схему: из вне на машину в локалке.
Внешний мир -> 90.ХХХ.89.ХХХ:15000 -> 192.168.1.11:80
А мне нужно еще из локалки на машину в локалке:
192.168.1.22 -> 192.168.1.1:15000 -> 192.168.1.11:80

# Generated by iptables-save v1.2.11 on Wed Jan 19 22:16:53 2011
*nat
:PREROUTING ACCEPT [617:41665]
:POSTROUTING ACCEPT [202:12152]
-A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
-A PREROUTING -i ppp0 -p tcp --dport 15000 -j DNAT --to-destination 192.168.1.11:80
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Wed Jan 19 22:16:53 2011

# Generated by iptables-save v1.2.11 on Wed Jan 19 22:16:53 2011
*mangle
:PREROUTING ACCEPT [18311947:11615197157]
:INPUT ACCEPT [14728272:10657466878]
:FORWARD ACCEPT [3583675:957730279]
:OUTPUT ACCEPT [15426176:11611524884]
:POSTROUTING ACCEPT [19009852:12569255183]
COMMIT
# Completed on Wed Jan 19 22:16:53 2011

# Generated by iptables-save v1.2.11 on Wed Jan 19 22:16:53 2011

*filter
:INPUT ACCEPT [5238:2657284]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5655:2834513]

## политика по умолчанию
-P INPUT ACCEPT
-P FORWARD DROP


## Установка коректировки TCPMSS
-I FORWARD -i eth1 -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

## Разрешить для установленных соединений
-A FORWARD -d 192.168.1.0/255.255.255.0 -m state --state RELATED,ESTABLISHED -j ACCEPT

## Разрешить прием первого пакета из ethernet
-A FORWARD -i ppp0 -d 192.168.1.0/255.255.255.0 -m state --state NEW -o eth1 -j ACCEPT

## Запуск проверки
-A FORWARD -i eth1 -o ppp0 -j ACCEPT

COMMIT
# Completed on Wed Jan 19 22:16:53 2011

-A PREROUTING -i ppp0 -p tcp --dport 15000 -j DNAT --to-destination 192.168.1.11:80

-o, --out-interface name
              Name of an interface via which a packet is going to be sent (for packets entering the FORWARD, OUTPUT and POSTROUTING chains).  When the "!" argument is used before the interface name, the
              sense is inverted.  If the interface name ends in a "+", then any interface which begins with this name will match.  If this option is omitted, any interface name will match.

Сам переделать сможешь ?

dada ★★★★★
()
Последнее исправление: dada (всего исправлений: 1)
Ответ на: комментарий от dada

Скорее всего нет.
Потому что, я не могу понять куда и откуда пакет должен идти. Я программист и не сильно углубленно разбираюсь в сетях, не мое немного, но задачу решить нужно.
Можете мне объяснить путь пакета при реализации двух задач доступ к локальной машине через проброс порта из вне и из локальной сети?
eth0 - смотрит на провайдера
eth1 - смотрит в локалку с ip 192.168.1.1
ppp0 - инет

Rafic
() автор топика
Ответ на: комментарий от dada

iptables-restore v1.4.8: Can't use -o with PREROUTING

Значит нужно другое решение=) Я пробовал вот так

-A PREROUTING -i eth1 -p tcp --dport 15000 -j DNAT --to-destination 192.168.1.11:80
Но толку нет=( Наверное потому что нужно явно указывать в какой интерфейс должен идти пакет.

Rafic
() автор топика
Ответ на: комментарий от Rafic

Думаю тут надо обязательно добавить правило:

iptables -A FORWARD -i eth1 -o eth1 -j ACCEPT

Acceptor ★★
()
Ответ на: комментарий от Rafic

я не оч понимаю чего ты хочешь добиться. Тебе надо чтобы 80 порт был доступен на ppp0 и при этом пробрасывался на 192.168.1.11:80?

Или ты хочешь чтобы запрос к шлюзу на eth1 перенаправлялся на 192.168.1.11:80?

Acceptor ★★
()
Ответ на: комментарий от Rafic

если внутри локалки, то:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to <IP ТВОЕГО ШЛЮЗА>:80
iptables -t nat -A POSTROUTING -p tcp -d <IP ТВОЕГО ШЛЮЗА> --dport 80 -j SNAT --to-source 192.168.1.11

на эту же тему: iptables PREROUTING

потрясная картинка для понимания iptables http://blog.frolov.at/wp-content/uploads/2010/10/packet_flow9.png

Acceptor ★★
()
Последнее исправление: Acceptor (всего исправлений: 3)

объясни что мешает машинам из твоей сети обращаться к твоему сайту напрямую? почему они должны для этого идти через шлюз??

в этом нет абсолютно никакой логики, если же есть, поясните.

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

nerve ★★
()
Ответ на: комментарий от Acceptor

Acceptor, спасибо. Многое прояснилось но не до конца.
Задача нарисована http://i.piccy.info/i7/34328d2b40ba8e16b78172ef64d831a2/4-57-1028/16197393/Bez_ymeny_1.jpg
Под клиентами указано по каким адресам они должны иметь доступ.

Rafic
() автор топика
Ответ на: комментарий от nerve

Да, вы правы. Задача не совсем логична.Но это нужно для того, чтобы не светить ip адрес машины с вебсервером так как сервер одного из клиентов и доступ разрешается на время разработки проекта. После проброс порта будет удален и никто ничего не знает. А так придется потом на клиентской машине лепить какие-то костыли для запрета доступа...не хорошо.

Rafic
() автор топика
Ответ на: комментарий от Rafic

Вроде, понял, тогда записи в iptables должны быть следующие:

# проброс по локалке
iptables -A FORWARD -i eth1 -o eth1 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 15000 -j DNAT --to 192.168.1.1:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.1 --dport 80 -j SNAT --to-source 192.168.1.11
# проброс извне
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 15000 -j DNAT --to-destination 192.168.1.11:80
iptables -A FORWARD -p tcp -i ppp0 --dport 80 -d 192.168.1.11 -j ACCEPT

проверь.

Acceptor ★★
()
Последнее исправление: Acceptor (всего исправлений: 1)
Ответ на: комментарий от Acceptor

еще вариант:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 15000 -j DNAT --to 192.168.1.11:80
iptables -t nat -A POSTROUTING -o eth1 -p tcp -d 192.168.1.11 --dport 80 -j SNAT --to-source 192.168.1.1

nerve ★★
()
Ответ на: комментарий от Rafic

а порт то зачем подделывать? ))) это ж уже лишнее )

Acceptor ★★
()
Ответ на: комментарий от Rafic

если только не надо светить ip адрес машины то и не надо его никому давать и знать.

Пусть пользователи знают только внешний ip с нужным портом и пользуются им.

kpush
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.