Linux TFTP 服务器通过路由器进行外部访问

Linux TFTP 服务器通过路由器进行外部访问

我正在使用 Ubuntu 作为带有 tftp-hpa 服务的嵌入式 Linux 主板的主机。我可以使用 u-boot 引导加载程序顺利启动,同时将主机上运行的 TFTP 服务器的本地 ( 192.168.1.10 ) IP 地址传递到目标主板 ( 其 IP 地址为 192.168.1.3 )。在这种情况下,服务器和客户端都在路由器后面并位于 192.168.1.x 网络上。

我希望能够将我的目录从路由器导出到外部网络。我的 TFTP 服务器配置(通过 /etc/default/tftp-hpa)如下:

user@ubuntu:~$ cat /etc/default/tftpd-hpa

RUN_DAEMON="yes"

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/home/user/exported-nfs"

TFTP_ADDRESS="0.0.0.0:69"

TFTP_OPTIONS="-l --secure"

我已在路由器配置中将端口 69(UDP)转发到 192.168.1.10 的服务器,如下所示:

在此处输入图片描述

我还设置了我的路由器以使用服务器(192.168.1.10)作为 DMZ:

在此处输入图片描述

这有效:

user@ubuntu:~$ tftp
tftp> trace
Packet tracing on.
tftp> connect 192.168.1.10
tftp> get /boot/uImage
sent RRQ <file=/boot/uImage, mode=netascii>
received DATA <block=1, 512 bytes>
sent ACK <block=1>
received DATA <block=2, 512 bytes>
sent ACK <block=2>
received DATA <block=3, 512 bytes>
...
sent ACK <block=4465>
received DATA <block=4466, 343 bytes>
Received 2286423 bytes in 0.5 seconds
tftp>

但这不起作用:

user@ubuntu:~$ tftp
tftp> trace
Packet tracing on.
tftp> connect 129.196.194.210
tftp> 
tftp> get /boot/uImage
sent RRQ <file=/boot/uImage, mode=netascii>
sent RRQ <file=/boot/uImage, mode=netascii>
sent RRQ <file=/boot/uImage, mode=netascii>
sent RRQ <file=/boot/uImage, mode=netascii>
sent RRQ <file=/boot/uImage, mode=netascii>
Transfer timed out.

我可以使用外部路由器 IP(129.196.194.210)成功地通过 SSH(端口 22)连接到我的 192.168.1.10 服务器,因此我的端口转发正常。

user@ubuntu:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 0a:0c:c9:b1:fa:43  
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb1:da43/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:174803 errors:0 dropped:0 overruns:0 frame:0
          TX packets:155485 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:32417220 (32.4 MB)  TX bytes:94986400 (94.9 MB)
          Interrupt:19 Base address:0x2024 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:45130 errors:0 dropped:0 overruns:0 frame:0
          TX packets:45130 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:12913549 (12.9 MB)  TX bytes:12913549 (12.9 MB)

user@ubuntu:~$ ssh [email protected]
[email protected]'s password: 
Linux ubuntu 2.6.32-42-generic #96-Ubuntu SMP Wed Aug 15 18:57:09 UTC 2012 i686 GNU/Linux
Ubuntu 10.04.4 LTS

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/

New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Tue Sep 11 07:55:30 2012 from 129.196.194.210
user@ubuntu:~$ 

但是从路由器外部进行的 TFTP 访问经常失败和超时。我做错了什么?我该如何解决这个问题?谢谢 -

答案1

通过 NAT 的 TFTP 非常有问题的因为它使用 UDP 而不是 TCP 进行数据传输。您需要将路由器设置为 TFTP 代理,大多数家用路由器无法做到这一点(但我知道普富思有此功能)。

答案2

您需要 tftp 代理或单端口 tftp 配置(因为在 rfc 上,tftp 服务器在收到 69 端口的请求后必须在另一个端口上应答)。一些 tftp 服务器支持此功能,例如:

  1. 打开 tftphttp://sourceforge.net/projects/tftp-server/
  2. tftpd (hpa) 补丁 -http://www.syslinux.org/archives/2010-March/014150.html

相关内容