LINUX.ORG.RU
ФорумAdmin

коннект с local IP на local IP через NAT


0

0

Господа админы, не поможите разрешить след. задачку малой кровью (без vpn)

Ситуация: есть клиентское приложение, которое умеет коннектится только на локальные адреса (серии 192.168.xx) есть серверное приложение которое умеет принимать коннект только с локальных адресов (и биндиться только на лок. адреса).

К каждого клиента уже имеется программка, реализующая простенький NAT (клиенты коннектятся всегда сами к себе, а программка пробрасывает коннект куда скажут). Также все клиенты сидят за NAT провайдера, по-админить который нам нельзя.

Есть сервер в интернете с реальным IP. его можно админить как угодно и сколько угодно.

Задача: как сделать коннект от клиентского приложения к серверному приложению по протоколам tсp и udp

Плясал вокруг DNAT и SNAT но так ничего и не станцевалось. Может подкажите верный путь?

1. DNAT на клиенте, чтобы вместо 192.168.0.1 шел на IP вашего сервера.
2. SNAT на сервере в Internet, чтобы вместо IP вашего провайдерского NAT шел с IP 192.168.0.1.

Всё.

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

Если программка хитрая, то придется еще в п.2 менять TTL через mangle таблицу.

Да, в п.1 имел ввиду IP вашего Internet-сервера.

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

>SNAT на сервере в Internet, чтобы вместо IP вашего провайдерского NAT шел с IP 192.168.0.1

Вот тут можно поподробнее? В этом случае несколько клиентов смогут подключиться к одному серверу или нет?

Спасибо за совет, сегодня вечером буду пробовать.

redbaron ★★
() автор топика

Ssh-туннелинг здесь тоже слишком гемморно? Он просто сделает необходимую переадресацию. Все-таки это не впн :)

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

Проблема видимо в том, что НЕ транзитный пакет, т.е. предназначанный для самого хоста, на котором запущен iptables, не проходит цепочку POSTROUTING таблицы nat. А правило подмены адреса источника (SNAT) работает только в ней. =(( Может есть еще идеи?

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

Т.е. по сути задача свелась к следующей: как получить функционал аналогичный по смыслу -j SNAT в цеполчке PREROUTING таблицы nat.

может новую ветку создать? =)

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

Ну что? неужели нет решения? Как-то не логично получается - для другого узла подменять обратный адрес можно, а для себя - нет.

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

Уже все что только можно и это тоже посмотрел. Везде есть брэндмауэр и какой-то другой сервер. В этом случае все идеально - после цепочки -t nat PREROUTING выполняется FORWARD а потом -t nat POSTROUTING где и делают SNAT.

Но это не работает если и брэндмауэр и сервер это одна машина. В этом случае никакая цепочка POSTROUTING никогда не исполняется, а испоняется INPUT, где правило SNAT выполнять нельзя.

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

Можно сделать на машине 1 неиспользуемую нигде подсеть, в которую замаршрутизировать пакет :-\

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

man iptables, дурень

И вместо "... -t nat -А POSTROUTING где и делают SNAT ..." делай

-t nat -А OUTPUT -j SNAT    и будет тебе счастье

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

А ты сам то man iptables читал?

OUTPUT (for altering locally-generated packets before routing) с каких это пор пакеты приходящие из инета стали locally-generated??

читаем man iptables дальше:

SNAT This target is only valid in the nat table, in the POSTROUTING chain.

видишь слово OUTPUT? я вот тоже не вижу, зато вижу ONLY.

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