【问题标题】:Nginx UDP load balance transparent proxy source IPNginx UDP负载均衡透明代理源IP
【发布时间】:2021-10-02 09:17:36
【问题描述】:

我在 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 服务器的(我猜是因为该死的 MASQUERADE 规则)。

所以,我在本地尝试了几个虚拟盒图像。如果我将侦听器绑定到机器的 IP,我就能够让转发工作。

在这种情况下,我尝试使用 VPC IP 这样做 - 完全不成功。

已经尝试了三种发行版 - 现在几乎所有...

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

【问题讨论】:

  • 我怀疑您解决此问题的方法存在其他潜在问题,但任何时候 EC2 实例正在处理数据包时,您都必须在实例上 disable the IP Source/Dest Check 以防止网络将数据包丢弃为废话。
  • 谢谢,为上游带来了流量。我可以看到从上游发送回客户端的响应。我们已按照nginx.com/blog/… 将其路由到负载均衡器。还创建了自定义防火墙规则等。我可以看到回复被发送回客户端,但从未看到它到达客户端。如果这是有道理的。

标签: nginx amazon-ec2 udp


【解决方案1】:

对于那些仍然想知道这个用途的人:

server {
  proxy_bind   $remote_addr:$remote_port transparent;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多