地址解析协议 - ARP

ARP 是一种通信协议,用于发现与网络层地址关联的链路层地址,例如 MAC 地址。Cumulus Linux ARP 实现与标准 Debian Linux ARP 行为不同,因为 Cumulus Linux 是路由器和交换机的操作系统,而不是服务器。

有关 ARP 的定义,请参阅 RFC 826

标准 Debian ARP 行为和可调 ARP 参数

Debian 具有以下五个可调 ARP 参数

  • arp_accept
  • arp_announce
  • arp_filter
  • arp_ignore
  • arp_notify

有关这些参数的完整描述,请参阅 Linux 文档

标准 Debian 安装将这些 ARP 参数设置为0,使路由器尽可能广泛开放且不受限制。Linux IP 地址是设备的属性,而不是单个接口的属性。因此,您可以在一个接口上发送 ARP 请求或回复,其地址位于不同的接口上。虽然这种不受限制的行为对于服务器来说是有意义的,但它不是路由器的正常行为。路由器期望 ARP 提供的 MAC 和 IP 地址映射与物理拓扑匹配,以便 IP 地址与它们所在的接口匹配。借助这些可调 ARP 参数,Cumulus Linux 能够指定行为以匹配路由器的期望。

Cumulus Linux 中的 ARP 可调参数设置

参数默认设置类型描述
arp_accept0布尔型定义 IP 地址尚未在 ARP 表中时,免费 ARP 帧的行为
  • 0:不在 ARP 表中创建新条目。
  • 1:在 ARP 表中创建新条目。

您可以在单个接口上设置 arp_accept,这与交换机的其余部分不同(见下文)。
arp_announce2整型定义在 ARP 请求中从 IP 数据包发送的接口上,通告本地源 IP 地址的不同限制级别
  • 0:使用在任何接口上配置的任何本地地址。
  • 1:避免不在此接口的目标子网中的本地地址。当通过此接口可访问的目标主机要求 ARP 请求中的源 IP 地址是接收接口上配置的逻辑网络的一部分时,您可以使用此模式。当 Cumulus Linux 生成请求时,它会检查包含目标 IP 地址的所有子网,如果源地址来自此类子网,则保留源地址。如果没有此类子网,Cumulus Linux 将根据级别 2 的规则选择源地址。
  • 2:始终为此目标使用最佳本地地址。在此模式下,Cumulus Linux 忽略 IP 数据包中的源地址,并尝试选择与目标主机通信的首选本地地址。要选择本地地址,Cumulus Linux 会在传出接口上包含目标 IP 地址的所有子网上查找主 IP 地址。如果没有合适的本地地址,Cumulus Linux 将选择传出接口或所有其他接口上的第一个本地地址,以便它接收到请求的回复,而不管通告的源 IP 地址如何。
默认 Debian 行为(arp_announce 为 0)发送免费 ARP 或 ARP 请求,使用任何本地源 IP 地址,并且不将 ARP 数据包的 IP 源限制为驻留在发送数据包的接口上的地址。

路由器期望 IP 地址和物理网络之间存在不同的关系。相邻路由器查找 MAC 和 IP 地址以到达位于连接接口上的下一跳,以用于传输流量。通过将 arp_announce 参数设置为 2,Cumulus Linux 为每个 ARP 请求使用最佳本地地址,优先选择发送 ARP 的接口上的主地址。
arp_filter0布尔型
  • 0:内核可以使用来自其他接口的地址响应 ARP 请求,以增加成功通信的机会。Linux 上的完整主机(而非特定接口)拥有 IP 地址。对于更复杂的配置(例如负载均衡),此行为可能会导致问题。
  • 1:允许您在同一子网上拥有多个网络接口,并根据内核是否从该接口路由来自 ARPd IP 地址的数据包来回答每个接口的 ARP(您必须使用基于源的路由)。
如果 conf/{all,interface}/arp_filter 中至少有一个为 TRUE,则接口的 arp_filter 为开启,否则为关闭。

Cumulus Linux 使用默认的 Debian Linux arp_filter 设置 0。
当多个接口驻留在同一子网中时,交换机使用 arp_filter,并允许某些接口响应 ARP 请求。对于具有 IP 未编号接口的 OSPF,多个接口出现在同一子网中并包含相同的地址。如果您在路由器对之间使用多个接口并将 arp_filter 设置为 1,则转发可能会失败。

arp_filter 参数允许在子网中的任何接口上进行响应,而 arp_ignore 设置(如下所示)限制了跨接口 ARP 行为。
arp_ignore1整型定义在响应接收到的 ARP 请求时发送回复的不同模式,这些请求解析本地目标 IP 地址
  • 0:回复任何接口上的任何本地目标 IP 地址。
  • 1:仅当目标 IP 地址是传入接口上的本地地址时才回复。
  • 2:仅当目标 IP 地址是传入接口上的本地地址且发送者 IP 地址是此接口上同一子网的一部分时才回复。
  • 3:不回复范围为主机的本地地址;交换机仅回复全局和链路地址。
  • 4-7:保留。
  • 8:不回复所有本地地址。
当 {interface} 接收到 ARP 请求时,交换机使用来自 conf/{all,interface}/arp_ignore 的最大值。

默认的 arp_ignore 设置 1 允许设备回复任何接口上任何 IP 地址的 ARP 请求。虽然这符合 IP 地址属于设备而不是接口的预期,但它可能会在路由器上引起一些意外行为。

例如,如果 arp_ignore 为 0,并且交换机在一个接口上接收到 ARP 请求,该请求针对驻留在不同接口上的 IP 地址,即使目标地址的接口已关闭,交换机也会回复 ARP 回复。这可能会导致流量丢失,因为交换机不知道它是否可以到达下一跳,并导致故障排除失败情况的挑战。

如果您将 arp_ignore 设置为 2,则仅当目标 IP 地址是本地地址且发送者和目标 IP 地址都是传入接口上同一子网的一部分时,交换机才回复 ARP 请求。当对等设备从不在连接子网上的源 IP 地址发送 ARP 请求时,路由器不会创建过时的邻居条目。最终,交换机向主机发送 ARP 请求,以尝试保持条目新鲜。如果主机响应,则交换机现在具有针对不在连接子网上的主机的可达邻居条目。
arp_notify1布尔型定义通知地址和设备更改的模式。
  • 0:不执行任何操作。
  • 1:当设备启动或硬件地址更改时,生成免费 ARP 请求。
默认 Debian arp_notify 设置是在接口启动或硬件地址更改时保持静默。由于 Cumulus Linux 通常充当多个终端主机的下一跳,因此当接口启动或地址更改时,它会通知连接的设备,这加快了新信息的收敛,并为更改提供了最快速的支持。

更改可调 ARP 参数

您可以在多个位置更改 ARP 参数设置,包括

  • /proc/sys/net/ipv4/conf/all/arp*(所有接口)
  • /proc/sys/net/ipv4/conf/default/arp*(未来接口的默认值)
  • /proc/sys/net/ipv4/conf/swp*/arp*(单个接口)

Cumulus Linux 中的 ARP 参数更改使用默认文件位置。

alldefault 位置听起来相似,但它们以不同的方式运行。all 位置可能更改当前和未来运行 IP 的所有接口的值。all 值使用 MAXOR 逻辑在 all 和任何端口特定设置之间应用于每个参数,如下表所示

ARP 参数条件
arp_accept
arp_announce最大值
arp_filter
arp_ignore最大值
arp_notify最大值

例如,如果您将 /proc/sys/net/conf/all/arp_ignore 值设置为 1,并将 /proc/sys/net/conf/swp1/arp_ignore 值设置为 0 以尝试在每个端口的基础上禁用它,则接口 swp1 仍然使用值 1;端口特定设置不会覆盖全局 all 设置。相反,all 值和端口特定值之间的 MAX 值定义了实际行为。

default 位置 /proc/sys/net/ipv4/conf/default/arp* 定义了所有未来 IP 接口的值。更改 ARP 参数的 default 设置不会影响已具有 IP 地址的接口。如果您对已分配 IP 地址的正在运行的系统进行更改,请改用端口特定设置。

Cumulus Linux 将 default 参数的值复制到每个端口特定位置,不包括那些已具有 IP 地址的位置。default 设置和端口特定设置之间没有复杂的逻辑(与 all 位置不同)。

要确定每个位置的当前 ARP 参数设置,请运行以下命令

cumulus@switch:~$ sudo grep . /proc/sys/net/ipv4/conf/all/arp*
/proc/sys/net/ipv4/conf/all/arp_accept:0
/proc/sys/net/ipv4/conf/all/arp_announce:0
/proc/sys/net/ipv4/conf/all/arp_filter:0
/proc/sys/net/ipv4/conf/all/arp_ignore:0
/proc/sys/net/ipv4/conf/all/arp_notify:1
cumulus@switch:~$ sudo grep . /proc/sys/net/ipv4/conf/default/arp*
/proc/sys/net/ipv4/conf/default/arp_accept:0
/proc/sys/net/ipv4/conf/default/arp_announce:2
/proc/sys/net/ipv4/conf/default/arp_filter:0
/proc/sys/net/ipv4/conf/default/arp_ignore:1
/proc/sys/net/ipv4/conf/default/arp_notify:1
cumulus@switch:~$ sudo grep . /proc/sys/net/ipv4/conf/swp1/arp*
/proc/sys/net/ipv4/conf/swp1/arp_accept:0
/proc/sys/net/ipv4/conf/swp1/arp_announce:2
/proc/sys/net/ipv4/conf/swp1/arp_filter:0
/proc/sys/net/ipv4/conf/swp1/arp_ignore:1
/proc/sys/net/ipv4/conf/swp1/arp_notify:1

Cumulus Linux 在启动时使用以下位置的 arp.conf 文件实现此更改

cumulus@switch:~$ cat /etc/sysctl.d/arp.conf
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_notify = 1
net.ipv4.conf.default.arp_notify = 1
net.ipv4.conf.default.arp_ignore=1

更改端口特定的 ARP 参数

要在正在运行的设备中配置端口特定的 ARP 参数,请运行以下命令

cumulus@switch:~$ sudo sh -c "echo 0 > /proc/sys/net/ipv4/conf/swp1/arp_ignore"
cumulus@switch:~$ sudo grep . /proc/sys/net/ipv4/conf/swp1/arp*
/proc/sys/net/ipv4/conf/swp1/arp_accept:0
/proc/sys/net/ipv4/conf/swp1/arp_announce:2
/proc/sys/net/ipv4/conf/swp1/arp_filter:0
/proc/sys/net/ipv4/conf/swp1/arp_ignore:0
/proc/sys/net/ipv4/conf/swp1/arp_notify:1

要使更改在重启后仍然保留,请编辑 /etc/sysctl.d/arp.conf 文件并添加您的端口特定的 ARP 设置。

配置代理 ARP

当您启用代理 ARP 时,如果交换机收到 ARP 请求,并且它具有到达目标 IP 地址的路由,则交换机将发送包含自身 MAC 地址的代理 ARP 回复。发送 ARP 请求的主机随后将其数据包发送到交换机,交换机将数据包转发到预期主机。

代理 ARP 仅适用于 IPv4;ARP 是仅 IPv4 协议。

以下示例命令在 swp1 上启用代理 ARP。

NVUE 不为该设置提供命令。

编辑 /etc/network/interfaces 文件以在接口节中将 /proc/sys/net/ipv4/conf/<interface>/proxy_arp 设置为 1,然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp1
iface swp1
    post-up echo 1 > /proc/sys/net/ipv4/conf/swp1/proxy_arp
...
cumulus@switch:~$ sudo ifreload -a

如果您在同一广播域中运行两个接口(通常在使用 VRR 时看到,这会在同一广播域中创建一个 -v0 接口),请在基本 SVI 接口和 -v0 接口上将 /proc/sys/net/ipv4/conf/<INTERFACE>/medium_id 设置为 2。在这种情况下,当收到 ARP 请求时,只有两个接口中的一个会回复。这可以防止 v0 接口代表 SVI 进行代理回复(以及 SVI 代表 v0 接口进行代理回复)。仅当 ARP 请求直接针对 SVI 或 v0 接口时,您才能阻止重复回复。

Cumulus Linux 不为该设置提供 NVUE 命令。

编辑 /etc/network/interfaces 文件,然后运行 ifreload -a 命令。例如

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp1
iface swp1
    post-up echo 1 > /proc/sys/net/ipv4/conf/swp1/proxy_arp
    post-up echo 2 > /proc/sys/net/ipv4/conf/swp1/medium_id

auto swp1-v0
iface swp1-v0
    post-up echo 1 > /proc/sys/net/ipv4/conf/swp1-v0/proxy_arp
    post-up echo 2 > /proc/sys/net/ipv4/conf/swp1-v0/medium_id
...
cumulus@switch:~$ sudo ifreload -a

如果您在 VRR 接口上运行代理 ARP,请向 VRR 接口节添加一个 post-up 行,类似于以下内容。例如,如果 vlan100 是上述配置的 VRR 接口

Cumulus Linux 不为该设置提供 NVUE 命令。

编辑 /etc/network/interfaces 文件,然后运行 ifreload -a 命令。例如

cumulus@switch:~$ sudo nano /etc/networks/interfaces
...
auto vlan100
iface vlan100
    post-up echo 1 > /proc/sys/net/ipv4/conf/swp1-v0/proxy_arp
    post-up echo 1 > /proc/sys/net/ipv4/conf/swp1/proxy_arp
    post-up echo 2 > /proc/sys/net/ipv4/conf/swp1-v0/medium_id
    post-up echo 2 > /proc/sys/net/ipv4/conf/swp1/medium_id
    vlan-id 100
...
cumulus@switch:~$ sudo ifreload -a

重复地址检测(Windows 主机)

在具有 ARP 和 ND 抑制的集中式 VXLAN 环境中,如果叶交换机上的 SVI 但在子网中没有 IP 地址,则 Microsoft Windows 主机上的重复地址检测过程会出现问题。例如,在纯第 2 层场景中或对于 ip-forward 选项关闭的 SVI,SVI 没有 IP 地址。neighmgrd 服务根据邻居 IP 地址上的子网匹配选择 ARP 探测的源 IP 地址。由于学习此邻居的 SVI 没有 IP 地址,因此子网匹配失败,并且 neighmgrd 使用 UNSPEC(IPv4 为 0.0.0.0)作为 ARP 探测中的源 IP 地址。

要解决此问题,请运行 neighmgrctl setsrcipv4 <ipaddress> 命令来为源指定一个非 0.0.0.0 地址;例如

cumulus@switch:~$ neighmgrctl setsrcipv4 10.1.0.2

如果您重启交换机,以上配置不会持久保存。要使更改持久应用

  1. 创建一个名为 /etc/cumulus/neighmgr.conf 的新文件,并添加 setsrcipv4 <ipaddress> 选项;例如

    cumulus@switch:~$  sudo nano /etc/cumulus/neighmgr.conf
    
    [main]
    setsrcipv4: 10.1.0.2
    
  2. 重启 neighmgrd 服务

    cumulus@switch:~$ sudo systemctl restart neighmgrd
    

邻居基本可达时间定时器

您可以使用 NVUE nv set system global arp base-reachable-time 命令设置邻居缓存条目有效的时长。该条目至少在基本可达时间除以二和基本可达时间乘以三除以二之间的值内有效。您可以指定介于 30 秒到 2147483 秒之间的值。默认值为 auto;NVUE 从 /etc/sysctl.d/neigh.conf 文件中派生 auto 的值。

以下示例将邻居基本可达时间定时器配置为 50 秒。

cumulus@leaf01:~$ nv set system global arp base-reachable-time 50
cumulus@leaf01:~$ nv config apply

要将邻居基本可达时间定时器重置为默认设置,请运行 nv unset system global arp base-reachable-time 命令。

NVIDIA 建议您运行 NVUE 命令来更改邻居基本可达时间定时器,而不是手动修改 /etc/sysctl.d/neigh.conf 文件。

要显示邻居基本可达时间定时器设置,请运行 nv show system global arp 命令

cumulus@leaf02:mgmt:~$ nv show system global arp
                              operational  applied
----------------------------  -----------  -------
base-reachable-time           50           50   
garbage-collection-threshold                      
  effective                   35840               
  maximum                     40960               
  minimum                     128            

ARP 刷新

Cumulus Linux 不像终端系统彼此交互那样直接与终端系统交互。因此,在 ARP 将邻居置于可达状态后,如果 Cumulus Linux 在足够长的时间内不再与客户端交互,则邻居可能会进入陈旧状态。为了保持邻居处于可达状态,Cumulus Linux 包含一个后台进程 (/usr/bin/neighmgrd)。后台进程可以跟踪进入陈旧、延迟或探测状态的邻居,并尝试刷新它们的状态,然后再将它们从 Linux 内核和硬件转发中删除。如果您希望 neighmgrd 进程在 ARP 数据包中的发送者 IP 地址位于 SVI 子网之一中时添加邻居,请创建 /etc/cumulus/neighmgr.conf 文件,并在 [snooper] 标头下添加 subnet_checks=1 参数。默认情况下,subnet_checks 选项设置为 0(禁用),以便 neighmgrd 允许 SVI 处理网络外的邻居。

ARP 刷新定时器默认为 1080 秒(18 分钟)。

cumulus@leaf02:mgmt:~$ sudo nano /etc/cumulus/neighmgr.conf
[snooper]
subnet_checks=1

添加静态 ARP 表条目

您可以添加静态 ARP 表条目以便于管理或作为一种安全措施来防止欺骗和其他恶意活动。

要为具有与 MAC 地址关联的 IPv4 地址的接口创建静态 ARP 条目,请运行 nv set interface <interface> neighbor ipv4 <ip-address> lladdr <mac-address> 命令。

cumulus@leaf01:mgmt:~$ nv set interface swp51 neighbor ipv4 10.5.5.51 lladdr 00:00:5E:00:53:51
cumulus@leaf01:mgmt:~$ nv config apply

您还可以设置一个标志来指示邻居是路由器 (is-router) 还是外部学习 (ext_learn) 的,并设置邻居状态 (delayfailedincompletenoarppermanentprobereachablestale)。

cumulus@leaf01:mgmt:~$ nv set interface swp51 neighbor ipv4 10.5.5.51 lladdr 00:00:5E:00:53:51 flag is-router
cumulus@leaf01:mgmt:~$ nv set interface swp51 neighbor ipv4 10.5.5.51 lladdr 00:00:5E:00:53:51 state permanent
cumulus@leaf01:mgmt:~$ nv config apply

要删除 ARP 表中的条目,请运行 nv unset interface <interface> neighbor ipv4 <ip-address> 命令

cumulus@leaf01:mgmt:~$ nv unset interface swp51 neighbor ipv4 10.5.5.51
cumulus@leaf01:mgmt:~$ nv config apply

要为具有与 MAC 地址关联的 IPv4 地址的接口创建静态 ARP 条目,请将 post-up ip neigh add <ipv4-address> lladdr <mac-address> 添加到 /etc/network/interfaces 文件的接口节中,然后运行 ifreload -a 命令

cumulus@leaf01:mgmt:~$ sudo nano /etc/network/interfaces
...
auto swp51
iface swp51
    address 10.5.5.1/24
    post-up ip neigh add 10.5.5.51 lladdr 00:00:5E:00:53:51 dev swp51
...
cumulus@leaf01:mgmt:~$ sudo ifreload -a

您还可以设置一个标志来指示邻居是路由器 (router) 还是外部学习 (extern_learn) 的,并设置邻居状态 (delayfailedincompletenoarppermanentprobereachablestale)。

cumulus@leaf01:mgmt:~$ sudo nano /etc/network/interfaces
...
auto swp51
iface swp51
    address 10.5.5.1/24
    post-up ip neigh add 10.5.5.51 lladdr 00:00:5E:00:53:51 dev swp51 nud permanent router
...
cumulus@leaf01:mgmt:~$ sudo ifreload -a

要删除 ARP 表中的条目,请从 /etc/network/interfaces 文件的接口节中删除 post-up ip neigh add 行。

显示 ARP 表

要显示 IP 邻居表中的所有条目,请运行 nv show interface neighbor 命令或 Linux ip neighbor show 命令

cumulus@leaf01:mgmt:~$ nv show interface neighbor
Interface      IP/IPV6                    LLADR(MAC)         State      Flag      
-------------  -------------------------  -----------------  ---------  ----------
eth0           192.168.200.251            48:b0:2d:00:00:01  stale                
               192.168.200.1              48:b0:2d:aa:8b:45  reachable            
               fe80::4ab0:2dff:fe00:1     48:b0:2d:00:00:01  reachable  router    
peerlink.4094  169.254.0.1                48:b0:2d:3f:69:d6  permanent            
               fe80::4ab0:2dff:fe3f:69d6  48:b0:2d:3f:69:d6  reachable  router    
swp51          169.254.0.1                48:b0:2d:a2:4c:79  permanent            
               fe80::4ab0:2dff:fea2:4c79  48:b0:2d:a2:4c:79  reachable  router    
swp52          169.254.0.1                48:b0:2d:48:f1:ae  permanent            
               fe80::4ab0:2dff:fe48:f1ae  48:b0:2d:48:f1:ae  reachable  router    
swp53          169.254.0.1                48:b0:2d:2d:de:93  permanent            
               fe80::4ab0:2dff:fe2d:de93  48:b0:2d:2d:de:93  reachable  router    
swp54          169.254.0.1                48:b0:2d:80:8c:21  permanent            
               fe80::4ab0:2dff:fe80:8c21  48:b0:2d:80:8c:21  reachable  router    
vlan10         10.1.10.3                  44:38:39:22:01:78  permanent            
               10.1.10.101                48:b0:2d:a1:3f:4b  reachable            
               10.1.10.104                48:b0:2d:1d:d7:e8  noarp      |ext_learn
               fe80::4ab0:2dff:fea1:3f4b  48:b0:2d:a1:3f:4b  reachable            
               fe80::4ab0:2dff:fe1d:d7e8  48:b0:2d:1d:d7:e8  noarp      |ext_learn
               fe80::4638:39ff:fe22:178   44:38:39:22:01:78  permanent            
vlan10-v0      10.1.10.101                48:b0:2d:a1:3f:4b  stale                
               fe80::4ab0:2dff:fea1:3f4b  48:b0:2d:a1:3f:4b  stale                
               fe80::4ab0:2dff:fe1d:d7e8  48:b0:2d:1d:d7:e8  stale                
vlan20         10.1.20.105                48:b0:2d:75:bf:9e  noarp      |ext_learn
               10.1.20.102                48:b0:2d:00:e9:05  reachable            
               10.1.20.3                  44:38:39:22:01:78  permanent            
               fe80::4638:39ff:fe22:178   44:38:39:22:01:78  permanent            
               fe80::4ab0:2dff:fe75:bf9e  48:b0:2d:75:bf:9e  noarp      |ext_learn
               fe80::4ab0:2dff:fe00:e905  48:b0:2d:00:e9:05  reachable
...
cumulus@leaf01:mgmt:~$ ip neighbor show
192.168.200.251 dev eth0 lladdr 48:b0:2d:00:00:01 STALE 
10.5.5.51 dev swp51 lladdr 00:00:5e:00:53:51 router PERMANENT 
192.168.200.1 dev eth0 lladdr 48:b0:2d:b1:48:ef REACHABLE 
fe80::4ab0:2dff:fe00:1 dev eth0 lladdr 48:b0:2d:00:00:01 router REACHABLE
...

要仅显示 IPv4 条目,请运行 Linux ip -4 neighbor 命令

cumulus@leaf01:mgmt:~$ ip -4 neighbor
169.254.0.1 dev swp54 lladdr 48:b0:2d:80:8c:21 PERMANENT proto zebra 
169.254.0.1 dev peerlink.4094 lladdr 48:b0:2d:3f:69:d6 PERMANENT proto zebra 
10.10.10.3 dev vxlan48 lladdr 44:38:39:22:01:84 extern_learn  NOARP proto zebra 
10.10.10.64 dev vlan4024_l3 lladdr 44:38:39:22:01:7c extern_learn  NOARP proto zebra 
10.1.20.102 dev vlan20-v0 lladdr 48:b0:2d:00:e9:05 STALE
192.168.200.251 dev eth0 lladdr 48:b0:2d:00:00:01 STALE
10.10.10.4 dev vlan4024_l3 lladdr 44:38:39:22:01:8a extern_learn  NOARP proto zebra 
10.10.10.64 dev vlan4036_l3 lladdr 44:38:39:22:01:7c extern_learn  NOARP proto zebra 
169.254.0.1 dev swp53 lladdr 48:b0:2d:2d:de:93 PERMANENT proto zebra 
10.10.10.4 dev vlan4036_l3 lladdr 44:38:39:22:01:8a extern_learn  NOARP proto zebra 
10.1.10.3 dev vlan10 lladdr 44:38:39:22:01:78 PERMANENT
169.254.0.1 dev swp52 lladdr 48:b0:2d:48:f1:ae PERMANENT proto zebra 
10.10.10.2 dev vlan4024_l3 lladdr 44:38:39:22:01:78 extern_learn  NOARP proto zebra 
10.1.20.105 dev vlan20 lladdr 48:b0:2d:75:bf:9e extern_learn  NOARP proto zebra 
10.10.10.64 dev vxlan48 lladdr 44:38:39:22:01:7c extern_learn  NOARP proto zebra 
10.0.1.34 dev vxlan48 lladdr 44:38:39:be:ef:bb extern_learn  NOARP proto zebra 
10.10.10.2 dev vlan4036_l3 lladdr 44:38:39:22:01:78 extern_learn  NOARP proto zebra 
10.1.10.101 dev vlan10-v0 lladdr 48:b0:2d:a1:3f:4b STALE
10.1.10.101 dev vlan10 lladdr 48:b0:2d:a1:3f:4b REACHABLE
...

要显示特定接口的所有表条目,请运行 nv show interface <interface_id> neighbor 命令

cumulus@leaf01:mgmt:~$ nv show interface swp51 neighbor
ipv4
=========
    IPV4         LLADR(MAC)         State      Flag
    -----------  -----------------  ---------  ----
    10.5.5.51    00:00:5e:00:53:51  permanent      
    169.254.0.1  48:b0:2d:a2:4c:79  permanent
ipv6
=========
    IPV6                       LLADR(MAC)         State      Flag     
    -------------------------  -----------------  ---------  ---------
    fe80::4ab0:2dff:fea2:4c79  48:b0:2d:a2:4c:79  reachable  is-router

要显示接口的所有 IPv4 表条目,请运行 nv show interface <interface> neighbor ipv4 命令

cumulus@leaf01:mgmt:~$ nv show interface swp1 neighbor ipv4
IPV4         LLADR(MAC)         State      Flag
-----------  -----------------  ---------  ----
10.188.52.1  00:00:5e:00:01:22  reachable
10.188.52.2  1c:34:da:e8:1d:c8  stale

要显示具有特定 IPv4 地址的接口的表条目,请运行 nv show interface <interface_id> neighbor ipv4 <ip-address> 命令。

cumulus@leaf01:mgmt:~$ nv show interface swp51 neighbor ipv4 169.254.0.1
lladdr
=========
    LLADR(MAC)         State      Flag
    -----------------  ---------  ----
    48:b0:2d:a2:4c:79  permanent