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-profilesdefault
/ppp/profile"default", "default-encryption"
/ip/hotspot/profiledefault
/ip/hotspot/user/profiledefault
/ip/ipsec/policydefault
/ip/ipsec/policy/groupdefault
/ip/ipsec/proposaldefault
/ip/ipsec/mode-confread-only
/ip/smb/sharespub
/ip/smb/usersguest
/ipv6/ndany
/mpls/interfaceall
/routing/bfd/interfaceall
/routing/bgp/instancedefault
/routing/ospf/instancedefault
/routing/ospf/areabackbone
/routing/ospf-v3/instancedefault
/routing/ospf-v3/areabackbone
/snmp/communitypublic
/tool/mac-server/mac-winboxall
/tool/mac-serverall
/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-configuration no-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 中同样可以操作:

相关主题