Nginx 四层(stream)反向代理 + DNS 负载均衡

一、实验目标

  1. 用 Nginx(IP:192.168.65.135)做四层反向代理,将 53/udp 请求轮询转发到两台权威 DNS:

    • 192.168.65.131

    • 192.168.65.132

  2. 验证:外部查询 dns.xiaott.org 时,135 端口返回的结果在 131/132 之间切换,且均带 aa(权威)标志。

──────────────────────────────────

二、实验拓扑

复制代码
Client ──UDP/53──► 192.168.65.135 (Nginx stream)
                    ├─► 192.168.65.131:53 (BIND)  
                    └─► 192.168.65.132:53 (BIND)

──────────────────────────────────

三、环境信息

角色 IP 软件/版本 备注
Nginx Proxy 192.168.65.135 nginx-1.24.0 --with-stream 已启用 stream 模块
DNS-1 192.168.65.131 bind-9.16.23 权威域:xiaott.org
DNS-2 192.168.65.132 bind-9.16.23 权威域:xiaott.org
Client 192.168.65.x dig 9.16.23 用于测试

──────────────────────────────────

四、DNS 权威服务器配置(131 & 132)

  1. 区域文件 /var/named/xiaott.org.zone(两台内容一致,仅 serial 不同,便于观察)

    $TTL 1D
    @ IN SOA dns.xiaott.org. root.xiaott.org. (
    2025072801 ; serial on 131
    1D 1H 1W 3H )
    IN NS dns.xiaott.org.
    dns IN A 192.168.65.131 ; <-- 131 上
    bbs IN A 192.168.65.131

    $TTL 1D
    @ IN SOA dns.xiaott.org. root.xiaott.org. (
    2025072802 ; serial on 132
    1D 1H 1W 3H )
    IN NS dns.xiaott.org.
    dns IN A 192.168.65.132 ; <-- 132 上
    bbs IN A 192.168.65.132

  1. 启动并验证

    systemctl enable --now named
    named-checkzone xiaott.org /var/named/xiaott.org.zone
    dig @127.0.0.1 dns.xiaott.org +short

返回各自 IP 表示权威服务器正常。

──────────────────────────────────

五、Nginx 四层反向代理配置(135)

  1. 目录结构

    /usr/local/nginx/
    └── tcp.d/
    └── dns.conf

  2. 内容:/usr/local/nginx/tcp.d/dns.conf

    stream {
    upstream dns_cluster {
    server 192.168.65.131:53 max_fails=3 fail_timeout=5s;
    server 192.168.65.132:53 max_fails=3 fail_timeout=5s;
    }

    复制代码
     server {
         listen 53 udp;               # 四层 UDP
         proxy_pass dns_cluster;
         proxy_responses 1;           # 等待 1 个 DNS 响应
         proxy_timeout 1s;
     }

    }

  1. 引入主配置

    nginx.confinclude 区域添加:

include /usr/local/nginx/tcp.d/*.conf;

  1. 启动 Nginx

    nginx -t # 语法检查
    systemctl reload nginx
    ss -unlp | grep 53 # 确认 135 正在监听 udp/53

──────────────────────────────────

六、测试与现象记录

序号 客户端命令 返回 IP 来源服务器 备注
1 dig @192.168.65.135 dns.xiaott.org 192.168.65.131 DNS-1 aa 标志
2 再次执行 192.168.65.132 DNS-2 轮询到第二台
3 关闭 131 的 named 仅 132 返回 DNS-2 故障转移
4 重启 131 131/132 交替出现 负载均衡恢复

抓包验证(135 上):

tcpdump -i any -nn udp port 53 and host 192.168.65.135

可看到源端口 53 的报文交替发往 131 与 132。

──────────────────────────────────

七、结论

  1. Nginx 成功以四层 UDP 反向代理将 53 端口请求轮询到后端两台权威 DNS。

  2. 通过 max_failsfail_timeout 实现健康检查与故障摘除。

  3. 客户端始终感知单一入口(192.168.65.135),无需关心后端变化。

相关推荐
ping某1 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes