Configuration Management
本页介绍 MikroTik RouterOS 中的配置管理,详细说明如何使用
/system/history界面或 CLI 命令撤销和重做操作,并给出防火墙规则修改的示例。
配置管理
本文介绍一组用于配置管理的命令。
配置撤销与重做
在 GUI 中执行的任何操作,或从 CLI 执行的任何命令,都会记录在 /system/history 中。你可以通过从 CLI 运行 undo 或 redo 命令,或在 GUI 中点击 Undo 和 Redo 按钮来撤销或重做任何操作。
下面用一个简单示例演示添加防火墙规则,以及如何撤销和重做该操作:
[admin@v7_ccr_bgp] /ip/firewall/filter> add chain=forward action=drop
[admin@v7_ccr_bgp] /ip/firewall/filter> print
Flags: X - disabled, I - invalid; D - dynamic
0 X chain=input action=drop protocol=icmp src-address=10.155.101.1 log=no
log-prefix=""
1 chain=forward action=drop
[admin@v7_ccr_bgp] /ip/firewall/filter> /system/history/print
Flags: U - undoable, R - redoable, F - floating-undo
Columns: ACTION, BY, POLICy
ACTION BY POLIC
F filter rule added admin write
U --- write
[admin@v7_ccr_bgp] /ip/firewall/filter>
我们添加了一条防火墙规则,在 /system/history 中可以看到所执行的全部操作。
现在撤销所有这些操作:
[admin@v7_ccr_bgp] /ip/firewall/filter> /undo
[admin@v7_ccr_bgp] /ip/firewall/filter> print
Flags: X - disabled, I - invalid; D - dynamic
0 X chain=input action=drop protocol=icmp src-address=10.155.101.1 log=no
log-prefix=""
[admin@v7_ccr_bgp] /ip/firewall/filter>
可以看到防火墙规则消失了。 现在重做最后一次更改:
[admin@v7_ccr_bgp] /ip/firewall/filter> /redo
[admin@v7_ccr_bgp] /ip/firewall/filter> print
Flags: X - disabled, I - invalid; D - dynamic
0 X chain=input action=drop protocol=icmp src-address=10.155.101.1 log=no
log-prefix=""
1 chain=forward action=drop
[admin@v7_ccr_bgp] /ip/firewall/filter>
系统历史能够显示 "Undo" 或 "Redo" 操作期间将执行的确切 CLI 命令,即使我们是从 GUI 执行操作。例如,从 WinBox 添加一条 TCP accept 规则后的详细历史输出:
[admin@v7_ccr_bgp] /system/history> print detail
Flags: U - undoable, R - redoable, F - floating-undo
F redo=
/ip/firewall/filter/add action=accept chain=forward disabled=no log=no \
log-prefix="" protocol=tcp
undo=/ip/firewall/filter/remove *4 action="filter rule added" by="admin"
policy=write time=2019-10-10 18:51:05
F redo=/ip/firewall/filter/add action=accept chain=forward
undo=/ip/firewall/filter/remove *3 action="filter rule added" by="admin"
policy=write time=2019-10-10 18:49:03
U redo="" undo="" action="---" by="" policy=write time=2019-09-27 13:07:35
[admin@v7_ccr_bgp] /system/history>
Safe Mode(安全模式)
有时对路由器配置的更改可能使路由器变得不可访问(本地控制台除外)。这通常是意外造成的,但当到路由器的连接已被切断时,就无法撤销最后一次更改。Safe mode 可用于将这种风险降到最低。
Winbox GUI 中的 "Safe Mode" 按钮可让你进入 Safe Mode;在 CLI 中,可以通过键盘快捷键 <kbd>F4</kbd> 或按 [CTRL]+[X] 进入。要在不保存 CLI 中所做更改的情况下退出,请按 [CTRL]+[D].

[admin@MikroTik] /ip/route>[CTRL]+[X]
[Safe Mode taken]
[admin@MikroTik] /ip/route<SAFE>
会显示 Safe Mode taken 消息,提示符也会变化,表明该会话现在处于安全模式。路由器处于安全模式期间所做的所有配置更改(也包括来自其他登录会话的更改),如果安全模式会话异常终止,都会被自动撤销。你可以在系统历史中看到所有这些将被自动撤销、并带有 F 标志的更改:
[admin@MikroTik] /ip/route>
[Safe Mode taken]
[admin@MikroTik] /ip/route<SAFE> add
[admin@MikroTik] /ip/route<SAFE> /system/history/print
Flags: U, F - FLOATING-UNDO
Columns:
ACTION, BY, POLICY ACTION BY POLICY
F route 0.0.0.0/0 added admin write
现在,如果 telnet 连接(或 WinBox 终端)被切断,那么过一段时间后(TCP 超时为 9 分钟),安全模式期间所做的所有更改都会被撤销。用 [Ctrl]+[D] 退出会话也会撤销所有安全模式更改,而 /quit 则不会。
如果另一个用户试图进入安全模式,会收到以下消息:
[admin@MikroTik] >
Hijacking Safe Mode from someone - unroll/release/don't take it [u/r/d]:
- [u] —— 撤销所有安全模式更改,并把当前会话置于安全模式。
- [r] —— 保留当前所有安全模式更改,并把当前会话置于安全模式。安全模式的原持有者会收到相关通知。
[admin@MikroTik] >
[Safe mode released by another user]
- [d] —— 保持一切原样。
如果在安全模式下做了太多更改,历史记录中没有足够空间容纳它们(目前历史最多保留最近 100 个操作),则会话会被自动退出安全模式,且不会自动撤销任何更改。因此,在安全模式下最好以小步骤修改配置。连按两次 [Ctrl]+[X] 是清空安全模式操作列表的简便方法。
系统备份与恢复
系统备份是以二进制格式完整克隆路由器配置的方式。
有关备份与恢复的更多信息见此处。
配置导出与导入
RouterOS 允许以纯文本格式导出和导入部分配置。该方法可用于在不同设备之间复制部分配置,例如把整台路由器的防火墙克隆到另一台。
export 命令可以从每个菜单执行(这样只导出该特定菜单及其所有子菜单的配置),也可以从根菜单执行以导出完整配置,并且仅适用于 CLI。
危险
Export 命令不会导出系统用户密码、已安装证书、SSH 密钥、Dude 或 User-manager 数据库。
已安装证书、Dude 和 User Manager 数据库必须手动导出并导入到新设备。
系统用户密码和用户 SSH 密钥无法导出。
警告: 在导入配置时,建议使用与导出配置时相同的 RouterOS 版本,以防某些命令在某个 RouterOS 版本中不存在。
配置导出
接受以下命令参数:
| 属性 | 说明 |
|---|---|
| compact | 仅输出被修改过的配置。从 v6rc1 开始,"export compact" 成为默认行为,因此 "export" 和 "export compact" 现在产生相同的输出。 |
| file | 把配置导出到指定文件。未指定文件时,导出输出会打印到终端 |
| path | 该参数允许从路由器的整体配置中包含或排除特定配置菜单 |
| show-sensitive | 显示敏感信息,如密码、密钥等。默认情况下敏感信息会被隐藏。含敏感参数的菜单列表 |
| terse | 使用该参数时,export 命令会以独立行上的完整命令输出配置,每行都包含对应的菜单路径。 |
| verbose | 使用该参数时,export 命令会输出包括默认值在内的全部配置参数和条目。 |
例如,从 /ip/address 菜单导出配置并保存到文件:
[admin@MikroTik] > /ip/address/print
Flags: X - disabled, I - invalid, D - dynamic
# ADDRESS NETWORK BROADCAST INTERFACE
0 10.1.0.172/24 10.1.0.0 10.1.0.255 bridge1
1 10.5.1.1/24 10.5.1.0 10.5.1.255 ether1
[admin@MikroTik] > /ip/address/export file=address
[admin@MikroTik] > /file/print
# NAME TYPE SIZE CREATION-TIME
0 address.rsc script 315 2003-12-23 13:21:48
[admin@MikroTik] >
默认情况下,export 命令只写入用户编辑过的配置,RouterOS 的默认值会被省略。
例如,IPSec 默认策略不会被导出;如果我们修改了某个属性,则只会导出我们的改动:
[admin@rack1_b4] /ip/ipsec/policy> print
Flags: T - template, X - disabled, D - dynamic, I - inactive, * - default
0 T * group=default src-address=::/0 dst-address=::/0 protocol=all
proposal=default template=yes
[admin@rack1_b4] /ip/ipsec/policy> export
# 1970-04-02 17:59:14 by RouterOS 6.22
# software id = DB0D-LK67
#
[admin@rack1_b4] /ip/ipsec/policy> set 0 protocol=gre
[admin@rack1_b4] /ip/ipsec/policy> export
# 1970-04-02 17:59:30 by RouterOS 6.22
# software id = DB0D-LK67
#
/ip/ipsec/policy
set 0 protocol=gre
导出整个 /ip/firewall 配置(但排除 /ip/firewall/nat)的示例:
/export path=/ip/firewall,!/ip/firewall/nat
/ip/firewall/address-list
add address=1.1.1.1 list=dns
/ip/firewall/filter
add action=passthrough chain=unused-hs-chain comment="place hotspot rules here" disabled=yes
add action=add-src-to-address-list address-list=12345 address-list-timeout=15s chain=input disabled=yes
add action=accept chain=output dst-port=80,443 log=yes protocol=tcp
/ip/firewall/mangle
add chain=prerouting
add action=accept chain=prerouting
add action=accept chain=prerouting dst-address=192.168.88.0/24 in-interface=ether2
信息
注意:
* 标志表示该条目是系统默认项,不能手动删除。 以下是所有包含系统默认条目的菜单列表
| 菜单 | 默认条目 |
|---|---|
/interface/wireless/security-profiles | default |
/ppp/profile | "default", "default-encryption" |
/ip/hotspot/profile | default |
/ip/hotspot/user/profile | default |
/ip/ipsec/policy | default |
/ip/ipsec/policy/group | default |
/ip/ipsec/proposal | default |
/ip/ipsec/mode-conf | read-only |
/ip/smb/shares | pub |
/ip/smb/users | guest |
/ipv6/nd | any |
/mpls/interface | all |
/routing/bfd/interface | all |
/routing/bgp/instance | default |
/routing/ospf/instance | default |
/routing/ospf/area | backbone |
/routing/ospf-v3/instance | default |
/routing/ospf-v3/area | backbone |
/snmp/community | public |
/tool/mac-server/mac-winbox | all |
/tool/mac-server | all |
/system/logging | "info", "error", "warning", "critical" |
/system/logging/action | "memory", "disk", "echo", "remote" |
/queue/type | "default", "ethernet-default", "wireless-default", "synchronous-default", "hotspot-default", "only-hardware-queue", "multi-queue-ethernet-default", "default-small" |
危险
如果某个特定菜单无法响应 export 命令,从 RouterOS v7.11 开始,超时后会在 export 命令输出中打印一条错误消息("#error exporting "/xxx" (timeout)"),然后继续处理下一个菜单。 从 RouterOS 7.13 开始,你可以导出特定菜单的一部分。例如,可以只导出路由器上多个 address-list 中的某一个。
[admin@MikroTik] > ip firewall address-list export where list=mylist
配置导入
根菜单命令 import 允许从指定文件运行配置脚本。脚本文件(扩展名为 ".rsc")可以包含任何控制台命令,包括复杂脚本。
例如,加载保存的配置文件
[admin@MikroTik] > import address.rsc
Opening script file address.rsc
Script file loaded and executed successfully
[admin@MikroTik] >
| 属性 | 说明 |
|---|---|
| from-line | 从指定行号开始执行脚本。该选项仅在 verbose 模式下可用。 |
| file-name | 要执行的脚本(.rsc)文件名。 |
| verbose | 逐行读取文件并单独执行,便于调试语法或其他错误。 |
| dry-run | 模拟导入而不做任何配置更改。这有助于发现语法错误。该选项仅在 verbose 模式下可用。 |
提示
如果设备带有需要被替换的默认配置或现有配置,则需要先执行配置重置。
这包括使用命令
/system/reset-configurationno-defaults=yes 应用干净的空配置,然后重启设备。
自动导入
也可以在通过 FTP 或 SFTP 上传脚本到路由器后自动执行它们。脚本文件名必须带有 *.auto.rsc 扩展名。文件中的命令执行后,会创建一个新的 *.auto.log 文件,其中包含导入成功或失败的信息。
提示
文件名中的 ".auto.rsc" 是文件被自动执行的必需条件。
导入故障排查
导出的 .rsc 文件中需要注意的配置部分
在新设备上尝试导入之前,应从用 "/export" 创建的导出文件中移除以下内容:
- 接口重命名与默认以太网命名方案冲突。
/interface/ethernet
set [ find default-name=ether5 ] auto-negotiation=no name=ether1-gateway
set [ find default-name=ether6 ] name=ether2
set [ find default-name=ether7 ] name=ether3
set [ find default-name=ether8 ] name=ether4
set [ find default-name=ether1 ] name=ether5
set [ find default-name=ether2 ] name=ether6
set [ find default-name=ether3 ] name=ether7
set [ find default-name=ether4 ] name=ether8
- 在较旧版本中,"export" 的默认条目可能以 "add" 而非 "set" 命令出现。导入前应修改,以避免出错。
- 检查物理接口总数在新旧设备上是否一致。如果缺少某些接口,导入 .rsc 时会产生错误。
如果导入出现问题,请尝试以下操作:
- 使用 dry-run 参数模拟导入而不做任何配置更改。这有助于发现语法错误。该选项仅在 verbose 模式下可用。
- 重置该设备的配置。
- 使用 "verbose=yes" 参数再次运行 import 命令。它会在你已遇到的问题处停止导入过程,同时显示导出失败的位置。这样你就能知道需要修改 .rsc 导入文件中的哪些地方。
启动延迟
如果你的配置依赖某些在命令执行时可能尚未启动的接口,建议引入延迟,或监控直到所有所需接口可用。下面的示例脚本允许你设置预期有多少个接口,以及等待它们变为可用的最长时间:
{
:local i 0
#Number of interfaces. It is necessary to reconfigure this number for each device (/interface/print count-only)
:local x 10
#Max time to wait
:local t 30
while ($i < $t && [:len [/interface/find]] < $x) do={
:put $i
:set $i ($i + 1)
:delay 1
}
if ($i = $t) do={
:log warning message="Could not load all physical interfaces"
} else={
#Rest of your script
}
}
上面的脚本会等待直到有 10 个接口可见,或等待 30 秒。如果此时没有 10 个接口,它会在日志中记录一条消息。请按需修改这些变量。
配置重置
RouterOS 允许使用 /system/reset-configuration 命令重置配置
该命令会清除路由器的所有配置,并将其恢复为出厂默认值,包括登录名和密码('admin' 且密码为空,或者对于某些型号,是贴纸上的用户名和无线密码)。默认配置的更多详情见列表。
执行配置重置命令后,路由器会重启并加载默认配置。从 7.13 版本开始,重置后会显示一个授权提示,并可选择查看最终用户许可协议。
提示
重置前会保存现有配置的备份文件。这样如果误执行了重置,你可以轻松恢复之前的配置。
注意: 如果路由器是通过 Netinstall 安装的,并且指定了一个脚本作为初始配置,那么 reset 命令会在清除配置后执行该脚本。要阻止这一行为,你必须重新安装路由器。 可以用以下参数覆盖默认的重置行为:
| 属性 | 说明 |
|---|---|
| keep-users | 不从配置中移除现有用户 |
| no-defaults | 不加载默认配置,只清除配置 |
| skip-backup | 重置前跳过自动生成备份文件 |
| run-after-reset | 重置后运行指定的 .rsc 文件。这样你可以加载自定义配置。警告: 如果某个 .rsc 文件的执行超过 2 分钟,脚本会失败,LOG 中会包含 "runtime limit exceeded",或在少数情况下包含 "std failure: timeout" 错误。 |
| caps-mode | 配置重置后运行 caps-mode 脚本。 |
例如,硬重置配置,不加载默认配置且跳过备份文件:
[admin@MikroTik] > /system/reset-configuration no-defaults=yes skip-backup=yes
Dangerous! Reset anyway? [y/N]: y
在 Winbox 中同样可以操作:
