怎么用云主机搭建DNS?

HCRM技术_小炮 云主机 2026-05-04 2 0

搭建 DNS 服务器是云主机的常见用途之一,主要用于内网域名解析(如公司内部服务gitlab.company.internal)或搭建公共递归/权威 DNS(如缓存加速、自建根服务器),下面我会分两种场景,给出最简洁、常用的 Ubuntu/Debian 系统操作步骤(CentOS 类似,包名改为bind)。

场景一:搭建一个简单的缓存 + 递归 DNS**(用于上网加速或内网转发)

这是最常见的用法,云主机充当“DNS 代理”,把所有查询转发到上游 DNS(如114.114.114.1148.8.8.8),并缓存结果,提升局域网内设备的解析速度。

前置准备

1、一台云主机(CentOS 7/8 或 Ubuntu 20.04+)

2、开放防火墙的UDP 53 端口(协议: UDP, 端口: 53)

- 阿里云/腾讯云:安全组 → 添加入方向规则,允许 UDP 53

3、确保云主机本身能访问公网

使用dnsmasq 搭建(最轻量,推荐)

1. 安装
sudo apt update && sudo apt install dnsmasq -y      # Ubuntu
sudo yum install dnsmasq -y                      # CentOS
2. 编辑配置 /etc/dnsmasq.conf
sudo vim /etc/dnsmasq.conf

修改或添加以下关键行:

监听所有网络接口(也可以指定内网IP,如 listen-address=10.0.0.1)
bind-interfaces
listen-address=0.0.0.0
不读取 /etc/hosts 中的本地域名(可选,防止干扰)
no-hosts
上游 DNS 服务器(可以写多个,用空格隔开)
server=114.114.114.114
server=8.8.8.8
启用缓存,默认 150 条,这里设为 1000 条
cache-size=1000
允许哪些网段使用此 DNS(重要安全配置,防止被外部滥用)
建议只允许内网段(如 192.168.0.0/16, 10.0.0.0/8)或本机
如果只用内网,此行可不用;若需要公网访问,务必指定 allowed 网段
except-interface=eth0  ## 禁止公网接口
3. 启动并设置开机自启
sudo systemctl restart dnsmasq
sudo systemctl enable dnsmasq
4. 验证服务是否正常
sudo ss -tunlp | grep :53    # 应看到 dnsmasq 在 53 端口
dig @localhost baidu.com      # 测试本机查询,应返回正确结果
或远程测试:  dig @云主机公网IP  baidu.com   (需确保防火墙放行 UDP 53)

>安全提示dnsmasq 默认不限制来源 IP。务必在配置中通过interface=except-interface= 限制只允许内网使用,否则你的云主机可能变成“开放 DNS 解析器”,被用于 DDoS 放大攻击,导致云厂商封禁或高额账单。

场景二:搭建权威 DNS**(管理自己的域名,如example.com

如果你想用这台云主机作为自己域名的NS 服务器(ns1.example.com),让全球用户通过这台机器查询你的域名解析,需要用BIND 9

1. 安装 BIND9
sudo apt update && sudo apt install bind9 bind9utils bind9-doc -y
2. 配置主文件 /etc/bind/named.conf.options
sudo vim /etc/bind/named.conf.options
参考:

options {
    directory "/var/cache/bind";
    listen-on { any; };                   // 监听所有IP
    listen-on-v6 { any; };
    recursion no;                         // 权威DNS不处理递归查询
    allow-query { any; };                 // 允许所有人查询(因为你要公开服务)
    allow-transfer { 从DNS服务器IP; };     // 禁止区域传送,除非有从DNS
    dnssec-validation auto;
};

注意recursion noallow-query { any; } 同时设置时,你的服务器成为开放权威服务器,只回答它知道自己授权的域名(比如example.com),不转发其他域名查询,这样相对安全。

3. 定义区域(zone)/etc/bind/named.conf.local
sudo vim /etc/bind/named.conf.local

添加你自己的域名区域:

zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";      // 区域文件路径
    allow-update { none; };
};
4. 创建区域文件(DNS 记录)
sudo vim /etc/bind/db.example.com
参考(SOA + 记录):

$TTL    86400
@       IN      SOA     ns1.example.com. admin.example.com. (
                        2025032001   ; 序列号 (YYYYMMDDnn)
                        3600         ; 刷新时间
                        1800         ; 重试时间
                        604800       ; 过期时间
                        86400 )      ; 最小 TTL
;
; 名称服务器
@       IN      NS      ns1.example.com.
ns1     IN      A       云主机公网IP
;
; A 记录(解析 www 等)
www     IN      A       123.123.123.123
api     IN      A       123.123.123.124
5. 检查配置语法并重启
sudo named-checkconf
sudo named-checkzone example.com /etc/bind/db.example.com
sudo systemctl restart bind9
sudo systemctl enable bind9
6. 防火墙放行 UDP 53
7. 在你的域名注册商(如阿里云、GoDaddy)将域名的 NS 记录改为 ns1.example.com,并添加对应的 A 记录指向云主机 IP
8. 等待全球 DNS 缓存更新(24-48 小时)

两种场景的选择建议

你的需求 推荐方案 特点
内网/局域网域名解析,上网加速dnsmasq 轻量、简单、一键启用
公开管理自己的域名(权威服务器)BIND9 功能强大,标准协议
高性能递归/缓存,替代公共DNSunbound 安全、支持 DNSSEC
不想自己维护,纯内网转发CoreDNS (K8s 常用) 灵活,但学习曲线稍高

重要安全提醒(避免云主机被封)

1、永远不要开放一个没有限制的递归 DNS 到公网(即recursion yes +allow-query { any; }),这会被 DDoS 放大攻击滥用,几分钟内你的云主机流量就会打满,并收到云厂商的封禁通知。

2、如果只是内网使用,务必在安全组中将入方向 UDP 53 的来源 IP 设置为内网段(如10.0.0.0/8 或你的 VPC CIDR)。

3、定期更新软件包,防止已知漏洞。

4、监控 DNS 查询量(dnsmasq 可通过日志或iptables 统计)。

内网用:装dnsmasq,限制来源 IP,配上游 DNS。

自建 NS:装bind9,写区域文件,关闭递归,只开放 UDP 53。

如果你能告诉我你的具体场景(内网加速 / 公开权威解析)、云厂商和操作系统,我可以帮你进一步优化配置。

文章摘自:https://idc.huochengrm.cn/zj/25320.html

评论