这可能看起来像一个重复的问题,但我做了一些搜索,但没有找到任何解决方案。
我创建了一个 tftp 服务器,当从本地 tftp 客户端访问该服务器时,通过环回可以正常获取和放置文件。当我尝试通过外部客户端访问服务器时,请求超时。连接已建立。我可以在 tftp 客户端中看到连接已连接,没有问题。文件传输未启动。
客户端通过以太网电缆直接连接到主机,我创建了 2 个设备 LAN。它们之间可以进行 ping 操作。
我最初以为这是一个防火墙问题,现在我已经禁用防火墙,允许在 iptables 中配置的端口 69 上进行 INPUT 和 OUTPUT。端口 69 上也允许使用 udp。
我也没有运行 tftpd-hpa 服务器的多个实例,它作为守护进程运行,并且网络状态监测仅运行一个 tftp 服务器。
客户端正在发出正确的请求,我可以在 wireshark 中看到它们,但没有任何响应。
并且失败总是超时。
**firewall disabled**
**ports allow connection **
**file transfer fails**
** outgoing tftp request as a client to other tftp servers is alos blocked **
更新2:
我不太清楚防火墙的问题,因为这台笔记本电脑是我的雇主发的,我怀疑他们是否允许禁用防火墙。阅读/var/log/syslog没有给出任何提示,所以尝试查看内核打印以查看是否有任何 kmodules 在做任何可疑的事情,我看到了这些。
[10989.915231] FIREWALL: IN=eth1 OUT= MAC=50:7b:9d:f9:44:5d:68:9e:19:99:9e:e4:08:00 SRC=10.42.0.89 DST=10.42.0.1 LEN=65 TOS=0x00 PREC=0x00 TTL=255 ID=117 DF PROTO=UDP SPT=2495 DPT=69 LEN=45
这新加坡铁路公司,国防科技大学,德普特,原始这MAC地址全部与我的 tftp 客户端匹配。
我真的不知道这里发生了什么,所以如果有人能提示我寻找一些日志或其他东西,那将真的很有帮助。
在此之后我安装了海湾战争管理防火墙并允许所有传入和传出流量。我仍然会遇到超时,这就是我现在在系统日志上看到的内容。
Sep 5 16:16:01 arun-TP kernel: [13836.201853] [UFW AUDIT] IN= OUT=eth1 SRC=10.42.0.1 DST=10.42.0.255 LEN=184 TOS=0x00 PREC=0x00 TTL=64 ID=12630 DF PROTO=UDP SPT=17500 DPT=17500 LEN=164
Sep 5 16:16:01 arun-TP kernel: [13836.201870] [UFW ALLOW] IN= OUT=eth1 SRC=10.42.0.1 DST=10.42.0.255 LEN=184 TOS=0x00 PREC=0x00 TTL=64 ID=12630 DF PROTO=UDP SPT=17500 DPT=17500 LEN=164
这次夏令时没有意义,客户端位于10.42.0.89并不是10.42.0.255。
更新1:
在/etc/default/tftpd-hpa中
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create -s"
RUN_DAEMON="YES"
ls-lrt /
drwxr-xr-x 2 tftp nogroup 4096 Sep 5 03:30 tftpboot
网络状态监测
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 *:mdns *:* 739/avahi-daemon: r
udp 0 0 *:50694 *:* 2514/rpc.mountd
udp 0 0 *:55107 *:* 2514/rpc.mountd
udp 0 0 *:nfs *:* -
udp 0 0 *:3471 *:* 8567/dhclient
udp 0 0 *:56776 *:* 739/avahi-daemon: r
udp 0 0 10.42.0.1:domain *:* 5403/dnsmasq
udp 0 0 127.0.1.1:domain *:* 3025/dnsmasq
udp 0 0 *:bootps *:* 5403/dnsmasq
udp 0 0 *:bootpc *:* 8567/dhclient
udp 0 0 *:tftp *:* 4316/in.tftpd
udp 0 0 *:sunrpc *:* 966/rpcbind
udp 0 0 *:ipp *:* 1476/cups-browsed
udp 0 0 *:707 *:* 966/rpcbind
udp 0 0 *:33526 *:* 2514/rpc.mountd
udp 0 0 *:49935 *:* -
udp 0 0 localhost:796 *:* 1044/rpc.statd
udp 0 0 *:54194 *:* 1044/rpc.statd
udp 0 0 *:17500 *:* 3785/dropbox
udp6 0 0 [::]:mdns [::]:* 739/avahi-daemon: r
udp6 0 0 [::]:42779 [::]:* -
udp6 0 0 [::]:59279 [::]:* 1044/rpc.statd
udp6 0 0 [::]:nfs [::]:* -
udp6 0 0 [::]:60007 [::]:* 2514/rpc.mountd
udp6 0 0 [::]:52311 [::]:* 2254/BESClient
udp6 0 0 [::]:11656 [::]:* 8567/dhclient
udp6 0 0 [::]:sunrpc [::]:* 966/rpcbind
udp6 0 0 [::]:45289 [::]:* 739/avahi-daemon: r
udp6 0 0 [::]:57589 [::]:* 2514/rpc.mountd
udp6 0 0 [::]:707 [::]:* 966/rpcbind
udp6 0 0 [::]:37709 [::]:* 2514/rpc.mountd
没有 tftp 配置文件/etc/xinetd.d/
防火墙已禁用。ufw 状态 = 不活动
iptables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
2 656 ACCEPT udp -- eth1 any anywhere anywhere udp dpt:bootps
0 0 ACCEPT tcp -- eth1 any anywhere anywhere tcp dpt:bootps
0 0 ACCEPT udp -- eth1 any anywhere anywhere udp dpt:domain
0 0 ACCEPT tcp -- eth1 any anywhere anywhere tcp dpt:domain
36569 3800K ACCEPT all -- lo any anywhere anywhere
30392 20M ACCEPT tcp -- any any anywhere anywhere state RELATED,ESTABLISHED
2704 679K ACCEPT udp -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT 254 -- ipsec+ any anywhere anywhere
0 0 ACCEPT esp -- any any anywhere anywhere
0 0 ACCEPT ah -- any any anywhere anywhere
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:isakmp
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:cfengine
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:5900
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:5901
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:12080
0 0 REJECT tcp -- any any anywhere anywhere tcp dpt:auth reject-with icmp-port-unreachable
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:5656
0 0 ACCEPT udp -- any any anywhere anywhere udp dpts:5004:5005
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpts:5004:5005
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:20830
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:20830
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpts:sip:5062
0 0 ACCEPT udp -- any any anywhere anywhere udp dpts:sip:5062
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:21100
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:2001
0 0 ACCEPT gre -- any any anywhere anywhere
0 0 ACCEPT icmp -- any any anywhere anywhere icmp destination-unreachable
0 0 ACCEPT icmp -- any any anywhere anywhere icmp source-quench
689 56460 ACCEPT icmp -- any any anywhere anywhere icmp time-exceeded
0 0 ACCEPT icmp -- any any anywhere anywhere icmp parameter-problem
0 0 ACCEPT icmp -- any any anywhere anywhere icmp router-advertisement
0 0 ACCEPT icmp -- any any anywhere anywhere icmp echo-request
13 832 ACCEPT icmp -- any any anywhere anywhere icmp echo-reply
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:tproxy
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:1533
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpts:30000:30005
0 0 DROP tcp -- any any anywhere anywhere tcp dpts:bootps:bootpc
6 1968 DROP udp -- any any anywhere anywhere udp dpts:bootps:bootpc
0 0 DROP tcp -- any any anywhere anywhere tcp dpt:netbios-ns
0 0 DROP udp -- any any anywhere anywhere udp dpt:netbios-ns
0 0 DROP tcp -- any any anywhere anywhere tcp dpt:netbios-dgm
0 0 DROP udp -- any any anywhere anywhere udp dpt:netbios-dgm
0 0 DROP tcp -- any any anywhere anywhere tcp dpt:netbios-ssn
0 0 DROP udp -- any any anywhere anywhere udp dpt:netbios-ssn
0 0 DROP tcp -- any any anywhere anywhere tcp dpts:tcpmux:ftp-data
0 0 DROP tcp -- any any anywhere anywhere tcp dpt:sunrpc
0 0 DROP tcp -- any any anywhere anywhere tcp dpts:snmp:snmp-trap
0 0 DROP tcp -- any any anywhere anywhere tcp dpt:520
0 0 DROP tcp -- any any anywhere anywhere tcp dpts:6348:6349
0 0 DROP tcp -- any any anywhere anywhere tcp dpts:6345:gnutella-rtr
75 3256 LOG tcp -- any any anywhere anywhere limit: avg 3/min burst 5 LOG level debug prefix "FIREWALL: "
1459 263K LOG udp -- any any anywhere anywhere limit: avg 3/min burst 5 LOG level debug prefix "FIREWALL: "
3347 568K DROP all -- any any anywhere anywhere
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:tftp state NEW,ESTABLISHED
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:69 state NEW,ESTABLISHED
Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- any eth1 anywhere 10.42.0.0/24 state RELATED,ESTABLISHED
0 0 ACCEPT all -- eth1 any 10.42.0.0/24 anywhere
0 0 ACCEPT all -- eth1 eth1 anywhere anywhere
0 0 REJECT all -- any eth1 anywhere anywhere reject-with icmp-port-unreachable
0 0 REJECT all -- eth1 any anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT 68593 packets, 6962K bytes) pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:69 state NEW,ESTABLISHED
1 45 ACCEPT udp -- any any anywhere anywhere udp dpt:tftp state NEW,ESTABLISHED
作为客户端的传出 tftp 请求也被阻止。我的 IP 是 192,168.0.5 尝试连接到 192.168.0.2
tftp 192.168.0.2
tftp> verbose on
Verbose mode on.
tftp> status
Connected to 192.168.0.2.
Mode: netascii Verbose: on Tracing: off Literal: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> put hello
putting hello to 192.168.0.2:hello [netascii]
Transfer timed out.
我的路由器是不是出了什么问题?我需要注意哪些设置?即使我使用以太网电缆将客户端直接连接到服务器,也会出现此问题。我尝试使用 BeagleBone Black、MACbook 和我的 Android 手机作为 tftp 客户端向服务器发出请求。
客户端:10.42.0.89(BeagleBlack,在 u-boot 上)服务器:10.42.0.1
我现在使用 wireshark 来嗅探以太网数据包。
地址解析协议(ARP):
32 927.886269000 10.42.0.89 Broadcast ARP 60 Who has 10.42.0.1? Tell 10.42.0.89
33 927.886320000 50:7b:9d:f9:44:5d 10.42.0.89 ARP 42 10.42.0.1 is at 50:7b:9d:f9:44:5d
在此之后,我只看到从客户端发起的这个,没有任何内容出去。
36 932.887008000 10.42.0.89 10.42.0.1 TFTP 79 Read Request, File: hello, Transfer type: octet, timeout\000=5\000, blksize\000=1468\000
答案1
防火墙配置的这一部分向您展示了如何丢弃所有数据包然后允许 tftp 数据包。
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
. . .
3347 568K DROP all -- any any anywhere anywhere
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:tftp state NEW,ESTABLISHED
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:69 state NEW,ESTABLISHED
将删除所有规则和记录规则移至 tftp 允许规则之后。
答案2
答案3
当服务器尝试向客户端发送数据时,来自服务器的源端口不是 69...它是随机的高端口。如果您的客户端有防火墙,并且您在 UDP 69 上打了一个洞,则 TFTP 将无法工作。建议使用服务器上的嗅探器重试,但查看发往客户端的所有 UDP 流量,而不仅仅是端口 69。有关该协议的更多详细信息,请参阅 TFTP 的 Wikipedia 页面。
此外,Anubioz 在另一个答案中给了你很好的建议。
答案4
我在尝试将文件复制到 Casa Systems CMTS 时遇到了完全相同的问题,我需要在服务管理模块 (SMM) 访问控制列表中添加条目。我最初有一个条目允许从我的 TFTP 服务器 IP 地址进行 TFTP。当我运行 tcpdump 并在随机高 UDP 端口上发现服务器对我的路由器的响应时,我打开了路由器上的 ACL 以允许来自我的 TFTP 服务器的任何 IP 流量,会话开始正常工作。
我知道这是一个老话题,但以防其他人遇到这个问题,请尝试在任何控制平面 ACL 中添加一个条目,允许所有 IP 访问您的 TFTP 服务器。