Proxy TCP transparent NGINX

J’ai une stack ELK. Devant les deux hôtes Logstash, j’ai configuré deux équilibreurs de charge NGINX en tant que proxy transparent. Le trafic UDP fonctionne comme un charme. TCP fonctionne avec la configuration:

stream { upstream syslog { server sapvmlogstash01.sa.projectplace.com:514; server sapvmlogstash02.sa.projectplace.com:514; } server { listen 514; proxy_pass syslog; } } 

Mais je reçois en tant que source_ip et source_host le LB au lieu de l’adresse IP du serveur d’entrée.

Définir le même ajout de proxy_bind $remote_addr transparent; ne fonctionne pas, jetant un délai d’attente.

 *1 upstream timed out (110: Connection timed out) while connecting to upstream, client: $SOURCEHOST_IP, server: 0.0.0.0:514, upstream: "$LOGSTASH_IP:514", bytes from/to client:0/0, bytes from/to upstream:0/0 

J’ai essayé de configurer TPROXY à partir d’ici: https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/

Hôte logstash:

 route add default gw $NGINX_IP route del default gw $DEFAULT_GW 

Hôte NGINX:

 # Following nginx how-to iptables -t mangle -N DIVERT iptables -t mangle -A PREROUTING -p udp -m socket -j DIVERT iptables -t mangle -A DIVERT -j MARK --set-xmark 0x1/0xffffffff iptables -t mangle -A DIVERT -j ACCEPT iptables -t mangle -A PREROUTING -p tcp -s $LOGSTASH_IP/24 --sport 514 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 0 ip rule add fwmark 1 lookup 100 ip route add local 0.0.0.0/0 dev lo table 100 # Enabling Upstream Servers to Reach External Servers sysctl -w net.ipv4.ip_forward=1 iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE 

Mais échoue toujours comme avant avec le Timeout.

Qu’est-ce qui manque pour obtenir un hôte TCP transparent?