第48篇:FTP 与 TFTP:配置文件备份与上传
关键词:FTP、TFTP、文件传输、配置备份、配置文件上传、华为设备、文件管理
一、引言
在日常网络运维中,配置文件的备份和恢复是最基础也是最重要的操作之一。无论是设备升级前备份当前配置、故障后恢复配置文件,还是将标准配置模板批量下发到多台设备,都离不开文件传输协议。
FTP(File Transfer Protocol)和 TFTP(Trivial File Transfer Protocol)是网络设备中最常用的两种文件传输协议。理解它们的特点、区别和配置方法,是每个网络工程师的必修课。
二、核心概念
2.1 FTP 与 TFTP 对比
| 对比维度 | FTP | TFTP |
|---|---|---|
| 全称 | File Transfer Protocol | Trivial File Transfer Protocol |
| 端口 | 21(控制)、20(数据) | 69 |
| 传输层协议 | TCP | UDP |
| 可靠性 | 高(TCP 保证) | 低(UDP,简单确认机制) |
| 认证 | 支持用户名/密码 | 不支持认证 |
| 目录浏览 | 支持 | 不支持 |
| 文件大小限制 | 无限制 | 通常较小(受缓冲区限制) |
| 资源消耗 | 较高(多连接) | 极低 |
| 适用场景 | 大型文件、安全要求高 | 小型文件、简单场景、嵌入式设备 |
2.2 FTP 工作模式
| 模式 | 连接建立方式 | 说明 |
|---|---|---|
| 主动模式(PORT) | 服务器主动连接客户端的数据端口 | 客户端防火墙可能阻断 |
| 被动模式(PASV) | 客户端连接服务器指定的数据端口 | 服务器防火墙需要开放端口范围 |
2.3 TFTP 传输模式
| 模式 | 说明 |
|---|---|
| NETASCII | ASCII 文本模式,适合配置文件 |
| OCTET | 二进制模式,适合系统镜像、二进制文件 |
2.4 华为设备文件类型
| 文件类型 | 文件名示例 | 说明 |
|---|---|---|
| 启动配置文件 | vrpcfg.zip | 设备启动时加载的配置(保存在存储设备根目录) |
| 当前运行配置 | —(位于内存) | 设备当前生效的配置,执行 save 后写入启动配置文件 |
| 系统软件 | s5735i-v200r019c10.cc | 设备操作系统镜像 |
| 日志文件 | logfile/log.log | 运行日志,保存 logbuffer 后生成于 flash:/logfile/ 目录 |
| 诊断信息 | diagnostic_information.zip | 故障诊断信息包(collect diagnostic information 生成) |
三、技术细节
3.1 华为设备 FTP 服务器配置
# 在华为设备上启用 FTP 服务器,允许外部 FTP 客户端上传/下载文件
# Step 1: 创建 FTP 用户
[HUAWEI] aaa
[HUAWEI-aaa] local-user ftp_admin password cipher Huawei@123
[HUAWEI-aaa] local-user ftp_admin service-type ftp
[HUAWEI-aaa] local-user ftp_admin privilege level 3
[HUAWEI-aaa] local-user ftp_admin ftp-directory cfcard:/
# Step 2: 启用 FTP 服务器
[HUAWEI] ftp server enable
# Step 3: (可选)限制可访问 FTP 服务的源地址范围
[HUAWEI] acl 2001
[HUAWEI-acl-basic-2001] rule 5 permit source 192.168.1.0 0.0.0.255
[HUAWEI] ftp acl 2001
# 验证
<HUAWEI> display ftp-server
# 查看 FTP 服务器使能状态与参数(回显以设备实际为准)
<HUAWEI> display ftp-users
# 查看当前在线 FTP 用户:用户名、客户端 IP、端口、授权目录等
3.2 通过 FTP 备份配置文件
# 在华为设备上作为 FTP 客户端,从远程 FTP 服务器下载/上传文件
# Step 1: 保存当前配置到启动配置
<HUAWEI> save
# Step 2: 查看设备上的文件
<HUAWEI> dir
Directory of cfcard:/
Idx Attr Size(Byte) Date Time FileName
0 -rw- 12,345 Jan 15 2024 10:30:00 vrpcfg.zip
# Step 3: 上传配置文件到 FTP 服务器
<HUAWEI> ftp 192.168.1.200
User(192.168.1.200:(none)): backup_user
Password:
ftp> binary # 切换到二进制模式
ftp> put vrpcfg.zip # 上传启动配置
ftp> quit # 退出 FTP
# Step 4: 从 FTP 服务器下载配置文件
<HUAWEI> ftp 192.168.1.200
User(192.168.1.200:(none)): backup_user
Password:
ftp> binary
ftp> get backup_config.zip # 下载配置文件
ftp> quit
3.3 TFTP 文件传输
# TFTP 无需在设备上配置服务器(设备作为客户端连接外部 TFTP 服务器)
# 确保设备与 TFTP 服务器连通
<HUAWEI> ping 10.1.1.2
# 从远端服务器下载文件。
<HUAWEI> tftp 10.1.1.2 get sample.txt sample1.txt
# 上传文件到远端服务器。
<HUAWEI> tftp 10.1.1.2 put sample.txt
# 通过名称为vpn1的VPN实例从远端服务器下载文件。
<HUAWEI> tftp -a 10.1.1.2 10.1.1.1 vpn-instance vpn1 get sample.txt sample1.txt
3.4 批量配置下发(自动化场景)
# 场景:将标准配置模板批量下发到 50 台接入交换机
# Step 1: 准备标准配置文件 standard_config.cfg
# Step 2: 通过脚本批量下发(Python 示例)
# 使用 Netmiko 或 Paramiko 库登录设备批量执行,此处略
# Step 3: 手动逐台下发(小型网络)
# 在每台交换机上执行:
<HUAWEI> tftp 192.168.1.200 get standard_config.cfg cfcard:/standard.cfg
<HUAWEI> system-view
[HUAWEI] load configuration file cfcard:/standard.cfg merge
[HUAWEI] commit
# load configuration file <file> merge:加载本地服务器上的配置文件,并将配置下发至当前设备
# 老版本设备可用 copy + startup saved-configuration + reboot 方式整包加载
# Step 4: 验证配置
<HUAWEI> display current-configuration
3.5 配置文件管理与恢复
# 保存配置
<HUAWEI> save
# 查看文件系统
<HUAWEI> dir cfcard:/
# 删除文件
<HUAWEI> delete /unreserved /force cfcard:/old_config.zip
# 重命名文件
<HUAWEI> rename cfcard:/config.zip cfcard:/config_backup_20261015.zip
# 恢复配置(增量式:逐条下发,不冲掉现有配置)
<HUAWEI> system-view
[HUAWEI] load configuration file cfcard:/backup_config.cfg merge
# 增量合并:将备份配置逐条下发到当前配置,已有配置不受影响
# (VRPv8 的 commit 两阶段模式下可用,需 commit 生效,以设备版本手册为准)
# 恢复配置(整包式:以备份配置作为启动配置,重启后生效)
<HUAWEI> startup saved-configuration cfcard:/backup_config.cfg
<HUAWEI> reboot fast
# 整包覆盖当前配置(谨慎使用!)
四、实战配置/案例分析
4.1 案例一:设备升级前完整备份
背景:某企业核心交换机 S6730 计划从 V200R005 升级到 V200R010,升级前需完整备份配置和系统文件。
# ===== 升级前备份 =====
# Step 1: 保存当前配置与日志
<S6730> save
<S6730> save logfile # 将日志缓冲区写入 flash:/logfile/log.log
# Step 2: 查看当前系统版本
<S6730> display version
Huawei Versatile Routing Platform Software
VRP (R) software, Version 5.170 (S6730 V200R005C10)
# 注:具体显示的 VRP 版本号随产品版本而异
# Step 3: 通过 FTP 上传备份文件到 FTP 服务器
<S6730> ftp 192.168.100.50
User(192.168.100.50:(none)): admin
Password:
ftp> binary
ftp> put vrpcfg.zip S6730_config_20240115.zip
ftp> put s6730-v200r005c10.cc S6730_image_20240115.cc
ftp> put logfile/log.log S6730_log_20240115.log
ftp> put diagnostic_information.zip S6730_diag_20240115.zip
ftp> quit
# Step 4: 下载新版本系统文件
ftp> get S6730_V200R010C10.cc flash:/
# 注意:建议用 FTP(TCP 可靠传输),不用 TFTP(UDP 不可靠)
# Step 5: 设置新版本为下次启动版本
<S6730> startup system-software flash:/S6730_V200R010C10.cc
# 用户视图执行;不同 VRP 版本的语法略有差异(部分老版本用 boot boot-loader),以设备手册为准
# Step 6: 升级后恢复
# 如果升级后出现异常,可以恢复旧版本:
<S6730> startup system-software flash:/s6730-v200r005c10.cc
4.2 案例二:TFTP 传输大文件失败
故障现象:尝试通过 TFTP 下载 500MB 的系统镜像文件,传输中途失败。
# 根因分析:
# 1. TFTP 使用 UDP,没有 TCP 的重传和流量控制机制
# 2. TFTP 默认使用 512 字节的数据包,大文件需要大量小包传输
# 3. 网络抖动时 UDP 丢包,TFTP 超时后直接中断
# 解决方案1:改用 FTP(推荐)
<HUAWEI> ftp 192.168.1.200
User(192.168.1.200:(none)): admin
Password:
ftp> binary
ftp> get S6730_V200R010C10.cc
# FTP 基于 TCP,支持重传,大文件传输更可靠
# 解决方案2:使用 SFTP(更安全)
# SFTP 基于 SSH,加密传输,安全性更高
# 华为设备通常启用 SFTP 服务器功能,由维护终端用 SSH/SFTP 客户端连接设备下载文件
4.3 案例三:配置文件恢复后设备异常
故障背景:管理员从 FTP 下载了一份旧配置进行恢复,恢复后设备路由丢失。
# 根因分析:
# 采用了"整包恢复":将旧配置设为启动配置并重启(startup saved-configuration + reboot),
# 重启后运行的完全是旧配置,期间新增的业务配置(VLAN、静态路由、BGP 等)全部丢失
# 解决方案:
# 1. 恢复前先保存当前配置(save),并核对备份配置的完整性再操作
# 2. 仅需补齐/调整部分配置时,用增量方式下发,而不是整包覆盖
<HUAWEI> system-view
[HUAWEI] load configuration file flash:/old_config.cfg merge
# load configuration file <file> merge:逐条下发备份中的配置,
# 不删除当前配置中已有的内容(VRPv8/commit 模式下可用,需 commit 生效;以手册为准)
# 3. 如果已经整包重启覆盖了,只能手动补回丢失的配置
<HUAWEI> display current-configuration
# 对比备份配置与恢复后的配置,逐项补回
# 最佳实践:
# 1. 恢复配置前先用增量方式测试
# 2. 先在 lab 环境验证,再在生产环境操作
# 3. 恢复后逐项验证业务状态
4.4 Windows 搭建 TFTP 服务器
# 在 Windows 上搭建 TFTP 服务器(用于接收/发送设备文件)
# 方式1: tftpd64(推荐,免费轻量)
# 1. 下载 tftpd64
# 2. 设置 TFTP Root 目录(如 D:\TFTP)
# 3. 启动服务,监听端口 69
# 4. 在防火墙中放行 UDP 69 端口
# 方式2: 使用第三方库 tftpy 搭建简易 TFTP 服务器(UDP 69)
# python -m pip install tftpy
# python -c "import tftpy; tftpy.TftpServer(r'D:\TFTP').listen('0.0.0.0', 69)"
五、总结
| 传输协议 | 传输层 | 认证 | 安全性 | 大文件 | 推荐场景 |
|---|---|---|---|---|---|
| FTP | TCP | 用户名/密码 | 明文传输(不安全) | 好 | 内网文件传输 |
| SFTP | TCP(SSH) | 用户名/密码 | 加密传输 | 好 | 需要安全传输时 |
| TFTP | UDP | 无 | 无安全 | 差(易失败) | 简单场景、无认证需求 |
| HTTP/HTTPS | TCP | 可选 | HTTPS 加密 | 好 | 通过 Web 管理界面 |
| 文件传输最佳实践 | 说明 |
|---|---|
| 大文件用 FTP/SFTP | TFTP 传大文件易失败 |
| 升级前完整备份 | 备份配置+镜像+日志+诊断信息 |
| 增量加载优先于整包覆盖 | load configuration ... merge 不冲掉已有配置 |
| 配置变更前后都备份 | 便于故障回退 |
| 使用版本化命名 | config_20240115_v1.zip |
| 定期自动备份 | 使用脚本定时备份到 FTP 服务器 |
思考
- TFTP 基于 UDP,它如何保证文件传输的完整性?与 TCP 相比有什么优势和劣势?
- 为什么"增量加载(
load configuration ... merge)"比"整包恢复(startup saved-configuration+ 重启)"不易丢失新增配置?什么场景下必须整包恢复? - FTP 主动模式和被动模式的区别是什么?为什么在 NAT 后面通常需要使用被动模式?
下篇预告:第49篇:Telnet 与 SSH:远程管理的安全之选