Добрый день
Вообще-то все описано https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy
У меня для Linux нарисована такая инструкция, может есть какие-то неточности:
-- NGINX должен осуществлять привязку к локальному сокету любого адреса (внешнего адреса клиента), поэтому он должен работать с правами root (что есть весьма несекурно, тем более что он торчит наружу):
user root
...
server {
...
proxy_bind $remote_addr transparent;
...
}
-- Маршрутизировать все требуемые пакеты внутри себя (не выпускать наружу). Правила сохранены в /etc/sysconfig/iptables, маршрутизация в route-eth0, rule-eth0 каталога /etc/sysconfig/network-scripts. (Чтоб правила подхватились в CentOS 7 надо запретить NetworkManager.service, Firewall.service и разрешить network.service, iptables.service, либо научиться настраивать Firewall.service):
iptables -t mangle -N DIVERT # Новая цепочка
iptables -t mangle -A DIVERT -j MARK --set-mark 0x1/0xffffffff # Просто маркируем пакет
iptables -t mangle -A DIVERT -j ACCEPT # И пропускаем
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT # Все пакеты для уже открытых сокетов отправляются в DIVERT, где просто помечаются
iptables -t mangle -A PREROUTING -p tcp -m multiport --sport 443,10443,8080,8081 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 0
# Все ответы от серверов помечаем и пробрасываем на localhost:0
ip rule add fwmark 1 lookup 100 # Все маркированные пакеты обрабатываем таблицей маршрутизации 100
ip route add local 0.0.0.0/0 dev lo table 100 # Где просто обрабатываем их локально
ip route flush cache
-- На проксируемых (upstream) серверах возвращать ответы на NGINX, независимо от адреса назначения (Default route to NGINX). Для этого можно поднять фиктивный интерфейс, куда и ходит именно NGINX в той же подсети. HTTP-сервер должен слушать этот адрес. Это прописывается в файлах ifcfg-eth0:0, route-eth0:0, rule-eth0:0 каталога /etc/sysconfig/network-scripts:
ip addr add IP_адрес_интерфейса/27 brd broadcast_интерфейса dev eth0 label eth0:0 # Адрес куда ходит NGINX
ip rule from IP_адрес_интерфейса table 100 # Все пакеты с этого адреса обрабатываются таблицей маршрутизации 100
ip route IP_адрес_интерфейса dev eth0 proto kernel scope link src IP_адрес_интерфейса table 100 # Где прописан сам этот адрес
ip route default via IP_адрес_сервера_NGINX dev eth0 table 100 # И дефолтовый маршрут на NGINX
ip route flush cache