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

相关推荐
珠海西格电力科技34 分钟前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀1 小时前
Linux环境变量
linux·运维·服务器
zzzsde1 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º3 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~3 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
神梦流3 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器
Lsir10110_4 小时前
【Linux】进程信号(下半)
linux·运维·服务器
skywalk81634 小时前
unbound dns解析出现问题,寻求解决之道
运维·服务器·dns·unbound
酉鬼女又兒4 小时前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面4 小时前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能