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 подключение не доходит

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Bers666 ★★★★★ ()