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 选项则需要更多。