Я выполняю переадресацию трафика 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. Однако это обычно не одобряется.