TR-069
TR069 页记录 MikroTik RouterOS 对 CPE WAN Management Protocol (CWMP) 的实现,用于远程设备管理,涵盖 ACS URL 和认证等配置设置、只读状态监控、用于重置配置的命令、CWMP 会话详情、基于 BBF 标准的参数数据模型,以及使用 Download RPC 的固件升级流程。
TR-069
TR069-client 实现了由 Broadband Forum (BBF) 标准化的 CPE WAN Management Protocol (CWMP),用于远程设备管理。CWMP 通过 IP 网络使用 HTTP(S) 与 Auto Configuration Server (ACS) 通信,ACS 可以监控、配置远程设备的属性并更新其固件。它通常由 ISP 用来管理 CPE,但也可用于网络基础设施设备管理。
配置
TR069-client 从 /tr069-client 菜单配置。
客户端配置包含可写设置,例如 enabled、acs-url、username、password、periodic-inform-enabled、periodic-inform-interval 和 client-certificate。只读设置(status、last-session-error、retry-count)用于监控客户端状态。/tr069-client/reset-tr069-config 命令会完全重置并忘记 tr069-client 的配置和状态(不影响其他 RouterOS 配置)。当 CWMP 进入无响应或挂起状态,且需要在不重装 RouterOS 的情况下恢复时,请使用此命令。
可用参数的完整列表请参阅 CLI 参考。
CWMP 会话
CWMP 客户端通常在不同事件时发起与 ACS 的通信(会话)——首次启动、重启、周期性间隔、远程请求、值变更等。在每次会话中,CPE 和 ACS 都可以调用 RPC 在对方侧“执行”。CPE 总是以 Inform RPC 开始,它包含连接原因、设备信息以及取决于配置的一些 Parameter 值。当 CPE 没有更多要说的内容时,ACS 执行它的 RPC(大多数情况下是 Parameter 管理 RPC)。
参数与数据模型
参数是简单的名称+值对,每个厂商可以决定其设备支持哪些 Parameter。所有受支持 Parameter 的组合称为数据模型 (DM)。BBF 定义了三个根数据模型(TR-098、TR-181:1、TR-181:2),厂商应基于它们来制定其支持的 Parameter。RouterOS 数据模型基于 "TR-181 Issue 2 Amendment 11"。
RouterOS TR069 客户端支持的参数参考
Download RPC
RouterOS 更新(1 Firmware Upgrade Image)
CWMP 标准规定,CPE 的固件可以使用 Download RPC 更新,使用 FileType="1 Firmware Upgrade Image" 和单个可下载文件的 URL(支持 HTTP 和 HTTPS)。标准还指出,下载的文件可以是任何类型,并且可以应用厂商特定的流程来完成固件更新。由于 MikroTik 的更新是基于软件包的(同时也为了额外的灵活性),因此使用一个 XML 文件来描述固件升级/降级。目前,XML 配置支持提供多个文件 URL,这些文件会被下载并像通过固件/软件包文件上传进行的常规 RouterOS 更新一样应用。
以下是一个 RouterOS bundle 包和 tr069-client 包更新(请确保也更新 tr069-client 包)的示例。把 XML 文件放在可从 CPE 访问的 HTTP 服务器上以便下载。可下载的 RouterOS 包文件必须以相同方式可访问(它们可以在任何 HTTP 服务器上)。使用 ACS 执行 Download RPC,URL 指向该 XML 文件(例如 "https://example.com/path/upgrade.xml"),内容为:
<upgrade version="1" type="links">
<config/>
<links>
<link>
<url>https://example.com/routeros-mipsbe-X.Y.Z.npk</url>
</link>
<link>
<url>https://example.com/tr069-client-X.Y.Z-mipsbe.npk</url>
</link>
</links>
</upgrade>
CPE 下载该 XML,解析并验证其内容,从提供的 URL 下载文件,并尝试升级。结果通过 TransferComplete RPC 报告。
信息
请始终以增量方式进行固件更新——先更新一台在本地测试过的设备,并确保 CWMP 通信在新版本下恢复且所需的 RouterOS 功能正常。然后逐步更新成组的 CPE,重复这些步骤。你不应一次性更新所有远程设备。
在生产环境中进行固件管理时请使用 HTTPS。
配置变更(3 Vendor Configuration File)
同一个 Download RPC 可以用于执行完整的配置覆盖(符合标准的本意)或配置修改(当 URL 的文件扩展名为 ".alter" 时)。
修改配置
RouterOS 有大量配置属性,并非所有内容都能映射到 CWMP Parameter。这就是为什么 RouterOS 提供执行其强大脚本语言来配置任何属性的能力。配置修改(即常规的脚本执行)可以使用 Download RPC 执行,使用 FileType="3 Vendor Configuration File" 和扩展名为 ".alter" 的可下载文件。此功能可用于配置任何通过 CWMP Parameter 无法获得的 RouterOS 属性。
覆盖所有配置
完整 ROS 配置覆盖可以使用 Download RPC FileType="3 Vendor Configuration File" 和任意 URL 文件名(扩展名 ".alter" 除外)来执行。
警告
所提供的配置文件(脚本)必须足够健壮,以便在重启后立即正确应用配置。当使用 Upload RPC 上传的配置文件时,这一点尤为重要,因为它只包含导出的值。有些内容必须手动添加:
- 用于让接口出现的启动延迟。
- 用户的隐藏密码。
- Certificates。
RouterOS 默认配置变更(X MIKROTIK Factory Configuration File)
这个厂商特定的 FileType 允许更改 RouterOS 默认配置脚本,该脚本在执行 /system/reset-configuration 命令时(或通过其他方式重置路由器配置时)被执行。
警告
如果默认配置脚本被更改,它不会像使用 Netinstall 工具更改该脚本时那样由
/system/default-configuration/print显示。该命令将始终显示 MikroTik 设置的默认脚本。请谨慎使用,因为上传的脚本失败可能会使设备无法操作,或导致 ACS 无法访问它。
FactoryReset RPC
这是一个 CWMP 标准 RPC,用于执行 RouterOS 配置的恢复出厂设置。重置过程与执行以下命令的方式相同:
/system/reset-configuration skip-backup=yes
请注意,默认出厂配置可能因设备而异(参见 Default configurations),执行此命令会移除所有配置并执行内部存储的 default-configuration 脚本。
Upload RPC
上传当前配置(1 Vendor Configuration File)
结果是一个上传到 ACS 的文件,与 RouterOS 中 /export 命令的输出相同。
上传日志文件(2 Vendor Log File)
结果是一个上传到 ACS 的文件,类似于 RouterOS 中 /log/print 命令的输出。
上传默认配置(X MIKROTIK Factory Configuration File)
结果是一个上传到 ACS 的文件,其中包含当前默认配置脚本的内容,该脚本会在执行 /system/reset-configuration 命令时被执行。它可能与 /system/default-configuration/print 返回的内容不同。
安全
- 仅在安全或私有网络中测试初始设置时使用 HTTP,因为中间人攻击者可以读取或更改配置参数。在生产环境中,你必须使用 HTTPS。
- CWMP 的传入连接验证在设计上是安全的,因为 CPE 不会与先前配置的 ACS 之外的任何设备通信。Connection Request 只是通知 CPE 与先前配置的 ACS 开始新的连接和会话。
为使用 TR069 准备路由器
本最佳实践指南展示了在需要安全的、预配置的、带自定义配置的恢复出厂设置时(尤其是在使用 TR-069 的情况下)RouterOS 初始设置的示例。当设备被错误配置到不可逆状态(由用户或提供商在不知情的情况下造成)时,它会很有用。恢复出厂配置可以通过 TR069 FactoryReset RPC、RouterOS /system/reset-configuration,或使用路由器上的 reset 按钮来应用。
在 Netinstall 时覆盖出厂默认配置
执行 Netinstall 时,可以改编 default-configuration 脚本以满足特定需求,并通过覆盖 MikroTik 默认脚本进行安装。希望把 FactoryReset 作为备份、以便在发生无法解决的错误配置后让设备重新可达的提供商应该这样做。在 TR-069 的情况下,default-configuration 脚本至少应导入证书、建立 IP 层连接、启用并配置 tr069-client,并配置防火墙。之后,其他配置可以由 ACS 完成。
警告
恢复出厂设置时所有证书都会被移除,因此如果重置后需要它们,default-configuration 脚本必须导入它们。
示例脚本
以下 default-configuration 示例脚本假设该板使用 ether1 作为访问 ACS 的 WAN 端口,使用一个虚拟 CA 证书,并且初始 IP 配置由 DHCP 客户端获取。
说明
必须替换 certificate、acs-url、username 和 password 的值,并且很可能会添加额外配置。你可能还希望为从 LAN 侧进行发现定义自己的接口列表。
# Install certificate
:global acsCaCertTxt "-----BEGIN CERTIFICATE-----
MIIDCDCCAfCgAwIBAgIIBQ68Phid9+owDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE
AwwEbXlDYTAeFw03MDAxMDIwMDM0MDZaFw03MTAxMDIwMDM0MDZaMA8xDTALBgNV
BAMMBG15Q2EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDILvvnEc/8
53jevX3MW4qjn9CNdHLexUZSL8qSXzE5sik1kaNOdckOXC8/Ku0qO95elaBaXmLe
QsIQbVtZ768SBQc7q4RaG3AEauLfNl0BS3kl91/nSvYKp20Nvn7LP7CVZj8D81S+
z4lYgab00X6hT65r8cOI4idaJNWkB9+vFujiPpg0H4IEthgslvCu0i2C7VMrZps/
lTI4xD7kUU4ySzpMUDD3SiA1cEtR8SC5gspYFqtUB2Chk4DTeqWzPCT9eIKclIKM
eh/5w7eLCKyjqIBDwWixuHGW7uFffHjmkgtmzG35W/qmgXGXG+BC8NomxmKxdxCT
ZpQCbisMKieTAgMBAAGjaDBmMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
AgEGMB0GA1UdDgQWBBR5poVfi8tXHrD3sEidlLLzm1k3xzAkBglghkgBhvhCAQ0E
FxYVR2VuZXJhdGVkIGJ5IFJvdXRlck9TMA0GCSqGSIb3DQEBCwUAA4IBAQChVt7s
YNL+U7p0OoxdKgCqP3JyrVOAYDs51243IR83BM3WQybWaDcEv50/R668icnnNHgN
GKQ6OjgQbia7ZW38JWlD/n59WDjk9T63lHh5RHmrhPlIDUN8Wh89v6N2q8YQy+rj
o2lOcbZOJTSIirSBcokMRw45yJNO9HU02E9Bl5nb1hq6/xP4pbTS3t8bL+Xpg0eJ
herz/Ap62k/ToRP+yFYN90z8sDHHvKWnq1W60xreLQ95D5IOego0dIWDC8J/a551
Z2AklvEhKfJTQ6zylrhPDy5bySadxy8lAV82+gEZ1AQyS2UXzRAUgCCCzdEmgiWE
6Du6ubASPAEmYfhC
-----END CERTIFICATE-----";
/file/print file=tmp_acs_ca_cert.txt;
:delay 2;
/file/set tmp_acs_ca_cert.txt contents=$acsCaCertTxt;
/certificate/import file-name=tmp_acs_ca_cert.txt passphrase="";
/file/remove tmp_acs_ca_cert.txt;
# Wait while ether ifaces show up
:local count 0;
:while ([/interface/ethernet/find] = "") do={
:if ($count = 30) do={
/quit;
}
:delay 1s; :set count ($count +1);
};
# Set as secure settings as possible for tr069-client to work
/ip/firewall {
filter add chain=input action=accept connection-state=established,related \
comment="defconf: accept established,related"
/filter/add chain=input action=drop in-interface=ether1 \
comment="defconf: drop all from WAN"
}
/ip/neighbor/discovery-settings/set discover-interface-list=none
# Configure IP level, so that tr069-client can work
/ip/dhcp-client/add interface=ether1 disabled=no comment="defconf";
/tr069-client/set acs-url="https://example.com:7777/" enabled=yes \
username=exampleusername password=examplesecurepassword
已测试的 ACS
排序按字母顺序。MikroTik 并不暗示任何厂商优于其他厂商。
商业版
MikroTik 已测试并验证了以下商业 ACS 解决方案: