Nginx透明IP – 通过负载均衡器路由服务器响应,而不是直接到客户端

我已经被赋予了在Nginx上设置透明IP的任务,以便将客户端地址和端口传递给上游服务器。 设置看起来像这样:

Client --> Nginx (listens for udp on 90009) --> Service (listens on localhost:59153) 

Nginx和Service是在同一台主机上build立的。

基本设置工作没有任何问题 – 请求被nginx捕获,被路由到服务,服务响应到nginx,并返回到客户端。

预期的行为是通过请求源IP服务,所以我设置nginx像这样:

 stream { upstream upstream_servers { server 127.0.0.1:59153; } server { listen 90009 udp; proxy_bind $remote_addr:$remote_port transparent; proxy_pass upstream_servers; } } 

proxy_bind $remote_addr:$remote_port transparent; 正确地执行它的工作ip/port被传递给nginx后面的服务。 然而,服务(不奇怪)是试图直接响应给定的ip/port 。 与外部世界的通信只允许在端口90009上进行,所以不会传递响应。

我试图做的是将基于IP透明和直接服务器返回的响应作为透明代理路由到NGINX和NGINX Plus 。 所以我做了以下几点:

 iptables -t mangle -N DIVERT iptables -t mangle -A PREROUTING -p udp -m socket -j DIVERT iptables -t mangle -A DIVERT -j MARK --set-mark 1 iptables -t mangle -A DIVERT -j ACCEPT iptables -t mangle -A PREROUTING -p udp -m socket -j TPROXY --tproxy-mark 1 --on-port 90009 ip rule add fwmark 1 lookup 100 ip route add local 0.0.0.0/0 dev lo table 100 

但是这会导致两种结果之一,这取决于我如何定义iptables -t mangle -A PREROUTING -p udp -m socket -j TPROXY --tproxy-mark 1 --on-port 90009

  1. 收入UDP包被路由,并且请求永远不会到达nginx
  2. 没有任何包被路由,响应没有被传送

我的问题基本上是,如何通过loadbalancer路由响应,或者,如果这种做法是错误的,如何试图解决这个问题?