码上问学问代码之理,学编程之道

网络服务配置实战

从「会用命令」走到「能让一台服务器对外提供服务」。这一页对应课程标准项目 7~12 的六项服务配置 (DHCP / Samba / DNS / FTP / Apache / firewalld)。每项都按真实任务场景 → 改配置文件 → 启动服务 → 连通性测试 → 常见排障 五步讲,最后用「多服务集成部署 + 五步排障法」把课程收口。

讲法:先给任务再引命令(项目引领、任务驱动)。每项配置都强调「敲完输出怎么看、出错了怎么排、生产环境有什么风险」—— 这正是标准对 Linux 课的核心要求。所有配置片段来自教材《Linux操作系统管理(第2版)》,请在机房真实环境验证。
项目7

DHCP 服务器

自动发 IP
DHCP 租约四步:DISCOVER → OFFER → REQUEST → ACK客户端(新机器)DHCP 服务器① DISCOVER 广播「谁有 IP?」(全网广播)② OFFER 回应「我给你 192.168.1.100」③ REQUEST 请求「我要这个 IP」④ ACK 确认租约生效,带掩码/网关/DNS租约到期前会续租(T1 时刻发 REQUEST);服务器地址池必须与自身网卡同网段
场景局域网里几十台机器,不想一台台手配 IP——让服务器自动租约分发。
主配置/etc/dhcp/dhcpd.conf:定义子网、地址池、网关、DNS。
核心片段subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option routers 192.168.1.1; }
启动systemctl start dhcpd → systemctl enable dhcpd
测试客户端设 DHCP 自动获取,ip addr 看到 100~200 段地址即成功;journalctl -u dhcpd 看租约日志。
排障起不来先看地址池与服务器网卡是否同网段;多 DHCP 服务器会抢地址,实验环境只留一个。
项目8

Samba 文件共享

Linux⇄Windows
Samba:让 Windows 把 Linux 目录当「网上邻居」打开Linux 服务器共享目录 /data/share守护进程 smbd / nmbd端口 139 / 445Windows 客户端\\192.168.1.10\share映射为网络驱动器 Z:用 smb 账号登录SMB/CIFS 协议读写文件① Linux 侧:目录本身要有权限② Samba 侧:smb.conf 也要允许两层权限都要放行才能访问——这是最常见的「配好了却打不开」的原因
场景Linux 服务器上的目录,要让 Windows 同事像访问网上邻居一样打开。
主配置/etc/samba/smb.conf:定义共享名、路径、可写性、合法用户。
核心片段[share] path=/srv/share writable=yes valid users=alice
启动systemctl start smb nmb;用 smbpasswd -a alice 设 Samba 专用密码(独立于系统登录密码)。
测试Windows 资源管理器输入 \\服务器IP\share;Linux 端用 smbclient //IP/share -U alice。
排障连不上先查防火墙是否放行 139/445;权限问题看目录本身 rwx 与 valid users 是否匹配。
项目9

DNS 域名解析

把域名变 IP
DNS 解析:从域名到 IP 的一次「问路」用户机浏览器输入 www.a.com本地 DNS递归查询,替你跑腿根服务器「.com 去问谁」.com 顶级域「权威在这」权威 DNS返回真正 IP⑤ 沿原路返回:权威 → 顶级域 → 根 → 本地 DNS → 用户机(结果沿途缓存)递归查询:本地 DNS 替你问到底迭代查询:本地 DNS 自己一层层问排障顺序:nslookup / dig 看能否解析 → 查 /etc/resolv.conf 里 nameserver 是否可达
场景内网有个服务只想用 web.local 访问,不想记 IP。
主配置/etc/named.conf 声明区域;区域数据文件写 A 记录。
核心片段区域文件:web IN A 192.168.1.10;主/辅助用 type master/slave,转发用 forwarders。
启动systemctl start named;客户端 /etc/resolv.conf 指向该服务器。
测试nslookup web.local 或 dig web.local 看到解析结果。
排障解析失败先看区域文件语法(少了结尾点 . 是经典坑)与 named 是否监听 53 端口。
项目10

FTP 文件传输

vsftpd
FTP 两种模式:区别只在「谁主动连谁」主动模式 PORT(服务器主动连回来)客户端服务器 21命令:N → 21数据:20 → M✗ 服务器主动连客户端高位端口客户端防火墙常拦掉 → 连不上数据被动模式 PASV(都由客户端发起)客户端服务器 21命令:N → 21数据:N → P✓ 两次连接都由客户端发起穿透防火墙友好 → 现在默认用这个口诀:主动模式服务器「回头连」客户端;被动模式服务器开个端口「等你来连」
场景需要给外部合作方一个账号,只让他传文件到指定目录。
主配置/etc/vsftpd/vsftpd.conf:匿名 / 本地用户 / 虚拟用户三种模式。
三种用户匿名(ftp 用户,只读公享);本地(系统账号直登);虚拟(映射到一个系统账号,最安全,生产首选)。
启动systemctl start vsftpd
测试ftp IP 登录后 put/get;虚拟用户记得配 guest_enable=YES 与 pam。
排障登录 530 多为虚拟用户 pam 配置或家目录权限;被动模式连不上查防火墙放行被动端口段。
项目11

Apache Web 服务器

httpd
Apache:一个 80 端口如何服务多个站点浏览器请求Apache :80按 Host 头匹配虚拟主机站点目录www.a.com/var/www/a/www.b.com/var/www/b/同一台机器、同一个 IP:靠请求头里的 Host 区分站点,这就是「虚拟主机」
场景把做好的网站发布出去,让别人用浏览器访问。
主配置/etc/httpd/conf/httpd.conf;站点根目录 /var/www/html。
虚拟主机四种:基于 IP / 端口 / 域名 / HTTPS。域名虚拟主机最常用:<VirtualHost *:80> ServerName web.local DocumentRoot /var/www/web </VirtualHost>
启动systemctl start httpd;firewall-cmd --add-service=http 放行。
测试浏览器访问 http://IP 或域名;ss -tlnp | grep :80 确认监听。
排障403 多半是DocumentRoot 权限或 SELinux;HTTPS 需配证书,自签证书浏览器会告警(教学可用)。
项目12

firewalld 防火墙

最后一道门
firewalld:不是按端口堆规则,而是按「区域」管放行网卡 eth0绑定trusted全放行public只放行指定服务drop全部丢弃不回应区域里写的是「服务名」:ssh / http / https —— 而不是一个个端口号firewall-cmd --add-service=http --permanent → --reload改完必须 --reload 才生效排障先查 zone:--get-active-zones经典坑:服务起来了却访问不了,多半是 firewalld 没放行端口(或 SELinux 上下文不对)
场景服务起来后,只允许该放的端口被访问,挡掉其余流量。
区域public 是默认区域;firewall-cmd --get-active-zones 看当前。
放行服务firewall-cmd --add-service=http --permanent 后 --reload。
富规则精细控制来源 IP / 端口:firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 service name=ssh accept'
测试firewall-cmd --list-all 确认规则生效;从外部 nmap IP 看端口开闭。
排障服务起不来先怀疑被防火墙拦了:临时 --remove-service 验证,别急着关防火墙。

综合实训:多服务集成部署

对应标准「综合实训(第 17~18 周)」

任务:一台服务器上同时跑 DHCP + DNS + Web

10 学时
  1. 规划:一台 CentOS 虚拟机,静态 IP 192.168.1.10;DHCP 给客户机发 100~200,DNS 负责 web.local 解析,Apache 提供站点。
  2. 装服务:dnf install dhcp-server bind httpd,一次把三个包装齐。
  3. 配 DNS + Apache:区域文件 web IN A 192.168.1.10,虚拟主机 DocumentRoot 指向站点目录。
  4. 配 DHCP:地址池同网段,option routers 指向网关,option domain-name-servers 指向本机 192.168.1.10。
  5. 联动验证:客户端自动拿到 IP → 用域名 web.local 访问到网页,证明 DNS 与 Web 串起来了。
集成最容易踩的坑:三服务都依赖网络与防火墙。任一访问不了,先确认 firewalld 放行了 dhcp/dns/http,再查服务是否真的 listening(ss -tlnup),最后看日志(journalctl -u 服务名)。

五步排障法(贯穿课程)

服务启动失败 / 端口占用 / 域名解析异常 / 防火墙拦截
五步排障法:出错不慌,按流程走① 看现象报什么错?② 定范围哪一层的问题?③ 查证据看日志/端口/进程④ 改一处一次只改一个变量⑤ 记下来写进排障笔记查证据三板斧:systemctl status 看状态 · journalctl -u 看日志 · ss -lntp 看端口先确认「服务是否真的在跑」再看「端口是否被防火墙挡住」一次只改一处、改完立刻验证——这是新人最容易忽视、却最省时间的习惯
  1. 看状态:systemctl status 服务名 一眼看是「没起」「起崩了」还是「起了没监听」。
  2. 看日志:journalctl -u 服务名 -xe 读报错,别靠猜——90% 的坑日志里写明了。
  3. 看端口:ss -tlnp 确认服务真的在监听该端口,排除「起了但没绑对地址」。
  4. 看网络/防火墙:ping 通不通、firewall-cmd --list-all 放没放,确认不是被门挡了。
  5. 看配置语法:回溯配置文件(少分号、少点、路径错是三大经典),改完 重新加载 再验。
用证据说话:标准把「读懂报错、审核 AI 给出的命令」列为素质目标。排障时不复制粘贴 AI 给的命令盲试,先理解它要干什么,再在小范围验证。

本页对齐的考核点