2026/1/7 5:22:38
网站建设
项目流程
贵州省住房和城乡建设厅网站-首页,微信小程序投票怎么快速投多票,北京哪家做网站和网络推广好的,网站建设流程图解总结Linux系统#xff08;包括不限于RockyLinux、Ubuntu#xff09;的启动流程 当系统出现故障
1误删内核 右键虚拟机—电源 —打开固件 总结内核设计流派及特点。
单内核#xff08;Monolithic Kernel#xff09;特性表
对比维度核心特点核心设计目标高性能优先#x…总结Linux系统包括不限于RockyLinux、Ubuntu的启动流程当系统出现故障1误删内核 右键虚拟机—电源 —打开固件总结内核设计流派及特点。单内核Monolithic Kernel特性表对比维度核心特点核心设计目标高性能优先集成所有核心功能以减少模块通信开销。功能部署位置进程调度、内存管理、文件系统、设备驱动等所有核心功能全在内核空间运行。模块通信方式模块间直接函数调用同一内核空间无跨空间通信开销。典型代表系统Linux传统架构、BSD、早期 Unix。核心优势✅ 性能高减少 IPC 通信损耗适合服务器、嵌入式等效率敏感场景✅ 实现简单功能集中无需复杂通信机制。核心缺点❌ 耦合度高修改功能需重编内核并重启灵活性差❌ 风险集中内核故障易导致系统整体崩溃。微内核Microkernel特性表对比维度核心特点核心设计目标高稳定性与安全性优先通过极简内核隔离故障影响。功能部署位置仅保留进程调度、内存管理、IPC 等最基础功能在内核空间文件系统、驱动等全在用户空间以服务运行。强制拆分功能到用户空间牺牲部分性能换稳定性。模块通信方式强制通过进程间通信IPC实现模块交互用户态服务与内核、服务之间均需 IPC兼顾性能与扩展性。典型代表系统QNX、Minix、早期 Windows NT 设计。核心优势✅ 稳定性强用户态服务崩溃不影响内核适合汽车电子、医疗设备等高可靠场景✅ 权限隔离严格安全性高。核心缺点❌ 性能开销大频繁 IPC 通信降低效率复杂场景下性能低于单内核❌ 开发复杂需设计高效 IPC 机制。混合内核Hybrid Kernel特性表核心设计目标平衡性能与灵活性核心功能保效率非核心功能可动态调整。功能部署位置基础核心功能进程、内存管理在内核空间驱动、文件系统等可灵活选择内核 / 用户空间或通过动态模块加载。模块通信方式内核空间内模块直接调用跨空间模块需使用 IPC 或动态加载机制。典型代表系统WindowsNT 之后架构、Linux通过 LKM 实现类混合特性。核心优势✅ 兼顾性能核心功能内核态高效运行与灵活非核心功能可动态扩展无需重启内核✅ 适配场景广桌面、服务器、嵌入式均可优化。核心缺点❌ 设计复杂需权衡功能部署边界避免内核态膨胀❌ 调试难度高跨空间交互问题定位困难。外核Exokernel特性表对比维度核心特点核心设计目标极致灵活性让应用直接掌控硬件资源实现深度定制化。功能部署位置仅提供最底层硬件抽象内存分片、CPU 时间片分配在内核空间文件系统、驱动等全在用户空间由应用实现。模块通信方式应用通过极简硬件接口与内核交互如内存分配、CPU 时间申请用户态服务间自主通信内核不干预。典型代表系统学术研究项目如 MIT Exokernel暂未大规模商用。核心优势✅ 灵活性极致应用可自定义硬件使用方式理论效率上限高✅ 资源利用率高无冗余内核功能。核心缺点❌ 开发门槛极高用户态需处理大量硬件细节适配成本巨大❌ 生态稀缺缺乏商用软件支持。linux****内核Linux 虽归类为单内核但通过可加载内核模块LKM实现动态功能扩展使其兼具单内核的高性能与混合内核的灵活性这也是其广泛适配多场景的关键优势。核心功能进程调度、内存管理 仍高度集成保证性能 驱动、文件系统等功能以 .ko 模块 动态加载/卸载无需重编内核让单内核具备了 “动态扩展、按需部署” 的特性接近 “混合内核” 的实用价值 。内核模块配置y ,m常见命令lsmod 用于列出当前系统中已加载的内核模块信息包括模块名称、大小、使用情况等。 modprobe 用于智能地加载和卸载内核模块它会自动处理模块之间的依赖关系。当加载一个模块时 modprobe 会检查该模块的依赖关系并先加载其依赖的模块卸载模块时也会检查是否有其他模块依赖于 该模块如果没有则卸载该模块及其依赖的模块。 insmod 用于将指定的内核模块直接插入到内核中加载但它不会自动处理模块的依赖关系。如果要加载的模 块有依赖其他模块需要先手动加载其依赖模块否则可能会导致加载失败。加载内核模块需要较高的权限你 需要以 root 用户或者使用 sudo 来运行 insmod 命令。 modinfo 命令来检查模块的依赖信息。 rmmod 将指定的内核模块从当前正在运行的 Linux 内核中移除。请确保该模块必须已经被加载到内核中。lsmod实践当前位置 ~ 判断是否模块启动 [root[rocky9-12 ~ ]# lsmod | grep ipip 当前位置 ~ [root[rocky9-12 ~ ]# lsmod Module Size Used by nft_fib_inet 12288 1 nft_fib_ipv4 12288 1 nft_fib_inet nft_fib_ipv6 12288 1 nft_fib_inet nft_fib 12288 3 nft_fib_ipv6,nft_fib_ipv4,nft_fib_inet nft_reject_inet 12288 6 nf_reject_ipv4 16384 1 nft_reject_inet nf_reject_ipv6 24576 1 nft_reject_inet nft_reject 12288 1 nft_reject_inet nft_ct 24576 7 nft_chain_nat 12288 3 nf_nat 65536 1 nft_chain_nat nf_conntrack 229376 2 nf_nat,nft_ct nf_defrag_ipv6 24576 1 nf_conntrack nf_defrag_ipv4 12288 1 nf_conntrack rfkill 40960 1 ip_set 69632 0 nf_tables 356352 189 nft_ct,nft_reject_inet,nft_fib_ipv6,nft_fib_ipv4,nft_chain_nat,nft_reject,nft_fib,nft_fib_inet nfnetlink 20480 3 nf_tables,ip_set qrtr 57344 2 vsock_loopback 12288 0 vmw_vsock_virtio_transport_common 61440 1 vsock_loopback vmw_vsock_vmci_transport 49152 1 vsock 69632 5 vmw_vsock_virtio_transport_common,vsock_loopback,vmw_vsock_vmci_transport snd_seq_midi 20480 0 snd_seq_midi_event 16384 1 snd_seq_midi intel_rapl_msr 20480 0 intel_rapl_common 57344 1 intel_rapl_msr intel_uncore_frequency_common 16384 0 intel_pmc_core 122880 0 snd_ens1371 36864 1 snd_ac97_codec 200704 1 snd_ens1371 intel_vsec 20480 1 intel_pmc_core pmt_telemetry 16384 1 intel_pmc_core ac97_bus 12288 1 snd_ac97_codec pmt_class 16384 1 pmt_telemetry snd_seq 131072 2 snd_seq_midi,snd_seq_midi_event vmw_balloon 28672 0 rapl 24576 0 snd_pcm 192512 2 snd_ac97_codec,snd_ens1371 pcspkr 12288 0 vmw_vmci 131072 2 vmw_balloon,vmw_vsock_vmci_transport snd_timer 53248 2 snd_seq,snd_pcm snd_rawmidi 57344 2 snd_seq_midi,snd_ens1371 snd_seq_device 16384 3 snd_seq,snd_seq_midi,snd_rawmidi snd 155648 9 snd_seq,snd_seq_device,snd_timer,snd_ac97_codec,snd_pcm,snd_rawmidi,snd_ens1371 i2c_piix4 28672 0 soundcore 16384 1 snd joydev 28672 0 xfs 2686976 3 libcrc32c 12288 4 nf_conntrack,nf_nat,nf_tables,xfs vmwgfx 475136 1 drm_ttm_helper 16384 2 vmwgfx sr_mod 28672 0 cdrom 90112 1 sr_mod sg 53248 0 ttm 114688 2 vmwgfx,drm_ttm_helper drm_kms_helper 266240 2 vmwgfx,drm_ttm_helper ata_generic 16384 0 crct10dif_pclmul 12288 1 drm 815104 6 vmwgfx,drm_kms_helper,drm_ttm_helper,ttm ata_piix 45056 0 nvme 65536 4 crc32_pclmul 12288 0 crc32c_intel 24576 1 libata 520192 2 ata_piix,ata_generic ghash_clmulni_intel 16384 0 nvme_core 245760 5 nvme vmxnet3 98304 0 nvme_auth 28672 1 nvme_core serio_raw 16384 0 dm_mirror 28672 0 dm_region_hash 28672 1 dm_mirror dm_log 24576 2 dm_region_hash,dm_mirror dm_mod 245760 12 dm_log,dm_mirror fuse 212992 3modinfo内核参数1 查看方法sysctl -a 2 定制内核参数2-1 临时定制 echo 重定向 echo xxx /path/to/args_file sysctl -w 方式sysctl -w 属性 值 2-2 配置文件 全局配置文件编辑 /etc/sysctl.conf 生效 sysctl -p 部分配置文件编辑 /etc/sysctl.d/xxx.conf 生效 sysctl -p /path/to/xxx.conf实践总结systemd服务配置文件 杀死后重新加载服务命令服务文件: [unit] 服务描述 [service] 服务运行 [install] 服务归属于哪个级别 服务文件的路径 /usr/lib/systemd/system ✓ /run/systemd/system/ /etc/systemd/system/ ✓ /lib/systemd/system 提示操作任意设备必须先做镜像同时并换后或使用抓下工具。 常用的服务管理命令 systemctl 子命令 服务名 启动 start 关闭 stop 重启 restart 状态 status 重载 reload 是否存货 is-active 开机自启动 enable 开启不自启动 disable 检测开机是否自启动 is-enabled 禁用 mask 取消禁用 unmaskreload 重载 不杀死进程直接应用服务文件配置字段说明[Unit]定义与 Unit 类型无关的通用选项用于提供 unit 的描述信息、unit 行为及依赖关系等[Service]与特定类型相关的专用选项此处为 Service 类型[Install]定义由 “systemctl enable” 以及 “systemctl disable” 命令在实现服务启用或禁用时用到的一些选项unit****配置[Unit] 字段中的常用选项字段作用Description描述信息Documentation帮助信息After定义 unit 的启动次序表示当前 unit 应该晚于哪些 unit 启动其功能与 Before 相反Before定义 unit 的启动次序表示当前 unit 应该早于哪些 unit 启动其功能与 After 相反Requires依赖到的其它 units强依赖被依赖的 units 无法激活时当前 unit 也无法激活Wants依赖到的其它 units弱依赖Conflicts定义 units 间的冲突关系service****配置字段说明Type定义影响 ExecStart 及相关参数的功能的 unit 进程启动类型EnvironmentFile环境配置文件PIDFile指明生成进程文件路径ExecStartPreExecStart 前运行可以有多条ExecStart指明启动 unit 要运行命令或脚本的绝对路径ExecStartPostExecStart 后运行可以有多条ExecReload指明重新加载 unit 配置要运行的命令或脚本ExecStop指明停止 unit 要运行的命令或脚本KillSignal以何信号杀死进程默认 SIGTERMKillMode以何种方式杀死进程 control-group|process|mixed|noneTimeoutStopSec在超过此时间后如果进程没有被杀死则继续使用 SIGKILL 配置或 FinalKillSignal 配置停止进程PrivateTmp布尔值true 表示会生成私有的 tmp 目录路径是 /tmp/systemd-private-UUID-NAME.service-XXXXXX/tmp/Restart当守护进程意外终止时是否自动重启RestartSec意外终止到自动重启之间的时间间隔其目的是保证前面的程序彻底退出默认值 100msType字段常用值simple #默认值, 这个daemon主要由ExecStart接的指令串来启动启动后常驻于内存中 forking #由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务, 原生父程序在启动结束后就会终止 oneshot #与simple类似, 不过这个程序在工作完毕后就结束了不会常驻在内存中 dbus #与simple类似但这个daemon必须要在取得一个D-Bus的名称后, 才会继续运作, 因 此通常也要同时设定BusNname notify #在启动完成后会发送一个通知消息, 还需要配合NotifyAccess来让Systemd 接收消 息 idle #与simple类似, 要执行这个daemon必须要所有的工作都顺利执行完毕, 这类daemon 通常是开机到最后才执行的服务install****配置自定义一个服务文件 实践如何定制一个服务文件1 服务的启动执行命令2 编写 service 文件3 启动测试[root[rocky9-12 ~ ]# cp /etc/systemd/system/display-manager.service /etc/systemd/system/helloworld.service 当前位置 ~ [root[rocky9-12 ~ ]# vim /etc/s/etc/systemd/system/helloworld.service 当前位置 ~ [root[rocky9-12 ~ ]# systemctl daemon-reload 当前位置 ~ [root[rocky9-12 ~ ]# systemctl status helloworld.service ○ helloworld.service - this is hello world Loaded: loaded (/etc/systemd/system/helloworld.service; disabled; preset: disabled) Active: inactive (dead) 12月 10 16:00:17 rocky9-12 systemd[1]: /etc/systemd/system/helloworld.service:6: Unknown key name EXecStop in sect lines 1-5/5 (END) 当前位置 ~ [root[rocky9-12 ~ ]# systemctl start helloworld.service 当前位置 ~ [root[rocky9-12 ~ ]# systemctl status helloworld.service ● helloworld.service - this is hello world Loaded: loaded (/etc/systemd/system/helloworld.service; disabled; preset: disabled) Active: active (running) since Wed 2025-12-10 16:00:33 CST; 9s ago Main PID: 1807 (bash) Tasks: 2 (limit: 10722) Memory: 720.0K CPU: 102ms CGroup: /system.slice/helloworld.service ├─1807 /bin/bash -c while true ; do echo hello world \$(date /tmp);sleep 1; done └─1825 sleep 1 12月 10 16:00:33 rocky9-12 systemd[1]: Started this is hello world. 12月 10 16:00:33 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:00:35 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:00:36 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:00:37 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:00:38 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:00:39 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:00:40 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:00:41 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:00:42 rocky9-12 bash[1807]: hello world /tmp 当前位置 ~ [root[rocky9-12 ~ ]# systemctl stop helloworld.service 当前位置 ~ [root[rocky9-12 ~ ]# systemctl status helloworld.service ○ helloworld.service - this is hello world Loaded: loaded (/etc/systemd/system/helloworld.service; disabled; preset: disabled) Active: inactive (dead) 12月 10 16:01:03 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:01:04 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:01:05 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:01:06 rocky9-12 bash[1807]: hello world /tmp 12月 10 16:01:06 rocky9-12 systemd[1]: Stopping this is hello world... 12月 10 16:01:06 rocky9-12 systemd[1]: helloworld.service: Deactivated successfully. 12月 10 16:01:06 rocky9-12 systemd[1]: Stopped this is hello world. 12月 10 16:01:06 rocky9-12 systemd[1]: /etc/systemd/system/helloworld.service:6: Unknown key name EXecStop in sect 12月 10 16:01:06 rocky9-12 systemd[1]: /etc/systemd/system/helloworld.service:6: Unknown key name EXecStop in sect 12月 10 16:01:09 rocky9-12 systemd[1]: /etc/systemd/system/helloworld.service:6: Unknown key name EXecStop in sect lines 1-14/14 (END)练习课程中awk的使用实践1 提取IP当前位置 ~ [root[rocky9-12 ~ ]# ip a | grep global | tr -s | awk -F {print $2} 10.0.0.12/24实践2当前位置 ~ [root[rocky9-12 ~ ]# cat passwd root:x:0:0:root:/root:/bin/bash 当前位置 ~ [root[rocky9-12 ~ ]# awk -F: {print $NF-1} passwd -1 当前位置 ~ [root[rocky9-12 ~ ]# awk -F: {print $(NF-1)} passwd /rootDNS简单实践当前位置 ~ [root[rocky9-12 ~ ]# hostname rocky9-12 当前位置 ~ [root[rocky9-12 ~ ]# vim /etc/hosts 当前位置 ~ [root[rocky9-12 ~ ]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.0.12 rocky9-12.magedu.com rocky9-12 当前位置 ~ [root[rocky9-12 ~ ]# ping rocky9-12 PING rocky9-12.magedu.com (10.0.0.12) 56(84) 比特的数据。 64 比特来自 rocky9-12.magedu.com (10.0.0.12): icmp_seq1 ttl64 时间0.036 毫秒 64 比特来自 rocky9-12.magedu.com (10.0.0.12): icmp_seq2 ttl64 时间0.037 毫秒 ^C --- rocky9-12.magedu.com ping 统计 --- 已发送 2 个包 已接收 2 个包, 0% packet loss, time 1028ms rtt min/avg/max/mdev 0.036/0.036/0.037/0.000 ms2总结DNS域名三级结构DNS 域名的三级结构是根域、顶级域、二级域的层级划分三级结构不含主机名主机名属于附加在二级域之下的主机标识其核心是通过分层管理实现域名的全球唯一映射。1. 根域Root Domain标识以一个点.表示是 DNS 层级的最顶层。作用管理所有顶级域的解析全球共有 13 组根域名服务器由不同机构运营。特点在日常输入域名时根域的.通常被省略例如输入www.baidu.com实际等价于www.baidu.com.。2. 顶级域Top-Level Domain, TLD位置根域的下一级是域名中最右侧的部分。分类通用顶级域gTLD无国家 / 地区限制如.com商业、.org组织、.net网络服务、.edu教育机构。国家和地区顶级域ccTLD对应特定国家 / 地区如.cn中国、.us美国、.uk英国、.jp日本。作用作为域名的分类标识由专门的机构管理例如.cn由中国互联网络信息中心CNNIC管理。3. 二级域Second-Level Domain, SLD位置顶级域的左侧是用户实际注册的核心域名部分。示例在baidu.com中baidu是二级域.com是顶级域。在tsinghua.edu.cn中tsinghua是二级域.edu.cn是顶级域属于国家顶级域.cn下的子类别。作用是域名的唯一标识用户通过向域名注册商申请获得需保证在同一顶级域下不重复。补充说明三级结构之上的主机名如wwwmail属于域名的前缀用于标识同一域名下的不同服务器例如www.baidu.com中的www是指向 Web 服务器的主机名。实际应用中还会衍生出子域如news.baidu.com中的news是baidu.com的子域属于二级域之下的扩展层级不属于三级结构本身。结构示例以www.aliyun.com为例层级标识所属类别根域.顶层根域顶级域.com通用顶级域二级域aliyun注册的二级域主机名附加wwwWeb 服务器标识DNS服务工作原理涉及递归和迭代查询原理总结DNS服务器类型解析答案正反解析域资源记录定义。配置「DNS 服务器地址系统配置文件路径用途生效方式Rocky Linux/etc/resolv.conf传统 DNS 临时配置可能被 NetworkManager 覆盖直接修改后立即临时生效重启网络 / 系统后失效/etc/sysconfig/network-scripts/ifcfg-网卡名网卡级永久 DNS 配置如 eth14在文件中添加DNS1xx.xx.xx.xx执行systemctl restart NetworkManager生效/etc/NetworkManager/system-connections/连接名.nmconnectionNetworkManager 管理的连接 DNS 配置修改后执行nmcli connection reloadnmcli connection up 连接名生效Ubuntu/etc/resolv.conf符号链接指向 systemd-resolved 的存根文件直接修改无效需通过 systemd-resolved/netplan 配置/etc/netplan/*.yamlUbuntu 18.04netplan 网络配置文件含 DNS添加nameservers: addresses: [xx.xx.xx.xx]执行netplan apply生效/etc/network/interfacesUbuntu 16.04 及以下旧版网卡配置文件添加dns-nameservers xx.xx.xx.xx执行systemctl restart networking生效openEuler/etc/resolv.conf传统 DNS 临时配置可能被 NetworkManager 接管直接修改后立即临时生效重启网络后失效/etc/sysconfig/network-scripts/ifcfg-网卡名网卡级永久 DNS 配置在文件中添加DNS1xx.xx.xx.xx执行systemctl restart network生效/etc/NetworkManager/system-connections/连接名.nmconnectionNetworkManager 连接 DNS 配置修改后执行nmcli conn reloadnmcli conn up 连接名生效更改DNS 域名ubuntu当前位置 /etc/netplan [root[ubuntu24-13 netplan ]# vim /etc/hosts 当前位置 /etc/netplan [root[ubuntu24-13 netplan ]# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 ubuntu24-13 # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 10.0.0.13 www.kai.com 当前位置 /etc/netplan [root[ubuntu24-13 netplan ]# systemctl restart systemd-resolved.service 当前位置 /etc/netplan [root[ubuntu24-13 netplan ]# ping www.kai.com PING www.kai.com (10.0.0.13) 56(84) bytes of data. 64 bytes from www.kai.com (10.0.0.13): icmp_seq1 ttl64 time0.024 ms 64 bytes from www.kai.com (10.0.0.13): icmp_seq2 ttl64 time0.045 ms 64 bytes from www.kai.com (10.0.0.13): icmp_seq3 ttl64 time0.085 ms ^C --- www.kai.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2030ms rtt min/avg/max/mdev 0.024/0.051/0.085/0.025 msrocky当前位置 ~ [root[rocky9-12 ~ ]# vim /etc/hosts 当前位置 ~ [root[rocky9-12 ~ ]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.0.12 www.kai.com 当前位置 ~ [root[rocky9-12 ~ ]# ping www.kai.com PING www.kai.com (10.0.0.12) 56(84) 比特的数据。 64 比特来自 www.kai.com (10.0.0.12): icmp_seq1 ttl64 时间0.125 毫秒 64 比特来自 www.kai.com (10.0.0.12): icmp_seq2 ttl64 时间0.149 毫秒 ^C --- www.kai.com ping 统计 --- 已发送 2 个包 已接收 2 个包, 0% packet loss, time 1064ms rtt min/avg/max/mdev 0.125/0.137/0.149/0.012 msdig命令 Ubuntu 为例digwww.kai.com[root[ubuntu24-13 netplan ]# dig www.kai.com # 查询www.kai.com的DNS解析默认查IPv4地址 ; DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu www.kai.com # dig工具版本 ;; global options: cmd # 全局默认参数 ;; Got answer: # 收到DNS服务器响应 ;; -HEADER- opcode: QUERY, status: NOERROR, id: 46191 # 核心状态NOERROR解析成功 ;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 # 解析结果统计1条有效答案 ;; OPT PSEUDOSECTION: # DNS扩展参数非核心 ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: # 本次查询的内容 ;www.kai.com. IN A # 查询www.kai.com的IPv4地址A记录 ;; ANSWER SECTION: # 核心解析结果重点看这里 www.kai.com. 0 IN A 10.0.0.13 # www.kai.com解析到10.0.0.13 ;; Query time: 0 msec # 查询耗时0毫秒本地解析 ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) # 本次用的DNS服务器本地127.0.0.53 ;; WHEN: Thu Dec 11 14:03:07 CST 2025 # 查询时间 ;; MSG SIZE rcvd: 56 # 接收的响应报文大小2. 指定 DNS 服务器解析核心验证私有 DNS作用不用系统默认 DNS而是指定某台 DNS 服务器如你的 10.0.0.13 私有 DNS查询验证私有 DNS 是否生效。# 格式dig DNS服务器IP 域名dig10.0.0.13 www.kai.com# 用10.0.0.13解析www.kai.comdig8.8.8.8 www.baidu.com# 用谷歌DNS解析百度对比测试场景验证你搭建的私有 DNS 能否正确解析www.kai.com是排查内网 DNS 最关键的命令。3. 精简输出只看解析结果忽略冗余信息作用仅输出最终的解析 IP / 域名适合快速查看结果或脚本中使用。digshort www.kai.com# 仅输出10.0.0.13digshort 10.0.0.13 www.kai.com# 指定DNS精简输出4 记录类型A/NS/MX/CNAME 等按需查询对应类型排查特定解析问题。记录类型含义命令示例AIPv4 地址默认dig www.kai.com AAAAAIPv6 地址dig www.baidu.com AAAANS域名的权威 DNS 服务器dig kai.com NSMX邮件服务器邮箱用dig qq.com MXCNAME域名别名dig www.taobao.com CNAMEPTR反向解析IP→域名dig -x 10.0.0.13等价于 PTR 查询5反向解析IP → 域名作用验证 IP 地址对应的域名比如确认 10.0.0.13 是否绑定 www.kai.com。# 格式dig -x IP地址dig-x10.0.0.13[root[ubuntu24-13 netplan ]# dig -x 10.0.0.13 ; DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu -x 10.0.0.13 ;; global options: cmd ;; Got answer: ;; -HEADER- opcode: QUERY, status: NOERROR, id: 24660 ;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;13.0.0.10.in-addr.arpa. IN PTR ;; ANSWER SECTION: 13.0.0.10.in-addr.arpa. 0 IN PTR www.kai.com. ;; Query time: 0 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) ;; WHEN: Thu Dec 11 14:17:33 CST 2025 ;; MSG SIZE rcvd: 76问题场景需求场景推荐命令验证私有 DNS 解析www.kai.comdig 10.0.0.13 www.kai.com short快速查看域名 IPdig short www.baidu.com排查解析失败原因dig www.kai.com trace验证反向解析dig -x 10.0.0.13实现私有DNS, 供本地网络主机作DNS递归查询。操作 / 概念本质生效范围是否支持 DNS 递归查询修改/etc/hosts本地静态 IP - 域名映射表系统优先读取仅修改的这台 Ubuntu 主机❌ 不支持无 DNS 服务能力私有 DNS 设计搭建 DNS 服务器如 bind9提供域名解析服务本地网络所有主机✅ 支持递归 / 迭代查询DNS 递归查询客户端向 DNS 服务器请求解析域名服务器自动逐级查询直到拿到 IP网络内所有客户端仅 DNS 服务器能提供该能力bindrocky部署dns最好关闭selinux 和防火墙1.selinx[rootrocky9 ~]# systemctl disable --now firewalld [rootrocky9 ~]# sed -i s/SELINUX.*/SELINUXdisabled/ /etc/selinux/config [rootrocky9 ~]# reboot2.安装软件yum install bind -y systemctl start named 启动named systemctl enable named //开机自启动3vim /etc/named.conf 开放访问权限options { 11 listen-on port 53 { 127.0.0.1; any; }; 更改项目 12 listen-on-v6 port 53 { ::1; any; }; 更改项目 13 directory /var/named; 14 dump-file /var/named/data/cache_dump.db; 15 statistics-file /var/named/data/named_stats.txt; 16 memstatistics-file /var/named/data/named_mem_stats.txt; 17 secroots-file /var/named/data/named.secroots; 18 recursing-file /var/named/data/named.recursing; 19 allow-query { localhost; any; }; 更改项目4重载 两种都可以[root[rocky9-12 ~ ]# rndc reload server reload successful 当前位置 ~ [root[rocky9-12 ~ ]# systemctl restart named5.检测服务[rootrocky9 ~]# yum install net-tools -y [rootrocky9 ~]# netstat -tnulp | grep named [rootrocky9 ~]# ss -tnulp | grep named当前位置 ~ [root[rocky9-12 ~ ]# netstat -tunlp | grep named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 1668/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1668/named tcp 0 0 10.0.0.12:53 0.0.0.0:* LISTEN 1668/named tcp6 0 0 ::1:953 :::* LISTEN 1668/named tcp6 0 0 fe80::20c:29ff:fe70::53 :::* LISTEN 1668/named tcp6 0 0 ::1:53 :::* LISTEN 1668/named udp 0 0 10.0.0.12:53 0.0.0.0:* 1668/named udp 0 0 10.0.0.12:53 0.0.0.0:* 1668/named udp 0 0 127.0.0.1:53 0.0.0.0:* 1668/named udp 0 0 127.0.0.1:53 0.0.0.0:* 1668/named udp6 0 0 ::1:53 :::* 1668/named udp6 0 0 ::1:53 :::* 1668/named udp6 0 0 fe80::20c:29ff:fe70::53 :::* 1668/named udp6 0 0 fe80::20c:29ff:fe70::53 :::* 1668/named6 进行递归查询在这个dig结果里递归查询的状态是通过flags字段体现的 你看结果里的这一行flags: qr rd ra; rdRecursion Desired表示客户端请求了递归查询也就是你用dig查询时要求 10.0.0.12 这个 DNS 服务器帮你去 “层层查询”直到拿到最终的 IP 结果 raRecursion Available表示你的私有 DNS 服务器10.0.0.12支持并开启了递归查询功能。 这两个标志同时出现就说明这次查询是通过递归方式完成的你的私有 DNS 帮你完成了后续的查询步骤最终返回了结果当前位置 ~ [root[rocky9-12 ~ ]# dig 10.0.0.12 www.baidu.com ; DiG 9.16.23-RH 10.0.0.12 www.baidu.com ; (1 server found) ;; global options: cmd ;; Got answer: ;; -HEADER- opcode: QUERY, status: NOERROR, id: 58606 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 0c5e0978c40ea7df01000000693e34e06713eb598aa1661d (good) ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 1200 IN CNAME www.a.shifen.com. www.a.shifen.com. 120 IN A 220.181.111.1 www.a.shifen.com. 120 IN A 220.181.111.232 ;; Query time: 3919 msec ;; SERVER: 10.0.0.12#53(10.0.0.12) ;; WHEN: Sun Dec 14 11:54:08 CST 2025 ;; MSG SIZE rcvd: 132ubuntu 部署dns1安装系统软件bind9apt install bind9 -y systemctl status bind9实践当前位置 ~ [root[ubuntu24-13 ~ ]# apt install bind9 -y 当前位置 ~ [root[ubuntu24-13 ~ ]# systemctl status bind9 ● named.service - BIND Domain Name Server Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; preset: en Active: active (running) since Sun 2025-12-14 12:09:50 CST; 2min 24s ago Docs: man:named(8) Main PID: 2320 (named) Status: running Tasks: 8 (limit: 4546) Memory: 23.0M (peak: 23.4M) CPU: 39ms CGroup: /system.slice/named.service └─2320 /usr/sbin/named -f -u bind 12月 14 12:09:50 ubuntu24-13 named[2320]: network unreachable resolving ./DNSK 12月 14 12:09:50 ubuntu24-13 named[2320]: network unreachable resolving ./NS/I 12月 14 12:09:50 ubuntu24-13 named[2320]: network unreachable resolving ./DNSK 12月 14 12:09:50 ubuntu24-13 named[2320]: network unreachable resolving ./NS/I 12月 14 12:09:50 ubuntu24-13 named[2320]: network unreachable resolving ./DNSK 12月 14 12:09:50 ubuntu24-13 named[2320]: network unreachable resolving ./NS/I 12月 14 12:09:50 ubuntu24-13 named[2320]: network unreachable resolving ./DNSK 12月 14 12:09:50 ubuntu24-13 named[2320]: network unreachable resolving ./NS/I 12月 14 12:09:50 ubuntu24-13 named[2320]: managed-keys-zone: Initializing autom 12月 14 12:09:50 ubuntu24-13 named[2320]: managed-keys-zone: Initializing autom2关闭防火墙‘当前位置 ~ [root[ubuntu24-13 ~ ]# systemctl disable --now ufw Synchronizing state of ufw.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install disable ufw Removed /etc/systemd/system/multi-user.target.wants/ufw.service.3 检测服务当前位置 ~ [root[ubuntu24-13 ~ ]# netstat -tunlp | grep named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2320/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2320/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 2320/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 2320/named tcp 0 0 10.0.0.13:53 0.0.0.0:* LISTEN 2320/named tcp 0 0 10.0.0.13:53 0.0.0.0:* LISTEN 2320/named tcp6 0 0 ::1:53 :::* LISTEN 2320/named tcp6 0 0 ::1:53 :::* LISTEN 2320/named tcp6 0 0 ::1:953 :::* LISTEN 2320/named tcp6 0 0 ::1:953 :::* LISTEN 2320/named tcp6 0 0 fe80::5fe1:e458:5103:53 :::* LISTEN 2320/named tcp6 0 0 fe80::5fe1:e458:5103:53 :::* LISTEN 2320/named udp 0 0 10.0.0.13:53 0.0.0.0:* 2320/named udp 0 0 10.0.0.13:53 0.0.0.0:* 2320/named udp 0 0 127.0.0.1:53 0.0.0.0:* 2320/named udp 0 0 127.0.0.1:53 0.0.0.0:* 2320/named udp6 0 0 ::1:53 :::* 2320/named udp6 0 0 ::1:53 :::* 2320/named udp6 0 0 fe80::5fe1:e458:5103:53 :::* 2320/named udp6 0 0 fe80::5fe1:e458:5103:53 :::* 2320/named4编辑 Ubuntu 中 BIND 的配置文件/etc/bind/named.conf.options添加公共 DNS 作为上游解析源sudovim/etc/bind/named.conf.options在options块中补充forwarders { 8.8.8.8; # Google公共DNS 114.114.114.114; # 国内公共DNS };保存后验证配置并重启服务bashnamed-checkconf# 检查配置语法systemctl restart bind95 进行递归查询当前位置 ~ [root[ubuntu24-13 ~ ]# dig 10.0.0.13 www.baidu.com ; DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu 10.0.0.13 www.baidu.com ; (1 server found) ;; global options: cmd ;; Got answer: ;; -HEADER- opcode: QUERY, status: NOERROR, id: 5804 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 3dbacf40f67fa54101000000693e3e1b9f0da772785b3872 (good) ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 607 IN CNAME www.a.shifen.com. www.a.shifen.com. 607 IN A 220.181.111.232 www.a.shifen.com. 607 IN A 220.181.111.1 ;; Query time: 1332 msec ;; SERVER: 10.0.0.13#53(10.0.0.13) (UDP) ;; WHEN: Sun Dec 14 12:33:31 CST 2025 ;; MSG SIZE rcvd: 132bashnamed-checkconf# 检查配置语法systemctl restart bind95 进行递归查询当前位置 ~ [root[ubuntu24-13 ~ ]# dig 10.0.0.13 www.baidu.com ; DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu 10.0.0.13 www.baidu.com ; (1 server found) ;; global options: cmd ;; Got answer: ;; -HEADER- opcode: QUERY, status: NOERROR, id: 5804 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 3dbacf40f67fa54101000000693e3e1b9f0da772785b3872 (good) ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 607 IN CNAME www.a.shifen.com. www.a.shifen.com. 607 IN A 220.181.111.232 www.a.shifen.com. 607 IN A 220.181.111.1 ;; Query time: 1332 msec ;; SERVER: 10.0.0.13#53(10.0.0.13) (UDP) ;; WHEN: Sun Dec 14 12:33:31 CST 2025 ;; MSG SIZE rcvd: 132