TFTP

TFTP 页面介绍 MikroTik RouterOS 对简单文件传输协议(Trivial File Transfer Protocol)的实现,详细说明 TFTP 服务器访问规则的配置选项,包括 IP 地址范围、文件名处理、块大小限制,以及对客户端请求的正则表达式支持。

TFTP

简单文件传输协议(Trivial File Transfer Protocol,简称 TFTP)是一种用于传输文件的非常简单的协议。每个非终止数据包都会单独确认。

子菜单: /ip/tftp

此菜单包含所有 TFTP 访问规则。如果此菜单中没有规则,RouterOS 启动时不会启动 TFTP 服务器。与创建规则时可以设置的内容相比,此菜单仅多显示 1 个属性。

参数

属性描述
ip-addresses (required)作为客户端接受的 IP 地址范围。如果为空,将使用 0.0.0.0/0
allow-rollover (Default: No)如果设置为 yes,TFTP 服务器将允许在达到最大值时序列号回绕。这用于启用使用 TFTP 服务器的大文件下载。
req-filename请求的文件名,作为正则表达式(regex)。如果字段留空,默认为 .*
real-filename如果 req-filename 和 real-filename 值已设置且有效,请求的文件名将被替换为匹配的文件。此字段必须设置。如果 req-filename 中指定了多个 regex,使用此字段可以设置哪些应匹配,以便验证此规则。使用多个 regex 时的 real-filename 格式为 filename\0\5\6
allow (default: yes)如果上述字段已设置,是否允许连接。如果为 no,连接将被中断
read-only (default: no)设置文件是否可写入,如果设置为 "yes",写入尝试将失败并报错
hits (read-only)此访问规则条目被使用了多少次(只读)

设置

子菜单: /ip/tftp/settings

此菜单包含所有 TFTP 设置。

属性描述
max-block-size (default:4096)接受的最大块大小值。在传输协商阶段,RouterOS 设备不会协商比此更大的值。

正则表达式

Req-filename 字段允许使用 regexp,此字段中允许的 regexp 包括:

圆括号 () - 标记子节

    example 1 a(sd|fg) will match asd or afg

星号 "*" - 匹配前面的符号零次或多次

    example 1 a* will match any length name consisting purely of symbols a or no symbols at all
    example 2 .* will match any length name, also, empty field
    example 3 as*df will match adf, asdf, assdf, asssdf etc.

加号 "+" 匹配前面的符号一次或多次

    example: as+df will match asdf, assdf etc.

点号 "." - 匹配任意符号

    example as.f will match asdf, asbf ashf etc.

方括号 [] - 表示其中的变体

    example as[df] will match asd and asf

问号 "?" 匹配一个或零个符号

    example asd?f will match asdf and asf

脱字符 "^" - 用于行首,表示该行以...开头

美元符号 "$" - 表示行尾

示例

如果请求某个文件,则从名为 sata1 的存储返回该文件:

/ip/tftp/add req-filename=file.txt real-filename=/sata1/file.txt allow=yes read-only=yes

如果我们想无论用户请求什么,都只分发一个特定的文件:

/ip/tftp/add req-filename=.* real-filename=/sata1/file.txt allow=yes read-only=yes

如果用户请求 aaa.bin 或 bbb.bin,则给他们 ccc.bin:

/ip/tftp/add req-filename="(aaa.bin)|(bbb.bin)" real-filename="/sata1/ccc.bin\\0" allow=yes read-only=yes

提示

RouterOS 收到 TFTP 请求,但客户端却获得传输超时?

一些嵌入式客户端请求较大的块大小,却不能正确处理分片数据包。对于这些客户端,建议将 RouterOS 端的 "max-block-size" 或客户端端的 "blksize" 设置为网络中最小 MTU 减去 32 字节(20 字节用于 IP,8 字节用于 UDP,4 字节用于 TFTP)的值,如果您在网络中使用 IP 选项则需要更多。