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),无需关心后端变化。

相关推荐
秋刀鱼 ..5 分钟前
2026年光学、物理学与电子信息国际学术会议(OPEI 2026)
运维·人工智能·科技·金融·机器人
乾元11 分钟前
Syslog / Flow / Telemetry 的 AI 聚合与异常检测实战(可观测性)
运维·网络·人工智能·网络协议·华为·自动化·ansible
liebe1*123 分钟前
第八章 防火墙高可靠性技术
运维·服务器·网络
DN金猿37 分钟前
jenkins 权限控制(用户只能看指定的项目)
linux·运维·服务器·jenkins
長安一片月39 分钟前
操作系统之进程和线程
linux·运维·服务器
邵小的运维之路1 小时前
静态路由与 BFD 联动
运维·网络·智能路由器
代码游侠1 小时前
学习笔记——Linux 进程管理笔记
linux·运维·笔记·学习·算法
Logic1011 小时前
《数据库运维》 郭文明 实验5 数据库性能监视与优化实验核心操作与思路解析
运维·数据库·sql·mysql·计算机网络技术·形考作业·国家开放大学
ooolmf1 小时前
【无标题】TemperatureMonitor.m matlab2024串口监控温度run_temperature_monitor.m
linux·运维·网络
lingggggaaaa1 小时前
CS配合CrossC2插件,实现MacOS/Linux上线
linux·运维·笔记·安全·macos