LINUX.ORG.RU
решено ФорумAdmin

пробросить порт с сохранением исходного ip адреса

 ,


0

2

Client29 -> PortMappingServer(172.16.10.211) -> Server25(172.16.10.229:1022)

есть промежуточный сервер PortMappingServer, к которому подключается несколько клиентов весь трафик пробрасывается к Server25, нужно на сервере 25 получить айпи адрес клиента 29.

net.ipv4.ip_forward = 1

Пробую таким правилом

iptables -t nat -I PREROUTING -i enp0s3 -d 172.16.10.211 -p tcp –dport 1022 -j DNAT –to-destination 172.16.10.229:1022

iptables -p tcp -A FORWARD -d 172.16.10.229 –dport 1022 -j ACCEPT

до 172.16.10.229 подключение не доходит

напишите, пожалуйста, работающее правило

заранее спасибо



Последнее исправление: linupmake (всего исправлений: 1)

Может IP шлюза у клиентов вносит свой вклад? :)

Bootmen ☆☆☆
()

Как-бы так извратиться и написать по-новому, не так как в сотнях ответах тут на этот надоевший вопрос...

Вот. Придумал.

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

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

то есть на уровне tcp не решаемо? И если не локальная сеть, тогда вообще никак не пробросить адрес источника?

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

То, чего ты хочешь – нерешаемо на уровне L3. NAT это всегда перезапись адреса источника. То что тебе нужно – это проксирование с внесением заголовков X-Forwarded-For, X-Originating-IP и т.п. пакеты на уровне L4 и выше, если протокол это поддерживает.

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

У iptables есть решения. Но, входящие IP будут светится как IP машинки шлюза. Что не устраивает ни одного Админа.

Bootmen ☆☆☆
()
Ответ на: комментарий от Bers666

Вам грили про шлюз выше? Шлюз стандартный. Может на какой сиске.

Bootmen ☆☆☆
()
Последнее исправление: Bootmen (всего исправлений: 1)

То, что ты хочешь IMHO хорошо укладывается в LVS в варианте DR.

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

Ответные пакеты не придут.

Вам грили про шлюз выше? Шлюз стандартный. Может на какой сиске.

сделать с помощью ip rules + iptables cgroups для этого процесса НЕстандартный шлюз. Т.е. тот самый PortMappingServer

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

Если я правильно понимаю твой вариант с DNAT без SNAT, то клиентские пакеты, пролетая через «PortMappingServer» будут получать изменение destination IP/MAC, обратные же пакеты будут отправлены напрямую клиенту в ответку, который радостно их откинет как невалидные, т.к. с отвечающим ему сервером у него установленных сетевых соединений нет.

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

Если на сервере приложения стоит шлюзом тот маппингсервер, то все будет работать.

Блин банальный порт форвардинг в домашних роутерах так работает - dnat без snat.

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

Нет. Посмотри внимательно на адреса. Они в одной сети. получаем асимметричнное хожение пакетов -> nat не работет, либо нарушение условий задания в случая dnat:snat

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

прошу прощения, некорректно использовал адрес для примера 172.16.10.

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

я уже понял что не решаемо на сетевом уровне

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

все в разных местах глобальной сети(WAN).

С этого надо было начинать! Тогда делаем так:

1. между PortMappingServer, Server25 делаем туннель типа 10.0.0.1:10.0.0.2. Подойдет хоть ipip.

2. на PortMappingServer, делаем DNAT в туннель.

3. на Server25: маркируем соединения, приходящие из туннеля. Для таких маркированных соединений ставим шлюз 10.0.0.1

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