Ubuntu/Debian Linux:安装和设置TFTPD服务器

时间:2020-01-09 10:40:54  来源:igfitidea点击:

如何在Debian或Ubuntu Linux服务器下安装和配置TFTP服务器,以配置网络设备,例如通过PXE引导远程引导无盘设备或远程加载Unix之类的操作系统?

tftpd是用于琐碎文件传输协议的服务器。

TFTP协议被广泛用于支持无盘设备的远程启动或加载操作系统。

Debian或Ubuntu可以使用以下任一tftpd服务器:

  • atftpd高级TFTP服务器。
  • tftpd简单的文件传输协议服务器。
  • tftpd-hpa HPA tftp服务器。
  • dnsmasq轻量级DNS,TFTP和DHCP服务器。

在本教程中,我将安装和配置tftpd-hpa。

警告:TFTP服务器/协议提供的安全性很少。
确保将TFTP服务器放置在防火墙系统后面。

tftpd-hpa TFTP服务器安装

以超级用户身份执行以下apt-get命令:

$ sudo apt-get install tftpd-hpa

或者

# apt-get install tftpd-hpa

将被提升为以下级别(确保将目录名称设置为/srv/tftp):
在Ubuntu/Debian系统中安装和设置TFTPD服务器

输出示例:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  tftpd-hpa
0 upgraded, 1 newly installed, 0 to remove and 15 not upgraded.
Need to get 0 B/49.1 kB of archives.
After this operation, 201 kB of additional disk space will be used.
Preconfiguring packages ...
Selecting previously deselected package tftpd-hpa.
(Reading database ... 281779 files and directories currently installed.)
Unpacking tftpd-hpa (from .../tftpd-hpa_5.0-18_amd64.deb) ...
Processing triggers for man-db ...
Setting up tftpd-hpa (5.0-18) ...
Starting HPA's tftpd: in.tftpd.

配置

编辑/etc/default/tftpd-hpa,运行:

# vi /etc/default/tftpd-hpa

示例配置:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

如何启动/停止/重新启动tftpd-hpa服务器?

执行以下命令:

service tftpd-hpa status
service tftpd-hpa stop
service tftpd-hpa start
service tftpd-hpa restart
service tftpd-hpa force-reload

输出示例:
启动/停止/重新启动tftpd服务器命令

接下来,您需要将所有引导文件放在/srv/tftp目录中。
您可以为各种操作系统和第三方固件创建以下目录结构:

# cd /srv/tftp
# mkdir {openbsd,freebsd,netbsd}
# mkdir -p linux/{debian,ubuntu,rhel,centos,fedora,suse}
# mkdir -p firmwares/{linksys,cisco,soekris,pata,sata,ipmi,nic}
# ls -l
# ls -l linux/
# ls -l firmwares/

如何测试我的tftpd服务器?

您需要安装名为tftp的tftp客户端。
它是Internet TFTP(临时文件传输协议)的用户界面,允许用户与远程计算机进行文件传输。
可以在命令行上指定远程主机,在这种情况下,tftp使用主机作为默认主机。

安装琐碎的文件传输协议客户端(tftp)

执行以下命令:

$ sudo apt-get install tftp

或者

# apt-get install tftp

输出示例:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  tftp
0 upgraded, 1 newly installed, 0 to remove and 15 not upgraded.
Need to get 18.9 kB of archives.
After this operation, 53.2 kB of additional disk space will be used.
Get:1 http://debian.osuosl.org/debian/ squeeze/main tftp amd64 0.17-18 [18.9 kB]
Fetched 18.9 kB in 1s (10.5 kB/s)
Selecting previously deselected package tftp.
(Reading database ... 281794 files and directories currently installed.)
Unpacking tftp (from .../tftp_0.17-18_amd64.deb) ...
Processing triggers for man-db ...
Setting up tftp (0.17-18) ...

测试tftpd服务器

在此示例中,我将来自OpenBSD.org的pxeboot文件(用于网络安装的第二阶段PXE引导程序)放在/srv/tftp/openbsd /目录中,以与客户端进行检索,以进行测试:

# cd /srv/tftp/openbsd/
# wget http://ftp.openbsd.org/pub/OpenBSD/5.2/i386/pxeboot

输出示例:

--2012-12-01 17:17:09--  http://ftp.openbsd.org/pub/OpenBSD/5.2/i386/pxeboot
Resolving ftp.openbsd.org... 129.128.5.191
Connecting to ftp.openbsd.org|129.128.5.191|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 53920 (53K) [text/plain]
Saving to: `pxeboot'
 
100%[=====================================- ] 53,920      53.0K/s   in 1.0s    
 
2012-12-01 17:17:10 (53.0 KB/s) - `pxeboot' saved [53920/53920]

我也在下载bsd.rd文件。
它是压缩的RAMDISK内核;嵌入式文件系统包含安装工具:

# wget http://ftp.openbsd.org/pub/OpenBSD/5.2/i386/bsd.rd

输出示例:

--2012-12-01 17:17:25--  http://ftp.openbsd.org/pub/OpenBSD/5.2/i386/bsd.rd
Resolving ftp.openbsd.org... 129.128.5.191
Connecting to ftp.openbsd.org|129.128.5.191|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6422208 (6.1M) [text/plain]
Saving to: `bsd.rd'

17% [====-                                  ] 11,42,782   20.3K/s  eta 3m 47s

最后,验证两个文件均已在/srv/tftp/openbsd /位置正确下载并安装:

# ls -l /srv/tftp/openbsd/

输出示例:

total 6344
-rw-r--r-- 1 root root 6422208 Dec  1 17:20 bsd.rd
-rw-r--r-- 1 root root   53920 Aug  1 22:02 pxeboot

从远程客户端执行以下命令:

$ tftp tftp-server-ip-here
$ tftp 192.168.1.5

示例输出(在" tftp>"提示符下执行以绿色突出显示的命令):

tftp> status
Connected to 192.168.1.5.
Mode: netascii Verbose: off Tracing: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> get openbsd/pxeboot
Received 54234 bytes in 0.0 seconds
tftp> get openbsd/bsd.rd
Received 6465608 bytes in 0.5 seconds
tftp> quit

防火墙配置

将防火墙规则添加到防火墙脚本中以打开所需的端口:

## make sure you load the following modules first ##
modprobe ip_conntrack_tftp
modprobe  ip_conntrack_ftp 
 
## firewall rules to open tcp/udp tftpd port 69  for 192.168.1.0/24 ##
/sbin/input -A INPUT -s 192.168.1.0/24 -m tcp -p tcp --dport 69 -j ACCEPT
/sbin/input -A INPUT -s 192.168.1.0/24 -m tcp -p udp  --dport 69 -j ACCEPT