几个星期以来,我一直在尝试使用我在网上找到的文章在全新的 Ubuntu 14.04 版本上构建 TFTP 服务器,但我的所有尝试似乎都失败了,因为我安装的 TFTP 服务器似乎没有响应。无论我使用 GET 还是 PUT,我总是收到超时错误。
我尝试过的最新文章是:
- 如何安装和运行 TFTP 服务器?
- http://community.spiceworks.com/how_to/100006-install-and-configure-tftp-under-ubuntu-14-04
这两次尝试均未成功,每次 TFTP 客户端都会抱怨超时错误。
我已经向 UFW 和 iptables 添加(或至少我认为我已经添加)规则以允许访问 UDP 端口 69,但没有任何成功。
我一直在从 Ubuntu 下载页面下载的 mini.iso 文件构建我的基本 Ubuntu 14.04 操作系统,并将其安装到在 Win7 pro 机器上运行的 VirtualBox VM(版本 4.3.8 r92456)上。初始构建期间没有安装其他软件包,但我在初始构建后安装了 SSH 和 NTP(两者似乎都在运行)。TFTP 客户端从我的 Win7 机器运行,Ubuntu 机器有一个静态 IP 地址。
该连接是由我的 Win7 计算机上的远程 TFTP 客户端建立的。
$ netstat -apu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 *:tftp *:* 8166/xinetd
udp 0 0 test.paumaz.local:ntp *:* 1332/ntpd
udp 0 0 localhost:ntp *:* 1332/ntpd
udp 0 0 *:ntp *:* 1332/ntpd
udp6 0 0 fe80::250:56ff:febe:ntp [::]:* 1332/ntpd
udp6 0 0 localhost:ntp [::]:* 1332/ntpd
udp6 0 0 [::]:ntp [::]:* 1332/ntpd
$ netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:mysql *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp6 0 0 [::]:http [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
udp 0 0 *:tftp *:*
udp 0 0 test.paumz.local:ntp *:*
udp 0 0 localhost:ntp *:*
udp 0 0 *:ntp *:*
udp6 0 0 fe80::250:56ff:febe:ntp [::]:*
udp6 0 0 localhost:ntp [::]:*
udp6 0 0 [::]:ntp [::]:*
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 7010 @/com/ubuntu/upstart
unix 2 [ ACC ] STREAM LISTENING 7559 /var/run/dbus/system_bus_socket
unix 2 [ ACC ] SEQPACKET LISTENING 7370 /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 9458 /var/run/mysqld/mysqld.sock
unix 2 [ ACC ] STREAM LISTENING 9209 /var/run/acpid.socket
答案1
安装以下软件包。
sudo apt-get install xinetd tftpd tftp
创造/etc/xinetd.d/tftp
sudo nano /etc/xinetd.d/tftp
并把这个条目
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /tftpboot
disable = no
}
创建一个文件夹,/tftpboot
该文件夹应与您提供的内容相匹配server_args
。大多数情况下它将是 tftpboot
sudo mkdir /tftpboot
sudo chmod -R 777 /tftpboot
sudo chown -R nobody /tftpboot
重新启动xinetd
服务。
sudo /etc/init.d/xinetd restart
您必须允许udp port 69
防火墙。
编辑1
就像我说的,首先tftp localhost
,然后get ...
。
给出输出cat /var/log/syslog | grep tftp
答案2
这里也有同样的问题。旧的 Ubuntu 9.? 已通过单击“是”升级到 14.04。用户从“之前”定义(默认一切)。
我发现它可以与以下对象一起使用:
tftp AAA.DDD.DDD.RRR
get test
^D
cat test
这有效,AAA.DDD.DDD.RRR
我的机器的实际 IP 在哪里。
(我目前有一个静态本地离线网络,因此例如:tftp 192.168.1.1
作为命令给出)
用单词“localhost”替换这个数字地址 ==>“获取”时超时
(它似乎连接正常,但无法获取文件)。