Linux dnsmasq完全教程

简介: dnsmasq是轻量级DNS+DHCP一体化工具,专为小型局域网设计。它能实现DNS缓存加速、内网域名解析(如用“server.local”代替IP)、自动分配IP地址,配置简单、资源占用低,树莓派或老旧服务器也能流畅运行,是家庭、工作室网络管理的“全能小管家”。

大家在玩Linux的时候,有没有遇到过这样的问题:局域网里几台机器,想互相用简单的名字访问(比如用“server”代替“192.168.1.100”),而不是每次都输一串难记的IP?或者想让内网的DNS解析更快,减少等待时间?甚至想给内网设备自动分配IP,不用手动设置?

今天要讲的dnsmasq,就是解决这些问题的“全能小工具”——它是一款轻量级DNS、TFTP、PXE、路由通告与DHCP服务器,轻量、简单,不用复杂配置,就能同时实现DNS缓存、DNS解析、DHCP服务,堪称小型局域网(比如家里、工作室、小型服务器集群)的“网络小管家”,专为小型嵌入式系统设计,力求在支持功能的前提下占用最小内存。

很多新手听到“DNS”“DHCP”就头大,别怕!这篇教程全程用“大白话+实操命令”,从原理到用法,从参数到示例,一步步带大家吃透dnsmasq,不管你用的是Rocky Linux(CentOS接班人)还是Ubuntu,跟着做就能上手。

一、dnsmasq到底是个啥?原理很简单!

dnsmasq的全称是“DNS masquerade”(DNS伪装/转发),核心作用围绕DNS与DHCP两大核心,同时支持TFTP、PXE等扩展功能,咱们用“快递员”的比喻讲明白核心功能,一看就懂:

  1. DNS缓存员:当你第一次访问“www.baidu.com”,dnsmasq会向上游DNS服务器(比如谷歌8.8.8.8、阿里223.5.5.5)查询,拿到IP后,不仅返回给你,还会在自己的“小本本”(内存缓存)里记一笔。下次你再查同一个域名,它不用再麻烦上游服务器,直接从“小本本”里拿,速度快很多(就像快递员把常用地址记在脑子里,不用每次都查地图)。DNS缓存的默认大小为150条,0表示关闭缓存,过大反而会影响性能。

  2. DNS解析员:你可以告诉dnsmasq“xxx.local”这个域名对应哪个IP(比如“server.local”对应192.168.1.100),这样局域网里所有机器,只要用这个域名,就能直接找到目标设备,不用记IP——相当于给内网设备起了“小名”。这一功能通过静态解析参数实现,支持泛域名、多域名绑定,还能加载自定义hosts文件,优先级高于上游DNS解析。

  3. DHCP管理员:自动给局域网里的设备(电脑、手机、打印机)分配IP地址、子网掩码、网关等信息,不用手动给每台设备设置IP,避免IP冲突(就像物业给新入住的业主自动分配门牌号,不用业主自己找)。DHCP功能支持静态地址分配、多网络、租约管理,还能根据设备标签下发不同配置,兼容BOOTP与PXE网络启动。

补充说明:dnsmasq是轻量级的,占用系统资源极少,哪怕是低配的树莓派、老旧服务器,也能轻松运行;而且它的配置文件简洁,命令参数也不复杂,比bind(复杂DNS服务)、dhcpd(单独DHCP服务)好上手10倍,这也是它在小型网络里普及的原因——甚至很多路由器里,默认用的就是dnsmasq。它可作为一个或多个域的权威DNS服务器,使本地域名出现在全局DNS中,还支持DNSSEC校验,提升解析安全性。

这里要注意一个关键:dnsmasq本身不是“根DNS服务器”,它不会自己去解析所有域名,大部分时候是“转发+缓存”,其核心工作流程如下:当接收到用户的一个DNS请求时,首先会查找/etc/hosts这个文件,若该文件没有请求的记录,再查找/etc/resolv.conf中定义的外部DNS(也叫上游DNS服务器),外部DNS通过递归查询查找到请求后响应给客户端,随后dnsmasq将请求结果缓存到内存中,供后续的解析请求复用。只有你手动配置的“内网域名”,它才会直接解析,既高效又简单。

二、前置准备:安装dnsmasq

不管用哪种系统,第一步都是安装dnsmasq。这里重点讲Rocky Linux(因为它是企业级常用,兼容CentOS),同时给出Ubuntu的对应命令,两者操作几乎一致,差别只在“安装命令”和“部分服务管理细节”。

先确认系统版本(可选,避免版本兼容问题):

Rocky Linux查看版本:

cat /etc/rocky-release
# 示例输出:Rocky Linux release 9.2 (Blue Onyx)

Ubuntu查看版本:

cat /etc/lsb-release
# 示例输出:Ubuntu 22.04.3 LTS

2.1 Rocky Linux安装dnsmasq

Rocky Linux默认的yum仓库(现在叫dnf,yum是dnf的软链接)里就有dnsmasq,直接安装即可,不用额外加仓库:

# 切换到root用户(新手建议,避免权限不足)
su - root

# 安装dnsmasq(dnf和yum都能用,dnf是新版本,推荐用dnf)
dnf install dnsmasq -y
# 或者用yum(兼容旧习惯)
yum install dnsmasq -y

# 安装完成后,查看是否安装成功
rpm -qa | grep dnsmasq
# 示例输出:dnsmasq-2.89-1.el9.x86_64(版本号可能不同,只要有输出就说明成功)

2.2 Ubuntu安装dnsmasq

Ubuntu用apt命令安装,同样简单,但有个小坑:Ubuntu默认可能运行着systemd-resolved服务,它会占用53端口(DNS默认端口),导致dnsmasq启动失败(dnsmasq默认监听53端口,可通过-p参数修改),后面会讲解决方法,先安装:

# 切换到root用户
su - root
# 或者用sudo(Ubuntu常用)
sudo -i

# 更新apt仓库(可选,但建议做,避免安装旧版本)
apt update

# 安装dnsmasq
apt install dnsmasq -y

# 查看安装成功与否
dpkg -l | grep dnsmasq
# 示例输出:ii  dnsmasq                          2.90-0ubuntu0.22.04.1              all          Small caching DNS proxy and DHCP/TFTP server

2.3 启动并设置开机自启

安装完成后,dnsmasq默认是不启动的,我们需要手动启动它,并且设置开机自启(避免重启系统后失效)dnsmasq默认后台运行,可通过-k参数(--keep-in-foreground)强制前台运行,便于调试。

Rocky Linux启动命令:

# 启动dnsmasq服务
systemctl start dnsmasq

# 查看服务状态(重点,确认是否启动成功)
systemctl status dnsmasq
# 成功的标志:Active: active (running)(绿色的运行状态)
# 如果失败,会显示Active: failed,后面会讲排查方法

# 设置开机自启(重启系统后,dnsmasq会自动启动)
systemctl enable dnsmasq

Ubuntu启动命令(注意:如果启动失败,大概率是53端口被占用,先执行下面的命令停止冲突服务,再启动):

# 先停止systemd-resolved服务(解决53端口冲突,关键!)
systemctl stop systemd-resolved
# 禁止systemd-resolved开机自启(避免下次重启又冲突)
systemctl disable systemd-resolved

# 现在启动dnsmasq
systemctl start dnsmasq

# 查看状态
systemctl status dnsmasq

# 设置开机自启
systemctl enable dnsmasq

小技巧:如果启动失败,除了端口冲突,还可以用“dnsmasq --test”命令检查配置文件语法(该命令仅检查语法,不启动服务),全部正常则退出码为0,否则非0;很多时候是配置写错了导致启动失败。此外,可通过-d参数(--no-daemon)进入调试模式,日志同时输出到stderr与syslog,便于排查问题(仅限调试,生产环境禁止使用)。

三、核心操作:dnsmasq命令行参数详解

dnsmasq的用法主要分两种:一种是“临时命令行启动”(适合测试,重启服务后失效),另一种是“修改配置文件启动”(适合长期使用,永久生效)。命令行长选项在BSD系统上若未链接GNU getopt库,可能不可用,但在配置文件中仍可识别;通常缺少参数表示关闭对应功能。

新手建议先从“命令行参数”入手,直观感受每个参数的作用,测试成功后,再把参数写到配置文件里,这样不容易出错。

先记住一个核心:dnsmasq的命令行参数,大部分都和配置文件里的选项对应,格式是“dnsmasq [参数] [值]”,下面我们按“功能分类”,讲解最常用、最实用的参数,每个参数都配详细说明+实战示例”,确保大家能直接复制使用,同时兼顾专业性与易懂性。

3.1 基础参数(必学,控制dnsmasq的基本运行)

参数 详细说明 通用示例
-h / --help 显示所有命令行选项;扩展用法:--help dhcp显示已知DHCPv4配置选项,--help dhcp6显示DHCPv6选项。大白话:查看所有dnsmasq参数的帮助信息,忘记参数时,直接输这个命令,相当于“说明书”。 dnsmasq -h(输完后会列出所有参数,按q退出);查看DHCPv4选项:dnsmasq --help dhcp
-v / --version 打印版本号。大白话:查看dnsmasq的版本号,排查版本兼容问题时有用(比如某些参数只支持高版本)。 dnsmasq -v示例输出:Dnsmasq version 2.89 Copyright (c) 2000-2022 Simon Kelley
-p <端口> 监听在指定端口而非标准DNS端口53;设为0完全关闭DNS功能,仅保留DHCP/TFTP。大白话:指定dnsmasq的DNS服务端口,默认是53(DNS标准端口),如果53端口被占用(比如Ubuntu的systemd-resolved),可以用这个参数改端口(比如改到5353),但注意:客户端也要对应改DNS端口,否则无法解析。 # 临时将DNS端口改为5353,测试启动dnsmasq -p 5353# 查看端口是否被占用(验证)netstat -tulnp grep dnsmasq# 示例输出:tcp 0 0 0.0.0.0:5353 0.0.0.0:* LISTEN 1234/dnsmasq
-i <网卡名> 仅在指定接口监听;使用该参数时,dnsmasq自动加入回环接口;接口名支持末尾*通配。大白话:指定dnsmasq监听的网卡(比如eth0、ens33),只允许该网卡接收DNS/DHCP请求,避免其他网卡干扰(比如服务器有外网网卡和内网网卡,只让内网网卡提供服务)。 # 先查看自己的网卡名(关键,别输错)ip addr# 假设网卡名是ens33,指定监听该网卡dnsmasq -i ens33# 通配示例:监听所有ens开头的网卡dnsmasq -i ens*
-a 仅监听指定IP;可与-i参数共用;若只设该参数不设-i,不会自动监听回环,必须显式写127.0.0.1;可同时指定多个IP,用逗号分隔。大白话:指定dnsmasq监听的IP地址(和-i参数类似,更精准),比如只让192.168.1.100这个IP提供服务,其他IP不响应请求。建议同时包含127.0.0.1(本机)和内网IP。 # 指定监听本机(127.0.0.1)和内网IP(192.168.1.100)dnsmasq -a 127.0.0.1,192.168.1.100# 注意:仅指定内网IP,不监听回环(不推荐)dnsmasq -a 192.168.1.100
-x 指定PID文件路径,默认/var/run/dnsmasq.pid;若不带参数(--pid-file),则禁止写入PID文件。大白话:指定dnsmasq的PID文件路径(PID文件记录dnsmasq的进程ID,方便管理服务),默认路径无需修改,除非有特殊需求。 # 指定PID文件路径为/var/run/my-dnsmasq.piddnsmasq -x /var/run/my-dnsmasq.pid# 禁止写入PID文件(仅命令行可用)dnsmasq --pid-file

3.2 DNS缓存相关参数(优化解析速度,必学)

DNS缓存是dnsmasq最常用的功能之一,下面这几个参数,能帮你控制缓存的大小、时间,优化解析体验,补充实战场景说明。

参数 详细说明 实战示例
-c <数量> 设置DNS缓存大小,默认150条;0表示关闭缓存;过大影响性能。大白话:设置DNS缓存的最大条目数(就是“小本本”能记多少个域名-IP对应关系),如果局域网设备多、访问的域名多,可以改大一点(比如1000),缓存越多,解析越快;如果设备少,默认就够用。 # 设置缓存最大条目数为1000条dnsmasq -c 1000# 关闭DNS缓存(仅保留其他功能)dnsmasq -c 0# 验证:启动后,用dig命令查几个域名,再查缓存(后面会讲怎么看缓存)
-t <秒数> 对应--local-ttl,当应答来自/etc/hosts、配置或DHCP租约文件时,可为这些应答设置TTL(秒);默认TTL为0,表示客户端不应缓存;设为0可使DHCP信息不受--local-ttl影响。大白话:设置缓存的默认过期时间(“小本本”里的记录多久过期),默认跟着上游DNS的过期时间走,一般不用改,测试时可强制设置(比如3600秒=1小时)。 # 设置缓存默认过期时间为3600秒(1小时)dnsmasq -t 3600# 单独设置DHCP租约应答的TTL(参数--dhcp-ttl)dnsmasq --dhcp-ttl 1800
-k --keep-in-foreground,启动后不进入后台,其余正常运行;用于daemontools、launchd等托管场景,区别于调试模式。大白话:让dnsmasq在前台运行(默认是后台运行),配合日志参数,适合测试时查看实时解析日志,方便排查问题(生产环境可用于托管场景)。 # 前台运行dnsmasq,同时开启缓存(1000条)dnsmasq -k -c 1000# 生产托管场景(前台运行,不调试)dnsmasq -k --log-facility=/var/log/dnsmasq.log
--log-queries 记录dnsmasq处理的DNS查询结果;收到SIGUSR1时完整转储缓存;--log-queries=extra可在每行开头增加序列号、请求者IP等额外信息。大白话:开启DNS查询日志,每一次DNS解析请求,都会记录到日志里(默认日志路径/var/log/daemon.log),排查DNS解析问题的“神器”。 # 前台运行,开启缓存,同时记录查询日志(带额外信息)dnsmasq -k -c 1000 --log-queries=extra# 此时,用其他设备查DNS,就能在控制台看到实时日志(含请求者IP)
--no-cache 等价于-c 0,关闭DNS缓存;区别于--no-negcache(关闭否定缓存)。大白话:禁用DNS缓存(不记“小本本”,每次查询都向上游服务器请求),一般用于测试(比如测试上游DNS是否正常),平时不用开启。 # 禁用缓存,每次查询都走上游DNSdnsmasq --no-cache# 禁用否定缓存(不缓存“不存在”的域名结果)dnsmasq --no-negcache

小技巧:dnsmasq的缓存是存在内存里的,不是存在硬盘上,所以重启dnsmasq服务后,缓存会清空;收到SIGUSR1信号时,会写入统计信息到系统日志,调试/全日志模式下会转储完整缓存;缓存无法直接查看,也可通过日志或者解析时间来判断是否生效(第二次解析同一个域名,时间会明显变短)。此外,可通过--max-cache-ttl、--min-cache-ttl设置缓存条目的最大/最小TTL,一般不建议人工延长TTL,除非明确知道后果。

3.3 DNS解析相关参数(内网域名“小名”设置,必学)

这个功能太实用了!比如你内网有一台服务器,IP是192.168.1.100,你可以告诉dnsmasq“server.local”对应这个IP,这样局域网里所有机器,只要输入“server.local”,就能访问这台服务器,不用记IP。

参数 详细说明 实战示例(最常用)
-A <域名>, --address=/<域名>/,对指定域下任意主机强制返回指定IP(IPv4/IPv6),绝不转发;/#/匹配所有域,无IP返回NXDOMAIN,#返回空地址0.0.0.0/::;可同时指定多个域名。大白话:手动指定“域名-IP”对应关系(静态解析),相当于在dnsmasq里临时加了一条“hosts记录”,优先级最高,支持泛域名解析。 # 示例1:指定server.local对应192.168.1.100dnsmasq -A server.local,192.168.1.100# 示例2:指定多个域名dnsmasq -A server.local,192.168.1.100 -A pc.local,192.168.1.101# 示例3:泛域名解析(所有.local结尾域名解析到192.168.1.100)dnsmasq -A *.local,192.168.1.100# 示例4:屏蔽广告域名(返回空地址)dnsmasq -A ad.example.com,#
-S <上游DNS服务器IP> --server=[/<域名>/][[#<端口>]],直接指定上游服务器IP;可限定仅用于某些域名,#端口指定非标准端口,无IP仅域名表示该域为本地域,不转发;可指定多个,优先级从左到右。大白话:指定上游DNS服务器(dnsmasq解析不了的域名,找谁帮忙),默认用系统/etc/resolv.conf里的DNS,常用阿里、谷歌、114DNS。 # 指定上游DNS为阿里223.5.5.5和谷歌8.8.8.8(非标准端口示例)dnsmasq -S 223.5.5.5 -S 8.8.8.8#5353# 限定example.com域名走114DNSdnsmasq -S /example.com/114.114.114.114# 结合静态解析,实战用法(推荐)dnsmasq -A server.local,192.168.1.100 -S 223.5.5.5 -c 1000
--no-resolv 不读取/etc/resolv.conf,仅从命令行/配置文件获取上游服务器;对应--resolv-file(指定读取上游DNS的文件)。大白话:禁止dnsmasq读取系统/etc/resolv.conf里的上游DNS,避免系统DNS被修改导致解析异常,建议长期使用时开启。 # 禁止读取系统resolv.conf,手动指定上游DNS为114.114.114.114dnsmasq --no-resolv -S 114.114.114.114# 指定读取自定义resolv文件(替代--no-resolv)dnsmasq --resolv-file=/etc/dnsmasq.resolv
-H --addn-hosts=<文件>,附加主机文件;除/etc/hosts外再读取指定文件;若同时使用--no-hosts(不读取/etc/hosts),则只读取此文件;可重复使用添加多个文件,给定目录则读取该目录下所有文件。大白话:指定dnsmasq读取的自定义hosts文件,不用修改系统默认hosts,更灵活。 # 1. 先创建自定义hosts文件,写入静态解析记录echo "192.168.1.100 server.local" > /etc/dnsmasq.hosts# 2. 指定dnsmasq读取这个文件(不读取系统hosts)dnsmasq -H /etc/dnsmasq.hosts --no-hosts# 3. 读取目录下所有hosts文件dnsmasq -H /etc/dnsmasq/hosts.d
--bogus-nxdomain= 将包含指定IP/子网的应答转换为“无此域”(NXDOMAIN);用于对抗恶意运营商将不存在域名指向广告页的行为;支持子网掩码限定。大白话:DNS反劫持参数,有些运营商会把不存在的域名解析到广告IP,用这个参数屏蔽该IP,避免被劫持。 # 假设劫持IP是10.0.0.1,屏蔽单个IPdnsmasq --bogus-nxdomain=10.0.0.1# 屏蔽整个子网(10.0.0.0/24)dnsmasq --bogus-nxdomain=10.0.0.0/24# 补充:忽略劫持IP(不报错,继续等待其他应答)dnsmasq --ignore-address=10.0.0.1

3.4 DHCP相关参数(内网自动分配IP,实用功能)

如果你的局域网里有很多设备(比如10台电脑、手机),手动给每台设备设置IP太麻烦,还容易冲突,这时就可以用dnsmasq的DHCP功能,自动分配IP,省心又高效。DHCP功能支持IPv4/IPv6,可设置标签、静态分配、租约管理,兼容PXE/BOOTP网络启动。

注意:开启DHCP功能前,要确保你的dnsmasq服务器的IP是“静态IP”(比如192.168.1.100),不能是动态IP(否则服务器IP变了,DHCP服务会失效)。

参数 详细说明 实战示例
--dhcp-range=<起始IP>,<结束IP>,<子网掩码>,<租期> --dhcp-range=[tag:<标签>,][set:<标签>,]<起始地址>[,<结束地址> <模式>][,<掩码>[,<广播>]][,<租约时间>];启用DHCP服务器,支持标签、静态模式、代理模式;租约时间支持秒/分/小时/infinite(永久)/deprecated;IPv6支持自动生成范围。大白话:最核心的DHCP参数,指定IP分配范围、子网掩码、IP租期(设备占用IP的时间,到期可续租),默认租期12小时,建议设为2h-24h。 # 示例1:IPv4动态分配(范围192.168.1.101-200,掩码255.255.255.0,租期2小时)dnsmasq --dhcp-range=192.168.1.101,192.168.1.200,255.255.255.0,2h# 示例2:仅静态分配(不动态分配IP)dnsmasq --dhcp-range=192.168.1.101,192.168.1.200,255.255.255.0,static# 示例3:永久租约(谨慎使用)dnsmasq --dhcp-range=192.168.1.101,192.168.1.200,255.255.255.0,infinite
--dhcp-option=<选项号>,<值> --dhcp-option=[tag:<标签>,][option:<选项名> 编号],[<值>...];设置DHCP选项(网关、DNS、域名、NTP等);支持按标签给不同设备下发不同配置。大白话:给DHCP客户端分配额外的网络参数,常用选项号:3(网关)、6(DNS服务器)、1(子网掩码)、28(广播地址);DNS建议设为dnsmasq自身IP。 # 示例:分配网关192.168.1.1,DNS服务器192.168.1.100(自身IP)dnsmasq --dhcp-range=192.168.1.101,192.168.1.200,255.255.255.0,2h --dhcp-option=3,192.168.1.1 \ # 网关(选项号3)--dhcp-option=6,192.168.1.100 \ # DNS服务器(选项号6)--dhcp-option=option:domain-name,local # 分配域名后缀(用选项名)
--dhcp-host=,<固定IP>,<主机名> 静态分配DHCP地址、主机名、MAC绑定;支持MAC通配符、客户端ID、DUID、标签;可省略主机名,仅绑定MAC与IP。大白话:给指定设备分配“固定IP”(静态DHCP),比如路由器、服务器,需要固定IP;需知道设备MAC地址,主机名可选(给设备起名字)。 # 示例1:绑定MAC与固定IP,指定主机名dnsmasq --dhcp-range=192.168.1.101,192.168.1.200,255.255.255.0,2h --dhcp-option=3,192.168.1.1 --dhcp-option=6,192.168.1.100 --dhcp-host=00:11:22:33:44:55,192.168.1.10,router# 示例2:MAC通配符(匹配00:11:22开头的设备)dnsmasq --dhcp-host=00:11:22:::*,192.168.1.11,test-pc
--no-dhcp-interface=<网卡名> --no-dhcp-interface=<接口名>,在指定接口不提供DHCP/TFTP,但提供DNS;支持接口通配符;优先级高于--interface。大白话:禁止在某个网卡上提供DHCP服务,比如服务器有外网、内网网卡,只让内网网卡提供DHCP,避免给外网设备分配IP。 # 禁止在外网网卡eth1上提供DHCP服务,只在eth0上提供dnsmasq --dhcp-range=192.168.1.101,192.168.1.200,255.255.255.0,2h --no-dhcp-interface=eth1# 禁止所有eth开头的网卡提供DHCPdnsmasq --dhcp-range=192.168.1.101,192.168.1.200,255.255.255.0,2h --no-dhcp-interface=eth*

3.5 其他实用参数(锦上添花,解决特殊需求)

参数 详细说明 示例
--enable-tftp 启用TFTP服务器(只读,用于网络启动);可指定接口,仅在该接口提供TFTP服务;内置安全、只读的TFTP服务器,支持DHCP主机网络启动/PXE启动。大白话:启用TFTP服务(简单文件传输协议),配合dhcp-boot参数,可实现PXE网络启动(批量安装系统),适合机房、多服务器场景。 # 启用TFTP服务,指定TFTP根目录为/tftpdnsmasq --enable-tftp --tftp-root=/tftp# 仅在ens33网卡提供TFTP服务dnsmasq --enable-tftp=ens33 --tftp-root=/tftp
--dhcp-boot=<文件名>,<服务器名>,<服务器IP> --dhcp-boot=[tag:<标签>,]<文件名>,[<服务器名>[,<服务器地址>]];PXE启动相关参数,指定PXE启动文件的路径、服务器名和IP;支持按标签给不同设备指定不同启动文件;配合TFTP服务使用。大白话:PXE启动核心参数,指定启动文件路径,批量安装系统时常用。 # 指定PXE启动文件为/boot/pxelinux.0,服务器IP为192.168.1.100dnsmasq --enable-tftp --tftp-root=/tftp --dhcp-boot=/boot/pxelinux.0,pxeserver,192.168.1.100# 按标签指定不同启动文件(仅tag:pxe的设备生效)dnsmasq --enable-tftp --tftp-root=/tftp --dhcp-boot=tag:pxe,/boot/pxelinux.0,pxeserver,192.168.1.100
--log-dhcp 详细记录DHCP日志(选项、标签、租约分配/释放信息);可配合--quiet-dhcp静默常规日志,只打印错误信息。大白话:开启DHCP日志,记录每台设备的IP分配情况,排查DHCP问题时有用(比如设备拿不到IP,看日志找原因)。 # 开启DHCP日志,同时开启DNS查询日志,前台运行dnsmasq -k --log-queries --log-dhcp# 静默常规DHCP日志,只打印错误dnsmasq -k --log-queries --log-dhcp --quiet-dhcp

四、实战演练:3个最常用场景

前面讲了很多参数,可能大家会觉得复杂,没关系!下面这3个场景,是日常用得最多的,每个场景都给了“完整命令+步骤说明”,不管是Rocky Linux还是Ubuntu,只要替换成自己的IP,就能直接用。

前提:假设你的dnsmasq服务器,内网IP是192.168.1.100(静态IP),网卡名是ens33(根据自己的网卡名修改)。

场景1:仅开启DNS缓存(优化局域网DNS解析速度)

需求:让局域网里所有设备,通过192.168.1.100解析DNS,开启缓存,加快解析速度,上游DNS用阿里223.5.5.5(稳定、快速);禁止读取系统resolv.conf,避免干扰。

# 1. 停止当前的dnsmasq服务(如果已启动)
systemctl stop dnsmasq

# 2. 用命令行启动(测试,确认正常后,再写入配置文件)
# 参数说明:监听ens33网卡、本机+内网IP,缓存1000条,禁止系统resolv,上游阿里DNS,开启查询日志
dnsmasq -i ens33 -a 127.0.0.1,192.168.1.100 -c 1000 --no-resolv -S 223.5.5.5 --log-queries

# 3. 测试解析(在服务器本机测试,或者局域网其他设备测试)
# 服务器本机测试:指定用192.168.1.100解析baidu.com
dig @192.168.1.100 baidu.com

# 查看解析时间:第一次解析,时间可能在几十ms;第二次解析,时间会变成0ms(缓存生效)
# 示例输出(重点看Query time):
# ;; Query time: 0 msec
# ;; SERVER: 192.168.1.100#53(192.168.1.100)

# 4. 测试成功后,停止前台运行的dnsmasq(按Ctrl+C),用配置文件启动(后面会讲)
# 补充:查看缓存统计(发送SIGUSR1信号)
killall -SIGUSR1 dnsmasq
# 查看系统日志,获取缓存命中/未命中统计
journalctl -u dnsmasq | grep cache

场景2:DNS缓存+内网静态解析(给内网设备起“小名”)

需求:在场景1的基础上,增加内网静态解析功能——给内网服务器(192.168.1.100)设置“小名”server.local,给办公电脑(192.168.1.101)设置“小名”pc.local,局域网所有设备可通过“小名”直接访问对应设备,无需记忆IP;同时保留DNS缓存优化。

# 方法1:临时测试(重启服务后失效,适合快速验证)
# 1. 停止当前dnsmasq服务
systemctl stop dnsmasq

# 2. 启动dnsmasq,同时配置缓存、上游DNS和静态解析(核心命令)
dnsmasq -i ens33 -a 127.0.0.1,192.168.1.100 -c 1000 --no-resolv -S 223.5.5.5 \
-A server.local,192.168.1.100 -A pc.local,192.168.1.101 --log-queries

# 方法2:永久生效(推荐,长期使用)
# 1. 停止当前dnsmasq服务
systemctl stop dnsmasq

# 2. 编辑dnsmasq配置文件
vim /etc/dnsmasq.conf

# 3. 写入以下配置(替换自己的网卡名、IP和域名)
interface=ens33
listen-address=127.0.0.1,192.168.1.100
cache-size=1000
no-resolv
server=223.5.5.5  # 上游DNS,可替换为114.114.114.114
# 静态解析配置(内网“小名”)
address=/server.local/192.168.1.100
address=/pc.local/192.168.1.101
log-queries  # 开启查询日志,便于排查问题

# 4. 保存退出,重启dnsmasq服务
systemctl restart dnsmasq

# 5. 测试静态解析是否生效(服务器本机+局域网设备均可测试)
# 测试server.local解析
dig server.local @192.168.1.100
# 测试pc.local解析
dig pc.local @192.168.1.100
# 测试外网解析(验证缓存是否正常)
dig www.taobao.com @192.168.1.100

关键说明:静态解析使用-A(配置文件中用address=/域名/IP)参数,优先级高于上游DNS解析,哪怕外网有同名域名,也会优先解析到内网IP;可添加多个-A参数(或address配置),实现多台内网设备“小名”设置;若需泛域名解析(如所有.local结尾域名都解析到192.168.1.100),可添加-A *.local,192.168.1.100(配置文件中写address=/.local/192.168.1.100)。

补充技巧:若内网设备较多,可创建自定义hosts文件(如/etc/dnsmasq.hosts),将所有静态解析记录写入该文件,再在配置文件中添加addn-hosts=/etc/dnsmasq.hosts,无需在主配置文件中频繁添加address配置,更便于管理。

场景3:DNS缓存+DHCP自动分配IP(内网全自动化网络管理)

需求:实现局域网全自动化网络管理——开启DNS缓存优化解析速度,开启DHCP自动分配IP(分配范围192.168.1.101-192.168.1.200,子网掩码255.255.255.0,租期2小时),给内网路由器(MAC地址00:11:22:33:44:55)分配固定IP 192.168.1.10,同时给DHCP客户端自动分配网关(192.168.1.1)和DNS服务器(192.168.1.100,即dnsmasq服务器自身);禁止在外网网卡(假设为eth1)提供DHCP服务,避免干扰外网。

# 前提检查:确保dnsmasq服务器IP为静态IP(192.168.1.100),避免IP变动导致服务失效
# 若未设置静态IP,可临时设置(Rocky Linux/Ubuntu通用)
nmcli connection modify ens33 ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 192.168.1.100 ipv4.method manual
nmcli connection up ens33

# 1. 停止当前dnsmasq服务
systemctl stop dnsmasq

# 2. 编辑dnsmasq配置文件(永久生效,推荐)
vim /etc/dnsmasq.conf

# 3. 写入以下完整配置(按需替换参数)
# 基础配置:指定网卡和监听IP
interface=ens33  # 仅在内网网卡提供服务
listen-address=127.0.0.1,192.168.1.100  # 监听本机和内网IP
no-dhcp-interface=eth1  # 禁止在外网网卡提供DHCP服务

# DNS缓存配置
cache-size=1000  # 缓存大小1000条
no-resolv  # 禁止读取系统resolv.conf
server=223.5.5.5  # 上游DNS服务器

# DHCP核心配置
dhcp-range=192.168.1.101,192.168.1.200,255.255.255.0,2h  # IP分配范围、掩码、租期(2小时)
# DHCP额外选项:分配网关、DNS、域名后缀
dhcp-option=3,192.168.1.1  # 选项3:网关IP
dhcp-option=6,192.168.1.100  # 选项6:DNS服务器IP(指向自身,实现内网解析)
dhcp-option=option:domain-name,local  # 分配域名后缀,设备可直接用“主机名.local”访问

# 静态DHCP:给指定MAC设备分配固定IP(路由器)
# 格式:dhcp-host=MAC地址,固定IP,主机名(主机名可选)
dhcp-host=00:11:22:33:44:55,192.168.1.10,router

# 日志配置(便于排查问题)
log-queries  # 记录DNS查询日志
log-dhcp     # 记录DHCP分配/释放日志

# 4. 保存退出,重启dnsmasq服务
systemctl restart dnsmasq

# 5. 验证服务是否正常(核心验证步骤)
# 验证1:查看dnsmasq服务状态
systemctl status dnsmasq  # 确保Active: active (running)

# 验证2:查看DHCP租约(查看已分配的IP和设备信息)
cat /var/lib/misc/dnsmasq.leases

# 验证3:局域网设备测试(以手机/新电脑为例)
# 1. 让设备连接内网WiFi/网线
# 2. 查看设备IP(应在192.168.1.101-200之间,路由器固定为192.168.1.10)
# 3. 测试DNS解析(可解析外网和内网“小名”)
dig www.baidu.com @192.168.1.100  # 外网解析
dig server.local @192.168.1.100    # 内网解析(若场景2已配置)

# 验证4:测试IP租期(可选)
# 查看租约剩余时间(替换设备IP)
dhcp-lease-list | grep 192.168.1.101

关键注意事项(必看):

  1. 开启DHCP服务前,必须确保dnsmasq服务器IP为静态IP,否则服务器IP变动后,DHCP客户端将无法正常获取网络配置;

  2. DHCP分配范围(192.168.1.101-200)需避开静态IP(如服务器192.168.1.100、路由器192.168.1.10),避免IP冲突;

  3. 若局域网内已有其他DHCP服务器(如路由器自带DHCP),需先停止其他DHCP服务,否则会出现IP分配冲突,导致设备无法正常上网;

  4. 静态DHCP配置中,MAC地址需准确(可通过ip addr show命令在对应设备上查看),MAC地址错误会导致设备无法获取固定IP;

  5. 租期建议设为2-24小时,租期过短会导致设备频繁续租,增加服务器压力;租期过长(如infinite永久)适合固定设备,不适合移动设备(如手机、临时接入的电脑)。

补充技巧:若需批量设置静态DHCP(如多台服务器),可在配置文件中添加多个dhcp-host配置,或创建dhcp-hostsfile文件,将所有MAC-IP对应关系写入该文件,再在主配置文件中添加dhcp-hostsfile=/etc/dnsmasq.dhcp,便于批量管理。

相关文章
|
17天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
31257 108
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
7天前
|
应用服务中间件 API 网络安全
3分钟汉化OpenClaw,使用Docker快速部署启动OpenClaw(Clawdbot)教程
2026年全新推出的OpenClaw汉化版,是基于Claude API开发的智能对话系统本土化优化版本,解决了原版英文界面的使用壁垒,实现了界面、文档、指令的全中文适配。该版本采用Docker容器化部署方案,开箱即用,支持Linux、macOS、Windows全平台运行,适配个人、企业、生产等多种使用场景,同时具备灵活的配置选项和强大的扩展能力。本文将从项目简介、部署前准备、快速部署、详细配置、问题排查、监控维护等方面,提供完整的部署与使用指南,文中包含实操代码命令,确保不同技术水平的用户都能快速落地使用。
4521 1
|
13天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
6518 17
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
12天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
4570 9
|
14天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
5528 19
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
14天前
|
存储 人工智能 机器人
OpenClaw是什么?阿里云OpenClaw(原Clawdbot/Moltbot)一键部署官方教程参考
OpenClaw是什么?OpenClaw(原Clawdbot/Moltbot)是一款实用的个人AI助理,能够24小时响应指令并执行任务,如处理文件、查询信息、自动化协同等。阿里云推出的OpenClaw一键部署方案,简化了复杂配置流程,用户无需专业技术储备,即可快速在轻量应用服务器上启用该服务,打造专属AI助理。本文将详细拆解部署全流程、进阶功能配置及常见问题解决方案,确保不改变原意且无营销表述。
6050 5
|
16天前
|
人工智能 JavaScript 应用服务中间件
零门槛部署本地AI助手:Windows系统Moltbot(Clawdbot)保姆级教程
Moltbot(原Clawdbot)是一款功能全面的智能体AI助手,不仅能通过聊天互动响应需求,还具备“动手”和“跑腿”能力——“手”可读写本地文件、执行代码、操控命令行,“脚”能联网搜索、访问网页并分析内容,“大脑”则可接入Qwen、OpenAI等云端API,或利用本地GPU运行模型。本教程专为Windows系统用户打造,从环境搭建到问题排查,详细拆解全流程,即使无技术基础也能顺利部署本地AI助理。
7694 17
|
10天前
|
人工智能 JavaScript 安全
Claude Code 安装指南
Claude Code 是 Anthropic 推出的本地 AI 编程助手,支持 Mac/Linux/WSL/Windows 多平台一键安装(Shell/PowerShell/Homebrew/NPM),提供 CLI 交互、代码生成、审查、Git 提交等能力,并内置丰富斜杠命令与自动更新机制。
3809 0