Назад | Перейти на главную страницу

Получение IP «запрашивающего» при выполнении iptables NAT

Я выполняю переадресацию трафика NAT с помощью iptables (1.1.1.1 => 2.2.2.2) со следующими командами:

iptables -t nat -A PREROUTING -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2
iptables -t nat -A POSTROUTING -d 2.2.2.2 -j SNAT --to 1.1.1.1

Он отлично работает, за исключением одного: если я проверю журналы apache, выполняю правила брандмауэра и т.д. на сервере 2.2.2.2, похоже, что весь трафик идет с 1.1.1.1.

Конечно, это имеет смысл, поскольку именно 1.1.1.1 пересылает трафик на 2.2.2.2, но я предполагал, что NAT будет передавать исходный IP-адрес «запрашивающего» в пакете?

Есть ли способ сделать так, чтобы трафик на 2.2.2.2 имел "настоящий" оригинальный IP?

В настоящее время очень сложно установить хорошие правила брандмауэра и другие элементы безопасности, поскольку ВСЕ трафик, похоже, исходит из версии 1.1.1.1, независимо от того, откуда на самом деле исходит исходный трафик.

Apache никогда не увидит IP за NAT. Конечная система 2.2.2.2 не знает ничего, кроме 1.1.1.1. Единственный способ получить исходный IP-адрес запрашивающей стороны - это встроить какой-нибудь javascript или клиентский код, который запускает эквивалент ipconfig или ifconfig на клиенте и передает этот вывод на веб-сервер как часть POST. Однако это обычно не одобряется.