TFTP 是一种文件传输协议,类似于 FTP,但它不用进行用户认证也不能列出目录。TFTP 服务器总是监听网络上的 PXE 客户端的请求。当它检测到网络中有 PXE 客户端请求 PXE 服务时,它将提供包含引导菜单的网络数据包。
1.安装
#$ sudo apt install tftp-hpa tftpd-hpa openbsd-inetd
## 后来发现其实tftpd会开机自起,所以没必要下载openbsd-inetd
$ sudo apt install tftp-hpa tftpd-hpa
## 这样就可以了。
tftp是客户端,用于测试下载;
tftpd是服务器;
openbsd-inetd是tftp的自动启动服务
2.创建tftp服务器根目录/tftpboot
$ sudo mkdir -p /tftpboot/
$ sudo chmod 0777 /tftpboot/
3.修改配置文件
## $ sudo vim /etc/inetd.conf
## 这个是openbsd-inetd的配置文件,其中的配置是提供开机启动的
## 后期发现tftpd-hpa会开机自起,不需要进行配置。
## 如果配置了,反而因为端口冲突而造成失败
# 如果tftp可以开机自起,就不必配置了,否则反而因为端口冲突而失败
#tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /tftpboot
$ sudo vim /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS=":69"
#TFTP_OPTIONS="--secure"
TFTP_OPTIONS="-l -c -s"
RUN_DAEMON="yes"
OPTIONS="-l-s /tftpboot"
4.启动
$ sudo update-inetd --enable BOOT
$ sudo service tftpd-hpa start/restart
5.测试
$ sudo netstat -lu
出现一下内容为正常:
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 *:tftp *:*
下载测试:
$ vim /tftpboot/test.txt
随便写入什么内容:
test:This file is used to test the TFTP server
在本机或另一台主机(要下载tftp客户端)
$ tftp server-ip
tftp-> get test.txt
tftp-> quit/exit
在本地打开文件查看内容
6.异常维护
曾出现过得情况:
在配置文件正常地情况下,重启服务器后tftp服务状态异常: /etc/init.d/tftpd-hpa status
● tftpd-hpa.service - LSB: HPA's tftp server
Loaded: loaded (/etc/init.d/tftpd-hpa; bad; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2017-05-07 10:56:19 UTC; 1min 17s ago
Docs: man:systemd-sysv-generator(8)
Process: 3971 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=71)
Feb 07 10:56:19 HOST001 systemd[1]: Starting LSB: HPA's tftp server...
Feb 07 10:56:19 HOST001 tftpd-hpa[3971]: * Starting HPA's tftpd in.tftpd
Feb 07 10:56:19 HOST001 systemd[1]: tftpd-hpa.service: Control process exited, code=exited status=71
Feb 07 10:56:19 HOST001 systemd[1]: Failed to start LSB: HPA's tftp server.
Feb 07 10:56:19 HOST001 systemd[1]: tftpd-hpa.service: Unit entered failed state.
Feb 07 10:56:19 HOST001 systemd[1]: tftpd-hpa.service: Failed with result 'exit-code'.
重启也是失败的:/etc/init.d/tftpd-hpa restart
[....] Starting tftpd-hpa (via systemctl): tftpd-hpa.serviceJob for tftpd-hpa.service failed because the control process exited with error code. See "systemctl status tftpd-hpa.service" and "journalctl -xe" for details.
failed!
解决:
发现其实tftp服务会开机自动启动,不需要openbsd-inetd再去启动一次。以上问题的原因是openbsd-inetd已经启动了一个tftp服务,占了69端口,但是tftp服务本身会开机自起,所以会出现失败。
只要将/etc/inetd.conf中对tftp的开机自起注释并重启openbsd-inetd就可以了。