Nginx UDP负载余额透明代理源IP



我已经在AWS上设置了Nginx负载平衡器,将UDP数据包转发到一系列半径服务器(UDP:1812)。我正在努力使透明模式正常工作 - proxy_bind...正确。我需要源IP!

使用以下配置,数据包未转发到服务器(我使用上游服务器上的TCPDUMP检查了)。我可以看到在日志中和通过NGINX服务器上的TCPDUMP收到的数据包。

user root;
worker_processes 1;
daemon off;
events {
    worker_connections  1024;
}
stream {
    upstream auth_servers {
        server radius.xxx:1812;
    }
    server {
        listen 1812 udp;
        error_log  /var/log/nginx/radius.log debug;
        proxy_responses 0;
        proxy_bind $remote_addr transparent;
        proxy_pass auth_servers;
    }
}

所以我尝试启用IPv4转发:

sudo sysctl -w net.ipv4.ip_forward=1

仍然没有任何击中上游。

所以,我尝试添加以下iptables规则:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

和繁荣!我在上游服务器上看到流量。...但是源IP是Nginx服务器的流量(我猜是因为darn伪装规则)。

所以,我在本地尝试了几个o'virtualbox图像。如果我将侦听器绑定到机器的IP,我就可以使转发开始工作。

在这种情况下,我尝试使用VPC IP进行操作 - 完全没有成功。

尝试了三个分布 - 现在实际上一切...

我正在寻找一种获取实际源IP的方法。

对于那些仍然想要此用途答案的人:

server {
  proxy_bind   $remote_addr:$remote_port transparent;
}

最新更新