Centos 6/7 tftp 服务器未发送回复

Centos 6/7 tftp 服务器未发送回复

我正在尝试启动并运行一个非常简单的 TFTP 服务器,以便将其用作 IPXE 启动服务器。但是我所做的一切似乎都无法使服务器能够与远程客户端通信。我可以让客户端通过本地主机进行通信,这似乎很有效。

tftp $TFTP_SERVER -c get README

虽然这在本地主机上运行良好,但它违背了拥有可以远程通信的服务器的目的。tftp 配置文件内容如下:

[root@ipxe tmp]# cat /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -vvvvv -c -s /ipxe/
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

注意:出于调试目的,我已完成以下操作:我已禁用防火墙:

[root@ipxe ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@ipxe ~]# chkconfig iptables off

我已经禁用 SELinux 因为它很糟糕。

[root@ipxe tmp]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

我也重启过很多次了。

无论我尝试什么,即使将 CentOS 版本更改为 7 并重复该过程,我从 tftp 获得的最多信息是:

Jan 30 22:52:01 ipxe xinetd[2013]: START: tftp pid=2265 from=192.168.10.186
Jan 30 22:52:01 ipxe in.tftpd[2266]: RRQ from 192.168.10.186 filename README
Jan 30 22:52:06 ipxe in.tftpd[2267]: RRQ from 192.168.10.186 filename README
Jan 30 22:52:11 ipxe in.tftpd[2268]: RRQ from 192.168.10.186 filename README
Jan 30 22:52:20 ipxe in.tftpd[2269]: RRQ from 192.168.10.186 filename README
Jan 30 22:52:25 ipxe in.tftpd[2270]: RRQ from 192.168.10.186 filename README
Jan 30 22:52:30 ipxe in.tftpd[2271]: RRQ from 192.168.10.186 filename README
Jan 30 22:52:35 ipxe in.tftpd[2272]: RRQ from 192.168.10.186 filename README
Jan 30 22:52:40 ipxe in.tftpd[2275]: RRQ from 192.168.10.186 filename README

我显然可以 ping 系统并通过 ssh 进入系统,而且似乎没有发现任何类型的网络问题。

我到底错过了什么?诊断该问题的下一个逻辑线索是什么?我几乎准备好针对该问题提交错误报告了。

答案1

事实证明,测试 TFTP 时,您必须同时突破服务器和客户端的防火墙。这没什么意义,因为网上的大多数文章都会讨论 selinux 以及禁用 tftp 服务器上的防火墙。

服务器运行良好,尽管我尝试从多种不同类型的操作系统(从 Windows 到 Linux 再到 Mac)进行操作,但所有这 3 种不同的 tftp 客户端都需要在其防火墙中设置规则才能允许访问 tftp。

通常情况下,这会伴随 tftp 服务器中的一条消息,内容为“没有到主机的路由”,但由于某种原因,该步骤被省略了。

如果你和我一样,尽管遵循了所有的指示,但仍然不确定该怎么做。请确保你也突破了客户端的防火墙。

答案2

原因是,默认情况下,tftp 监听端口 69,但在完全随机的端口上启动文件传输,不经过 conntrack 规则处理,因此被防火墙阻止。

-R xxxx:xxxx您可以使用参数指定端口server_args范围/etc/xinet.d/tftp

server_args = -R 9990:9999 [rest of your parameters]

然而这只是一个部分解决方案,因为不能将其设置为与监听端口相同的值,并且这将是源端口而不是目标端口。因此,您很可能需要在客户端上设置特定的防火墙规则。

相关内容