首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >learning:mactime plugins

learning:mactime plugins

作者头像
dpdk-vpp源码解读
发布2024-11-23 08:27:44
发布2024-11-23 08:27:44
16900
代码可运行
举报
文章被收录于专栏:DPDK VPP源码分析DPDK VPP源码分析
运行总次数:0
代码可运行

在思科的开源软件VPP(Vector Packet Processing)系统中,Mactime插件的主要功能是监视并记录网络接口上的MAC地址活动。这一特性支持基于MAC地址的过滤功能,常用于网络管理,以控制哪些设备可以访问网络资源。以下是该功能的一些常见应用场景及其具体应用方式:

  • 时间控制:允许时间段通过:你可以设置路由器,在特定的时间段内允许特定MAC地址的设备访问网络。例如,你可以设置家庭网络在晚上10点到早上6点之间不允许游戏机连接到互联网。禁止时间段通过:相反地,也可以设置在某些时段内阻止特定MAC地址的设备连接网络。
  • 限速:可以用来对基于MAC地址的流量进行限速。这意味着你可以为特定设备设定一个最大上传或下载速度,以确保不会因为单一设备消耗过多带宽而影响其他设备的使用。
  • 黑名单/白名单:可以创建一个黑名单来阻止未经授权的设备连接到网络,或者创建一个白名单只允许已知的设备连接。
  • 统计功能:提供关于MAC地址活动的统计信息,如活跃的MAC地址数量、每个MAC地址的流量等。

下面以时间控制中允许时间段通过来介绍mactime相关的配置。运行vpp进程,我们创建一个tap接口用来内核和vpp之间的通信,并分别配置ip地址。

代码语言:javascript
代码运行次数:0
运行
复制
root@learning-vpp:~/workspace/vpp# ifconfig tap0
tap0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.2  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::fe:9dff:fe6b:d47f  prefixlen 64  scopeid 0x20<link>
        ether 02:fe:9d:6b:d4:7f  txqueuelen 1000  (Ethernet)
        RX packets 150  bytes 14400 (14.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1835  bytes 86134 (86.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

内核接口tap0地址是02:fe:9d:6b:d4:7f,接下来我们配置mactime,我们设置10:10-10:12之间允许mac地址通过的。在内核上长ping vpp中接口ip。

代码语言:javascript
代码运行次数:0
运行
复制
 binary-api mactime_add_del_range name pc1  mac 02:fe:9d:6b:d4:7f allow-range Sat - Sat 10:10-10:12

配置完毕之后观察如下:在10:10-10:12之间时,可以ping通192.168.1.1的,当时间10:12:01秒再次查询统计时,已经无法ping通了。

当执行下面命令

代码语言:javascript
代码运行次数:0
运行
复制
binary-api mactime_add_del_range name pc1  mac 02:fe:9d:6b:d4:7f del

删除对mac地址限制之后,有可以ping通了。

下面我们通过设置trace抓取转发流程如下:

代码语言:javascript
代码运行次数:0
运行
复制
01:46:06:935832: virtio-input
  virtio: hw_if_index 1 next-index 11 vring 0 len 98
    hdr: flags 0x00 gso_type 0x00 hdr_len 0 gso_size 0 csum_start 0 csum_offset 0 num_buffers 1
01:46:06:935842: mactime
  MACTIME: src mac 02:fe:9d:6b:d4:7f device mac-02:fe:9d:6b:d4:7f result pass

01:46:06:935850: ethernet-input
  IP4: 02:fe:9d:6b:d4:7f -> 02:fe:b5:0f:ac:51
01:46:06:935857: ip4-input
  ICMP: 192.168.1.2 -> 192.168.1.1
    tos 0x00, ttl 64, length 84, checksum 0x5e50 dscp CS0 ecn NON_ECN
    fragment id 0x5905, flags DONT_FRAGMENT
  ICMP echo_request checksum 0x789b id 9
01:46:06:935864: ip4-lookup
  fib 0 dpo-idx 7 flow hash: 0x00000000
  ICMP: 192.168.1.2 -> 192.168.1.1
    tos 0x00, ttl 64, length 84, checksum 0x5e50 dscp CS0 ecn NON_ECN
    fragment id 0x5905, flags DONT_FRAGMENT
  ICMP echo_request checksum 0x789b id 9
01:46:06:935870: ip4-receive
    fib:0 adj:7 flow:0x00000000
  ICMP: 192.168.1.2 -> 192.168.1.1
    tos 0x00, ttl 64, length 84, checksum 0x5e50 dscp CS0 ecn NON_ECN
    fragment id 0x5905, flags DONT_FRAGMENT
  ICMP echo_request checksum 0x789b id 9
01:46:06:935875: ip4-icmp-input
  ICMP: 192.168.1.2 -> 192.168.1.1
    tos 0x00, ttl 64, length 84, checksum 0x5e50 dscp CS0 ecn NON_ECN
    fragment id 0x5905, flags DONT_FRAGMENT
  ICMP echo_request checksum 0x789b id 9
01:46:06:935877: ip4-icmp-echo-request
  ICMP: 192.168.1.2 -> 192.168.1.1
    tos 0x00, ttl 64, length 84, checksum 0x5e50 dscp CS0 ecn NON_ECN
    fragment id 0x5905, flags DONT_FRAGMENT
  ICMP echo_request checksum 0x789b id 9
01:46:06:935881: ip4-load-balance
  fib 0 dpo-idx 2 flow hash: 0x00000000
  ICMP: 192.168.1.1 -> 192.168.1.2
    tos 0x00, ttl 64, length 84, checksum 0x1f06 dscp CS0 ecn NON_ECN
    fragment id 0x984f, flags DONT_FRAGMENT
  ICMP echo_reply checksum 0x809b id 9
01:46:06:935886: ip4-rewrite
  tx_sw_if_index 1 dpo-idx 2 : ipv4 via 192.168.1.2 tap0: mtu:9000 next:3 flags:[] 02fe9d6bd47f02feb50fac5
10800 flow hash: 0x00000000
  00000000: 02fe9d6bd47f02feb50fac51080045000054984f400040011f06c0a80101c0a8
  00000020: 01020000809b000909c02dd6ee66000000008d8b0d00000000001011
01:46:06:935888: tap0-output
  tap0 flags 0x02180005
  IP4: 02:fe:b5:0f:ac:51 -> 02:fe:9d:6b:d4:7f
  ICMP: 192.168.1.1 -> 192.168.1.2
    tos 0x00, ttl 64, length 84, checksum 0x1f06 dscp CS0 ecn NON_ECN
    fragment id 0x984f, flags DONT_FRAGMENT
  ICMP echo_reply checksum 0x809b id 9
01:46:06:935893: mactime-tx
  MACTIME: src mac 02:fe:b5:0f:ac:51 device mac-02:fe:9d:6b:d4:7f result pass

01:46:06:935898: tap0-tx
    buffer 0xa7af4: current data 0, length 98, buffer-pool 0, ref-count 1, trace handle 0x0
                    local l2-hdr-offset 0 l3-hdr-offset 14 
  hdr-sz 0 l2-hdr-offset 0 l3-hdr-offset 14 l4-hdr-offset 0 l4-hdr-sz 0
  IP4: 02:fe:b5:0f:ac:51 -> 02:fe:9d:6b:d4:7f
  ICMP: 192.168.1.1 -> 192.168.1.2
    tos 0x00, ttl 64, length 84, checksum 0x1f06 dscp CS0 ecn NON_ECN
    fragment id 0x984f, flags DONT_FRAGMENT
  ICMP echo_reply checksum 0x809b id 9

通过上面的转发流程和下面的代码中可以了解到mactime节点挂载点存在2个,rx对应mactime节点是在device-input arc feature上,tx对应mactime-tx是在interface-output节点上。

代码语言:javascript
代码运行次数:0
运行
复制
VNET_FEATURE_INIT (mactime, static) =
{
  .arc_name = "device-input",
  .node_name = "mactime",
  .runs_before = VNET_FEATURES ("ethernet-input"),
};

VNET_FEATURE_INIT (mactime_tx, static) = {
  .arc_name = "interface-output",
  .node_name = "mactime-tx",
  .runs_before = VNET_FEATURES ("interface-output-arc-end"),
};

请注意,虽然MAC地址过滤提供了一定程度的安全性,但它并不是绝对安全的方法,因为MAC地址可以被伪造。因此,最好将MAC地址过滤与其他安全措施(如强密码保护、最新的加密标准等)结合起来使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档