D:入门版一键网络切换与基础隔离(Linux 运维基础)
背景
新上线一台业务服务器,需要在两种网络环境间快速切换并完成基础验证:
- 办公网络(dhcp):eth0 通过 DHCP 获取 IP/网关/DNS
- 生产网络(static):eth0 使用静态配置;并要求 禁止访问公网(仅允许访问指定内网网段)
网络地址规划(生产网络 static)
| 项目 | 值 |
|---|---|
| 网卡 | eth0 |
| IP | 172.22.146.150/24 |
| 网段 | 172.22.146.0/24 |
| 默认网关 | 172.22.146.1 |
| DNS | 172.22.146.53, 172.22.146.54 |
基本要求
- 所有操作 必须通过 bash 脚本完成;禁止手动编辑网络配置文件(例如
/etc/network/interfaces、/etc/netplan/*、/etc/sysconfig/*等)。 - 脚本需支持 重复执行(幂等)、可回滚(rollback)。
- 脚本需具备 日志(至少记录:时间、动作、结果),并能定位失败原因(错误信息清晰)。
Level 规则
- 通过要求:至少完成 Level 2
- Level 3 为加分项
Level 0:环境确认与脚本框架
目标
- 创建脚本
netctl.sh,具备基本的参数解析与usage帮助信息。 - 具备日志输出能力(时间、动作、结果),日志可写入文件(路径可自定或用环境变量控制)。
- 能在非 root 情况下给出清晰提示(例如提示使用
sudo)。
验收标准
sudo ./netctl.sh(无参数)能输出用法说明并以非 0 退出。- 日志文件中有对应记录。
Level 1:基础网络配置与模式切换
编写脚本 netctl.sh,支持参数:
dhcp:切换 eth0 到 DHCP(办公模式)static:切换 eth0 到静态配置(生产模式,使用题面给定 IP/网关/DNS)status:打印当前 eth0 的 IPv4 地址、默认路由、DNS
约束
- 不允许手动改配置文件,需通过脚本调用系统命令完成(如
nmcli/ip/dhclient等)。 - 要求幂等:同一模式连续执行不应报错或产生重复/冲突配置。
验收标准
- 执行
sudo ./netctl.sh dhcp后,status能看到 eth0 存在 IPv4 地址(DHCP 获取即可)。 - 执行
sudo ./netctl.sh static后,status至少能展示:- eth0 IPv4 为
172.22.146.150/24(或等价表达) - 默认路由网关为
172.22.146.1 - DNS 包含
172.22.146.53与172.22.146.54
- eth0 IPv4 为
Level 2:基础验证 + 回滚
在 dhcp/static 切换完成后,脚本需自动执行基础验证;并实现 rollback 回滚。
2.1 基础验证
切换完成后需做验证:
- eth0 是否存在且处于 UP
- 是否存在 IPv4 地址
static模式下额外检查:- 默认网关是否为
172.22.146.1 - DNS 是否包含
172.22.146.53/54 - 能否 ping 通网关
172.22.146.1(超时/次数可自定)
- 默认网关是否为
验证失败要求:
- 脚本必须以 非 0 退出码退出
- 输出清晰错误信息(指出失败项与当前观测值/建议检查项)
2.2 rollback
支持参数:
rollback:回滚到脚本第一次执行前的网络状态(至少:DHCP/静态方式 + IP/网关/DNS)
要求:
- 首次运行时保存“初始状态”(保存方式自定:文件/目录/临时路径均可,但需在 README 中说明)
- 回滚后可通过
status验证配置已恢复
Level 3:生产网络基础隔离(加分项)
当处于 static(生产网络)时,通过防火墙或路由策略实现访问控制:
- 允许访问:
172.22.146.0/24、172.16.0.0/12 - 禁止访问:公网地址(即除了以上允许网段之外的目的地址都不允许)
验收标准(最小可测)
static模式下:- 对允许网段内目标的访问可成功(例如
ping/curl任一种即可) - 对公网目标的访问失败(例如
ping 1.1.1.1或对公网 IP/域名curl失败)
- 对允许网段内目标的访问可成功(例如
dhcp模式下:- 不应因为生产隔离策略导致办公网络无法正常出站(可清空/恢复策略,方案自定但需说明)
提交要求
GitHub 仓库链接:提交你创建的仓库地址,并确保仓库为可访问状态netctl.sh:主脚本README.md:使用说明(参数、示例、备份/回滚策略、日志路径)- (可选)运行截图/日志片段:展示
dhcp/static/status/rollback的关键输出 - (Level 3 可选)展示“内网可达 + 公网不可达”的命令输出