You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx Plus UDP透明代理异常:伪造数据包未抵达上游服务器

排查UDP透明代理(Origin-NAT)数据未达上游的问题

结合你的配置、抓包信息和操作步骤,我帮你梳理几个核心问题和解决方向:

1. 端口配置完全不匹配(最致命的问题)

你的Nginx Stream配置里监听的是5684端口:

server {
    listen 5684 udp;
    # 其他配置...
}

但tcpdump显示客户端发送到LB的是5656端口,LB尝试转发的也是5656端口到上游。这意味着Nginx根本没在监听5656端口,这些UDP数据包完全没被Nginx处理,自然不会转发到上游服务器。

解决办法:

  • 要么把Nginx的listen端口改成5656 udp;,匹配实际的业务端口;
  • 要么调整客户端的请求端口到5684,和配置一致。

2. 上游服务器抓包命令错误

你在上游执行的抓包命令是:

sudo tcpdump -i eth0 -n port 5684

但LB转发的是5656端口的流量,这个命令根本捕获不到目标数据包。你应该修改为:

sudo tcpdump -i eth0 -n port 5656

这样才能看到LB发来的UDP包。

3. 透明代理依赖的系统配置缺失

Nginx Plus的UDP透明代理(Origin-NAT模式)不仅需要Nginx配置,还必须完成系统层面的配置:

  • 开启IP转发:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    编辑/etc/sysctl.conf添加net.ipv4.ip_forward=1,执行sudo sysctl -p永久生效。
  • 允许绑定非本地IP:
    echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
    
    同样写入/etc/sysctl.conf并生效,这个参数让Nginx能绑定客户端的IP(非LB本地IP)实现透明代理。
  • 确认Nginx权限:你已经设置user root;,满足透明代理需要的CAP_NET_RAW和CAP_NET_ADMIN权限,这部分没问题。

4. 防火墙过滤规则排查

检查LB和上游服务器的防火墙是否拦截了UDP 5656的流量:

  • 在LB上检查IPtables/UFW规则:
    sudo iptables -L -n -v | grep 5656
    sudo ufw status
    
    确保允许UDP 5656的入站和出站流量。
  • 在上游服务器上检查是否允许来自LB的UDP 5656入站流量,若使用UFW,可添加规则:
    sudo ufw allow from 217.182.A.B/32 to any port 5656 proto udp
    
    (替换217.182.A.B为你的LB实际IP)

5. UDP校验和错误的说明

你看到的[bad udp cksum]大概率是误报:在LB上抓出站包时,数据包还没经过网卡硬件计算校验和(即使你关闭了tx offload,Nginx计算校验和的时机可能晚于tcpdump抓包),所以tcpdump会显示校验和错误。这个不是上游收不到包的根本原因,不用过度关注。


内容的提问来源于stack exchange,提问作者SCO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:00:54