LINUX.ORG.RU
ФорумAdmin

Пробросить порт


0

0

Есть сервер с двумя интерфейсами IP_LOCAL и IP_INET.
К серверу через модем подключаются клиенты для выхода в инет с адресами IP_VPN/24.
В локальной сети стоит машина с установленным сервером ventrrilo адресом IP_VENT и портом 3784.
Задача сделать доступным этот сервер для пользователей модемов по адресу IP_INET.
Что пробовал.
1. Прокинул порт 3784

iptables -t nat -A PREROUTING --dst $IP_INET -p tcp --dport 3784 -j DNAT --to-destination $IP_VENT
После этого все внешние клиенты стали нормально заходить на сервер.
2. Обычный NAT
iptables -t nat -A POSTROUTING -s $IP_VPN/24 -j SNAT --to-source $IP_INET
3. Для внутренних клиентов
iptables -t nat -A POSTROUTING -p tcp --dst $IP_VENT --dport 3784 -j SNAT --to-source $IP_LOCAL
И не работает для пользователей IP_VPN. Что я сделал не так и что нужно добавить.


Видимо потому-что после того как к трафику применён SNAT, то остальные правила в этой цепочке для него не применяются, тоесть фактически выполняется неявный ACCEPT.
Либо расположите третье правило выше второго, либо сделайте так, чтобы область действия этих правил не пересекалась (укажите названия интерфейсов, добавьте \! -d $LOCAL_NET, etc)

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

Поменял местами 2 и 3 правила. Так ничего и не заработало.

mnk ()
Ответ на: комментарий от nnz

В принципе понятно, что происходит.
Пакет с IP_VPN проходит все цепочки и в posrouting`e попадает в NAT, а в цепочку, которая пробрасывает порт уже не попадает, вот поэтому и не работает.
Надо сделать NAT для порта 3784 и адресов IP_VPN в цепочке prerouting, до правила проброски порта.
Может, конечно я и не прав.
Может кто поможет с этим правилом?

mnk ()

Давайте весь набор правил, а то непонятно, может там у вас в FORWARD запрещено прохождение таких пакетов.

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

Я имел в виду примерно следующее:
iptables -t nat -F
iptables -t nat -A PREROUTING -d $IP_INET -p tcp --dport 3784 -j DNAT --to-destination $IP_VENT
iptables -t nat -A POSTROUTING -o $INT_IF -p tcp -d $IP_VENT --dport 3784 -j SNAT --to-source $IP_LOCAL
iptables -t nat -A POSTROUTING -o $EXT_IF -j SNAT --to-source $IP_INET
iptables -I FORWARD -p tcp -d $IP_VENT --dport 3784 -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Полагаю, обозначения $INT_IF и $EXT_IF понятны.

anonymous ()
Ответ на: комментарий от mnk

>Пакет с IP_VPN проходит все цепочки

а в цепочку, которая пробрасывает порт уже не попадает,

PREROUTING --- первая цепочка. Добавьте в правило:

iptables -t nat -A POSTROUTING -s $IP_VPN/24 -j SNAT --to-source $IP_INET

опцию "-o ..." и смотрите пакеты на ppp и локальном интерфесе с помощью tcpdump. Может все пакеты и проходят, а проблема в другом.

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