这两天安装ONIE和sonic系统,基于ONIE安装sonic系统时。需要使用到tftp服务,正好电脑里面有ubuntu的虚拟机,就直接在虚拟机上安装了tftp服务器。顺便记录下。
一、安装 tftp
1、安装tftp-hpa客户端、tftpd-hpa服务程序、创建tftp目录
sudo apt-get install tftp-hpa tftpd-hpa
sudo mkdir -p /home/USER/work/tftp
chmod 777 /home/USER/work/tftp -R #根据实际需求修改权限
2、安装xinetd
sudo apt-get install xinetd
Xinetd(eXtended InterNET services daemon,扩展互联网服务守护进程=超级互联网守护进程=超级服务),xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。
管理保护多种轻量级Internet服务。管理的服务都是一些不是很常用,但是系统中偶尔也会用到的小服务或者该服务没什么好的安全机制,比如:tftp、rsync、cvs、telnet等。它并不是一真正意义上的服务,xinetd相当于rync、cvs等服务的代理人,就像老大照着小弟!它的作用大致可以分为以下几个:访问控制、防止DOS攻击、扩展的日子选项、服务转发、用户交互式体验。
根据Xinetd的工作流程,修改配置文件。
第一步:初始化各服务信息
配置文件默认为/etc/xinetd.conf(如果没有该文件,需要自行创建),也可以通过参数指定。/etc/xinetd.conf默认内容如下:
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info
}
includedir /etc/xinetd.d
第二步:循环监听client请求,xinetd使用select来完成监听的。
针对tftp的client参数配置如下文件/etc/xinetd.d/tftp。
service tftp
{
socket_type = dgram #socket的链接类型是dgram(UDP)
protocol = udp #UDP协议
wait = yes #等待到启动完成
user = root #指定root用户启动服务进程
server = /usr/sbin/in.tftpd #指定服务进程是/usr/sbin/in.tftpd
server_args = -s /home/USER/work/tftp -c #指定传给该进程的参数
disable = no #no表示启动TFTP服务器
per_source = 11 #表示每一个ip地址上最多可以建立的实例数目
cps = 100 2 #每秒100个入站链接,超过限制,等待2秒
flags = IPv4 #允许IPV4连接
}
第三步:启动服务进程
服务进程是配置与tftp的服务端的连接,tftp服务端的配置文件默认为/etc/default/tftpd-hpa,建议配置如下:
ERNAME="tftp"
TFTP_DIRECTORY="/home/USER/work/tftp" #Ubuntu虚拟机中TFTP服务器的目录
TFTP_ADDRESS="0.0.0.0:69" #ip地址和端口号
TFTP_OPTIONS="-l -c -s" #-c是可以上传文件的参数。
#-s是指定的TFTP服务端目录,即TFTP_DIRECTORY;
#-l是在独立运行服务器(听)模式
这里会fork()一个进程来执行服务。因为外部服务进程需要调用execve()来执行,而execve()函数成功返回后并不会自行创建一个进程,而是用全新的程序替换了当前进程的正文、数据、堆和栈。在exec_server()函数中,会通过dup2系统调用将子进程的fd(0/1/2)克隆服务进程的socket fd,那么以后需要接收和发送报文时,就只用对fd 0/1来操作了。
第四步:重启tftp和xinetd服务
sudo service tftpd-hpa restart
sudo /etc/init.d/xinetd reload
sudo /etc/init.d/xinetd restart
二、本地测试
建立tftp服务器之后可本地测试。
终端中输入 sudo tftp localhost 或者 tftp A.B.C.D(本地IP),进入 tftp 命令符下(可以在其中输入 help查看命令和命令的作用),输入 get file,如果没有任何提示,就说明传输成功了,然后输入 q退出 tftp 命令符,在当前目录下就可以看到一个 file 文件,内容是与开始新建的那个 file 的内容是一致的。同样也可以在 tftp 命令符中输入 put xx,把 xx 文件上传到服务器文件夹中。如果一切 ok,那就么一个可用的 tftp 服务器就顺利搭建成功了。
root@xxxx:/home/xxxx/work# ls -l tftp
total 1101792
-rwxr--r-- 1 xxxx xxxx 1128224658 24 22:02 sonic-xxxxxx.bin
-rwxrwxrwx 1 xxxx xxxx 285 4 2021 test.c
root@xxxx:/home/xxxx/work# mkdir test
root@xxxx:/home/xxxx/work# cd test
root@xxxx:/home/xxxx/work/test# ls -l
total 0
root@xxxx:/home/xxxx/work/test# tftp 172.17.x.xx
tftp> get test.c
tftp> q
root@xxxx:/home/xxxx/work/test# ls -l
total 4
-rw-r--r-- 1 root root 285 30 14:51 test.c
其实搭建服务器并不难,网上有很多教程。主要是参照网上的这些教程实现之后,需要对流程有个简单的梳理。加强记忆,也为了开阔视野。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)