【FRRouting User Guide】【Basic 】(四)Basic Commands

以下各节讨论所有路由守护进程通用的命令。

Config Commands

在配置文件中,可以写入调试选项、vty的密码、路由守护程序配置、日志文件名等。此信息形成路由beast启动时的初始命令集。
配置文件通常位于/etc/frr中。

Config Methods

       配置FRR有两种方法。

       传统上,每个守护进程都有自己的配置文件。守护程序名plus.conf是默认的配置文件名。例如,zebra的默认配置文件是zebra.conf。此方法已弃用。

       由于这会创建大量的配置文件,而且一个守护进程倾向于依赖其他守护进程来实现某些功能,因此大多数部署现在都使用“集成”配置。在这个设置中,所有配置都放在一个文件中,典型的/etc/frr/frr.conf。当使用init脚本或systemd启动FRR时,会调用vtysh来读取配置文件,并仅将适当的部分发送给感兴趣的守护进程。使用vtysh将正在运行的配置更新保存回这个文件。这是推荐的方法。要使用此方法,请将以下行添加到/etc/frr/vtysh.conf文件:

service integrated-vtysh-config

如果您是从源代码安装的,或者使用了一个包,这可能已经存在了。

如果需要,可以在启动守护程序时使用-f或 --config_file文件选项指定配置文件。

Basic Config Commands

  • hostname HOSTNAME

设置路由器的主机名。

  • password PASSWORD

为vty接口设置密码。命令的no形式删除密码。如果没有密码,vty将不接受连接。

  • enable password PASSWORD

设置启用密码。命令的no形式将删除启用密码。

  • log trap LEVEL

这些命令已弃用,仅用于历史兼容性。log trap命令为所有启用的日志记录目标设置当前日志记录级别,并为所有未指定级别的未来日志记录命令设置默认值。正常的默认日志记录级别是调试。命令的no形式将未来日志记录命令的默认级别重置为调试,但它不会更改现有日志记录目标的日志记录级别。

  • log stdout LEVEL

启用到标准输出的日志输出。如果指定日志级别的可选第二个参数不存在,则将使用默认日志级别(通常是调试)。命令的no形式禁止记录到stdout。LEVEL参数必须具有以下值之一:紧急情况、警报、严重错误、错误、警告、通知、信息或调试。请注意,现有代码记录了最重要的消息,其中包含严重性错误。

警告
     FRRouting使用writev()系统调用来写入日志消息。这个调用应该是原子的,但实际上,这并不适用于管道或终端,只保留常规文件。这意味着在极少情况下,来自不同线程的并发日志消息可能会在终端输出中被混淆。如果你的设置不能接受这个极少情况,请使用日志文件和tail-f。

  • log file [FILENAME [LEVEL]]

如果要登录到文件,请指定文件名,如下例所示:

log file /var/log/frr/bgpd.log informational

如果指定日志记录级别的可选第二个参数不存在,则将使用默认日志记录级别(通常是调试级别,但可以使用不推荐使用的log trap命令进行更改)。命令的no形式禁止记录到文件。

  • log syslog [LEVEL]

启用到syslog的日志输出。如果指定日志记录级别的可选第二个参数不存在,则将使用默认日志记录级别(通常是调试级别,但可以使用不推荐使用的log trap命令进行更改)。命令的no形式禁止记录到syslog。

  • log monitor [LEVEL]

使用terminal monitor命令启用到已启用日志记录的vty终端的日志记录输出。默认情况下,在调试级别启用监视器日志记录,但此命令(或不推荐使用的log trap命令)可用于更改监视器日志记录级别。如果指定日志级别的可选第二个参数不存在,则将使用默认日志级别(通常是调试)。命令的no形式禁止记录到终端监视器。

  • log facility [FACILITY]

此命令更改syslog消息中使用的工具。默认工具是daemon。命令的no形式将设施重置为默认的守护程序设施。

  • log record-priority

要在记录到文件、标准输出或终端监视器(即除syslog以外的任何消息)的所有消息中包含严重性,请使用log record priority全局配置命令。要禁用此选项,请使用命令的no形式。默认情况下,严重性级别不包括在记录的消息中。注意:某些版本的syslogd可以配置为在发出的消息中包含facility和level。

  • log timestamp precision [(0-6)]

此命令将日志消息时间戳的精度设置为小数点后的给定位数。目前,该值必须在0到6之间(即最大精度为微秒)。要恢复默认行为(1秒精度),请使用命令的no形式,或将精度显式设置为0。

log timestamp precision 3

在本例中,精度设置为提供毫秒精度的时间戳。

  • log commands

此命令允许将用户键入的所有命令记录到所有启用的日志目标。注意,日志记录包括完整的命令行,包括密码。如果daemon startup选项–command log always用于启动daemon,则此命令在默认情况下处于打开状态,不能关闭,并且不允许使用[no]形式的命令。

  • log-filter WORD [DAEMON]

此命令强制在特定字符串上筛选日志。只有当日志消息与日志筛选器表中的某个筛选器匹配时,才会打印该日志消息。可以独立于守护进程。

注意
日志过滤器在您需要打开在系统上造成重大负载的调试时很有帮助(启用某些调试可能会使FRR停止)。日志过滤器可以防止这种情况发生,但是由于过滤所有这些日志,您仍然应该期望性能受到小的影响。

  • log-filter clear [DAEMON]

此命令清除日志筛选器表中的所有当前筛选器。可以独立于守护进程。

  • service password-encryption

加密密码。

  • service advanced-vty

启用高级模式VTY。

  • service terminal-length (0-512)

设置系统范围的line 配置。此配置命令适用于所有VTY接口。

  • line vty

进入vty配置模式。

  • banner motd default

设置默认motd字符串。

  • banner motd file FILE

从文件中设置motd字符串。文件必须位于--sysconfdir下指定的目录中。

  • banner motd line LINE

从输入设置motd字符串。

  • exec-timeout MINUTE [SECOND]

设置VTY连接超时值。当只指定一个参数时,它将用于以分钟为单位的超时值。可选的第二个参数用于以秒为单位的超时值。默认超时值为10分钟。当超时值为零时,表示没有超时。
不设置此值或将值设置为0表示将不启用超时。

  • access-class ACCESS-LIST

使用访问列表限制vty连接。

Sample Config File

下面是zebra守护进程的示例配置文件。

!
! Zebra configuration file
!
frr version 6.0
frr defaults traditional
!
hostname Router
password zebra
enable password zebra
!
log stdout
!
!

! 和#是注释字符。如果单词的第一个字符是注释字符之一,则从该行的其余部分开始,将作为注释忽略。

password zebra!password

如果注释字符不是单词的第一个字符,那么它是一个普通字符。所以在上面的例子中!不会被视为一个评论和密码设置为zebra!密码。

Configuration versioning, profiles and upgrade behavior

所有frr守护进程共享一种机制,用于指定用于加载和保存配置的配置配置文件和版本。根据所选的配置文件和版本,特定的配置设置采用不同的默认值。

虽然概要文件可以由用户配置选择,并且在升级过程中会保持不变,但是frr将始终使用其当前版本编写配置。这意味着,升级后,写入文件可能会写出与读入的配置稍有不同的配置。

由于以前的配置是用其版本的默认值加载的,而新配置是用新的默认值写入的,因此在版本之间更改的任何默认值都将导致写出相应的配置条目。路由配置是粘性的,在升级过程中保持一致。更改的默认值只会影响新配置。

注意,加载的版本将继续存在于交互配置会话中。在交互配置会话中执行的命令与启动时加载的配置没有任何不同。这意味着,当配置新的BGP对等机时,用于配置的默认值是最后一个frr版本命令选择的默认值。

警告
保存配置不会使守护程序向前跳转以使用新版本作为其默认值,但重新启动它们会这样做,因为它们随后将应用已写出的new frr version命令。在show running config中手动执行frr version命令以避免这种中间状态。

这在ShowRunning config中可见:

Current configuration:
!
! loaded from 6.0
frr version 6.1-dev
frr defaults traditional
!

如果保存并重新启动此配置,则旧的默认设置将不再适用。类似地,您可以执行frr version6.1-dev,从而应用新的默认值,并且从6.0加载的注释消失。

Profiles

frr提供配置概要文件,以使其默认设置适应各种使用场景。目前,实施了以下配置文件:

  • traditional - 反映了主要遵循IETF标准或广域网路由的常见习惯的默认值。
  • datacenter - 使用攻击性计时器反映具有域内链接的单个管理域。

您的发行版/安装版可以通过所有守护程序上的-F命令行选项预先设置配置文件。必须为同一配置文件配置所有守护程序。命令行上指定的值只是一个预设值,配置中的任何frr defaults语句都将优先。

注意
所有守护进程的配置文件必须相同。不匹配可能导致未定义的行为。

您可以在配置文件之间自由切换,而不会造成任何中断或配置更改。所有设置都保持以前的值,并且show running configuration output将有新的输出,将以前的默认值列为显式配置。新配置(例如添加BGP对等)将使用新的默认值。要为现有配置应用新的默认值,必须从配置中删除现在显示的以前不可见的旧默认值。

交互式配置的升级实践

如果以交互方式配置frr并使用配置写入功能使更改保持不变,则以下建议适用于升级:

  • 跳过主要版本通常是可行的,但仍然是不可取的。为了避免不必要的问题,一次升级一个主要版本,并在每次更新后写出配置。
  • 安装新的frr版本后,请检查配置是否与旧配置存在差异。如果更改了任何影响设置的默认值,行可能会出现或消失。如果出现新行,则它以前是默认的(或不受支持),现在需要保留以前的行为。如果一行消失,它以前不是默认值,但现在是,因此不再需要。
  • 使用grep-i deprecat检查日志文件中是否有弃用警告。
  • 完成每次升级后,保存配置并重新启动frr或执行frr version<CURRENT>以确保完全应用新版本的默认值。

自动生成配置的升级实践

将frr与生成的配置(如Ansible、Puppet等)一起使用时,升级注意事项有所不同:

  • 在生成的配置中,始终写出frr版本语句。这确保默认值始终应用。
  • 尝试不运行比必要更不同版本的frr。每个版本可能需要单独检查。如果运行较旧和较新安装的混合,请使用frr版本语句的最旧版本。
  • 在推出升级时,使用旧版本标识符生成一个配置,并加载它。检查是否存在任何差异或否决警告。如果配置存在差异,请将这些内容传播回配置生成器,以最小化对实际默认值的依赖。
  • 在删除旧版本的最后一次安装后,将配置生成更改为相应的较新frr版本。执行与推出升级时相同的检查。

Terminal Mode Commands

  • write terminal

显示vty接口的当前配置。

  • write file

将当前配置写入配置文件。

  • configure [terminal]

切换到配置模式。此命令是配置的第一步。

  • terminal length (0-512)

将终端显示长度设置为(0-512)。如果长度为0,则不执行显示控制。

  • who

显示当前连接的vty会话的列表。

  • list

列出所有可用命令。

  • show version

显示frr的当前版本及其生成主机信息。

  • show logging

显示日志系统的当前配置。这包括所有日志目的地的状态。

  • show log-filter

显示应用于每个守护程序的当前日志筛选器。

  • show memory

显示frr中哪些特定事物使用了多少内存的信息。输出可能因系统功能而异,但通常如下所示:

frr# show memory
System allocator statistics:
  Total heap allocated:  1584 KiB
  Holding block headers: 0 bytes
  Used small blocks:     0 bytes
  Used ordinary blocks:  1484 KiB
  Free small blocks:     2096 bytes
  Free ordinary blocks:  100 KiB
  Ordinary blocks:       2
  Small blocks:          60
  Holding blocks:        0
(see system documentation for 'mallinfo' for meaning)
--- qmem libfrr ---
Buffer                        :          3      24                  72
Buffer data                   :          1    4120                4120
Host config                   :          3  (variably sized)        72
Command Tokens                :       3427      72              247160
Command Token Text            :       2555  (variably sized)     83720
Command Token Help            :       2555  (variably sized)     61720
Command Argument              :          2  (variably sized)        48
Command Argument Name         :        641  (variably sized)     15672
[...]
--- qmem Label Manager ---
--- qmem zebra ---
ZEBRA VRF                     :          1     912                 920
Route Entry                   :         11      80                 968
Static route                  :          1     192                 200
RIB destination               :          8      48                 448
RIB table info                :          4      16                  96
Nexthop tracking object       :          1     200                 200
Zebra Name Space              :          1     312                 312
--- qmem Table Manager ---

要了解系统分配器统计信息,请参阅系统的mallinfo(3)手册页。
在这些统计信息的下面,打印了关于frr中各个内存分配类型(所谓的MTYPEs)的统计信息:

  • 第一列数字是为该类型分配的当前计数(释放项时该数字会减少)
  • 第二列是每个项目的大小。只有在类型上的分配总是使用相同的大小时,此选项才可用。
  • 第三列是为特定类型分配的内存总量,包括malloc应用的填充。这意味着数字可能大于第一列乘以第二列。malloc簿记所产生的开销不包括在本表中,如果系统支持不可用,则该列可能会丢失。

从vtysh执行此命令时,将按顺序打印每个守护进程的内存使用情况。

  • show history

显示vtysh cli历史记录。

  • logmsg LEVEL MESSAGE

向为给定严重性的消息启用的所有日志记录目标发送消息。

  • find COMMAND...

此命令在所有模式下对所有定义的命令执行简单的子字符串搜索。例如,假设您处于启用模式,并且记不起打开OSPF段路由的命令是:

frr# find segment-routing on
  (ospf)  segment-routing on

CLI模式显示在每个命令旁边。在本例中,段路由在路由器ospf模式下。
类似地,假设您需要包含“l2vpn”的所有命令的列表:

frr# find l2vpn
  (view)  show [ip] bgp l2vpn evpn [json]
  (view)  show [ip] bgp l2vpn evpn all <A.B.C.D|A.B.C.D/M> [json]
  (view)  show [ip] bgp l2vpn evpn all neighbors A.B.C.D advertised-routes [json]
  (view)  show [ip] bgp l2vpn evpn all neighbors A.B.C.D routes [json]
  (view)  show [ip] bgp l2vpn evpn all overlay
  ...
  • show thread cpu [r|w|t|e|x]

此命令显示所有不同事件类型的系统运行统计信息。如果未指定任何选项,则所有不同的运行类型将一起显示。此外,您还可以要求查看(r)ead,(w)rite,(t)imer,(e)vent和e(x)ecute线程事件类型。如果您已编译了禁用cpu时间,则此命令将不会显示。

  • show thread poll

此命令显示FRR的轮询数据。它让我们可以一瞥到我们是如何设置每个单独的fd在该时间点的poll命令。

常用调用选项

这些选项适用于所有frr守护进程。

  • -d--daemon

在守护程序模式下运行。

  • -f--config_file <file>

设置配置文件名。

  • -h--help

显示此帮助并退出。

  • -i--pid_file <file>

启动时,守护进程的进程标识符将写入文件,通常在/var/run中。init系统可以使用此文件实现诸如…/init.d/zebra status、/init.d/zebra restart或…/init.d/zebra stop等命令。

文件名是一个运行时选项,而不是一个配置时选项,以便可以同时运行多个路由守护进程。这在使用frr实现布线观察镜时非常有用。一台机器可以用来从网络中的不同点收集不同的路由视图。

  • -A--vty_addr <address>

设置要绑定到的VTY本地地址。如果设置,VTY套接字将仅绑定到此地址。

  • -P--vty_port <port>

设置VTY TCP端口号。如果设置为0,则不会打开TCP VTY套接字。

  • -u <user>

设置要作为运行的用户和组。

  • -N <namespace>

设置守护进程将在其中运行的命名空间。一个“/<namespace>”将添加到所有使用statedir的文件中。如果将“/var/run/frr”作为默认statedir,那么它将变成“/var/run/frr/<namespace>”。

  • -v--version

打印程序版本。

  • --command-log-always

使守护进程始终记录输入到指定日志文件的命令。这也使得no log命令命令不允许出现。如果您需要跟踪操作员在该路由器上正在做什么,建议启用此选项。

  • --log <stdout|syslog|file:/path/to/log/file>

初始化守护程序时,将日志设置为转到stdout、syslog或文件。这些值将作为显示运行的一部分显示。此外,如果需要,可以通过普通的日志命令在运行时重写它们。

  • --log-level <emergencies|alerts|critical|errors|warnings|notifications|informational|debugging>

初始化守护程序时,允许在启动时从指定的级别之一指定默认日志级别。

  • --tcli

启用事务CLI模式。

  • --limit-fds <number>

限制FRR守护进程将在内部使用的文件描述符的数量。默认情况下,守护进程使用系统ulimit值。

Loadable Module Support

FRR支持在启动时加载扩展模块。不支持在运行时加载、重新加载或卸载模块。要加载模块,请在守护程序启动时使用以下命令行选项:

  • -M--module <module:options>

加载指定的模块,可以选择向其传递选项。如果模块名包含斜杠(/),则假定它是要加载的文件的完整路径名。如果它不包含斜杠,则在/usr/lib/frr/modules目录中搜索具有给定名称的模块;首先在daemon名称前面加上前缀(例如,zebra\u mod代表mod),然后不加daemon名称。
此选项在所有守护程序上都可用,但某些守护程序可能没有任何可供加载的模块。

The SNMP Module

如果在编译时启用了SNMP并将其作为包的一部分安装,则可以为Zebra、bgpd、ospfd、ospf6d和ripd守护程序加载SNMP模块。
模块忽略传递给它的任何选项。有关其用法的信息,请参阅SNMP支持。

The FPM Module

如果在编译时启用了FPM并将其作为包的一部分安装,则可以为zebra守护进程加载FPM模块。这提供了转发平面管理器(“FPM”)API。
模块要求其参数为Netlink或protobuf,指定要使用的封装。Netlink是默认值,如果模块是在不支持protobuf的情况下生成的,protobuf可能不可用。有关更多信息,请参阅zebra FIB push接口。

Virtual Terminal Interfaces

VTY–虚拟终端[aka TeletYpe]接口是用于用户与路由守护进程交互的命令行接口(CLI)。

VTY Overview

VTY代表虚拟电传接口。这意味着您可以通过telnet协议连接到守护进程。
要启用VTY接口,必须设置VTY密码。如果没有VTY密码,就根本无法连接到VTY接口。

% telnet localhost 2601
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Hello, this is |PACKAGE_NAME| (version |PACKAGE_VERSION|)
|COPYRIGHT_STR|

User Access Verification

Password: XXXXX
Router> ?
  enable .  .  .  Turn on privileged commands
  exit   .  .  .  Exit current mode and down to previous mode
  help   .  .  .  Description of the interactive help system
  list   .  .  .  Print command list
  show   .  .  .  Show system inform

  wh. . .  Display who is on a vty
Router> enable
Password: XXXXX
Router# configure terminal
Router(config)# interface eth0
Router(config-if)# ip address 10.0.0.1/8
Router(config-if)# ^Z
Router#

VTY Modes

有三种基本的VTY模式:
有些命令可能仅限于特定的VTY模式。

  • VTY View Mode

此模式用于对CLI的只读访问。您可以通过离开系统或进入启用模式退出该模式。

  • VTY Enable Mode

此模式用于对CLI进行读写访问。您可以通过离开系统或转义到查看模式来退出该模式。

  • VTY Other Modes

此页用于描述其他模式。

VTY CLI Commands

以下三个子节描述了您在命令行中可能使用的命令。

CLI移动命令

这些命令用于移动CLI光标。C字符表示按下控制键。

  • C-f / LEFT

向前移动一个字符。

  • C-b / RIGHT

向后移动一个字符。

  • M-f

前进一个字。

  • M-b

向后移动一个单词。

  • C-a

移到行的开头。

  • C-e

移动到线的末尾。

CLI Editing Commands

这些命令用于编辑行上的文本。C字符表示按下控制键。

  • C-h / DEL

删除点之前的字符。

  • C-d

删除点后的字符。

  • M-d

Forward kill word.

  • C-w

Backward kill word.

  • C-k

Kill to the end of the line.

  • C-u

Kill line from the beginning, erasing input.

  • C-t

Transpose character.

CLI Advanced Commands

还有几个用于命令行完成、insta help和VTY会话管理的其他CLI命令。

  • C-c

Interrupt current input and moves to the next line.

  • C-z

End current configuration session and move to top node.

  • C-n / DOWN

Move down to next line in the history buffer.

  • C-p / UP

Move up to previous line in the history buffer.

  • TAB

Use command line completion by typing TAB.

  • ?

You can use command line help by typing help at the beginning of the line. Typing ? at any point in the line will show possible completions.

Pipe Actions

VTY支持命令末尾的可选修饰符,这些修饰符对命令输出执行后处理或修改命令的操作。这些不会出现在地图上吗?或选项卡建议列表。

  • ... | include REGEX

过滤前面命令的输出,只包括与POSIX扩展正则表达式REGEX匹配的行。不要用引号引regex。
示例:

frr# show ip bgp sum json | include remoteAs
      "remoteAs":0,
      "remoteAs":455,
      "remoteAs":99,
frr# show run | include neigh.*[0-9]{2}\.0\.[2-4]\.[0-9]*
 neighbor 10.0.2.106 remote-as 99
 neighbor 10.0.2.107 remote-as 99
 neighbor 10.0.2.108 remote-as 99
 neighbor 10.0.2.109 remote-as 99
 neighbor 10.0.2.110 remote-as 99
 neighbor 10.0.3.111 remote-as 111

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值