Ubuntu TFTP服务搭建及异常维护

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就可以了。

你可能感兴趣的:(Linux下的服务搭建)