又是没什么用的技能,但除了没什么用之外,你如果知道了会有重新认知世界的感觉。

这是昨天的留言,其实坦然的说,很多的用户对系统能力的挖掘就仅仅限于自己关注的数码小白博主偶尔跟风给你讲个啥“技巧”,赶上自己需要用到的,就按照人家的操作过程来跑一遍,撞大运能用,也就跟着用了。这就是大多数所谓“懂数码”的数码爱好者常态。天天折腾,但折腾完了就不知道所以然。
这也是为什么iN给大家搞个“无用技”的原因了,这个系列的内容本质上来讲都是大家基本上一辈子都用不上的歪门邪道,但这些“技能”都是真实存在的而且在特定环境下是有那么一丝丝需求的。只不过,这些“特定环境”离大家的生活有那么一点远罢了。
换个角度来讲,如果你始终站在用户视角来看你自己遇到的那些“使用问题”目光就极其狭小了,提升境界站在上帝视角来看网络就很有意思了。
那么咱们今天就说一个大部分网络用户没听说过的“邪活”——MACsec(IEEE 802.1AE)。

先说需求,我们在做局域网的时候会拉很多网线,这些网线实际上就是网络基础设施。例如你家里会放很多网络接口,理论上来说,任何一个接口插入网线后就可以接入到你家里的网络中——要不然你留这个接口也就没有意义了,对吧?
但你仔细想一下,无论张三、李四、王二麻子只要自己带个笔记本,到你家里,找到一个网络接口插了进去,就可以用他的电脑接触到你家网络中的所有信息,这件事你还觉得无所谓吗?
当然了,大部分人家里的网络中顶多存储了一点让人面红耳赤的小姐姐的视频,被朋友看了也顶多是被挂上一个LSP的名号而已,但对于一个公司呢?对于一个保密单位呢?这件事就不是被贴标签那么简单了。细思极恐吧?
本质上的网线是不加密的,同时也基于双绞线系统的基本原理,双绞线的信号传输也不是加密的,任何加密的过程都依赖于网络层之上的加密操作。
但别忘了,电子信号的基本特性就是可以被复制和监听,例如:

这是一个简单的无源网络分路器(Passive Network Tap),一根网线是可以简单的复制为多根的,其实如果看线路原理图,这样的设计基本上相当于一个简单的HUB,在这样的接线规则下,可以用一根网线实时的监听到这一路网络中的所有传输信号。
再复杂一些的就是间谍设备了,例如:

带芯片的有源分路监控器不仅可以监控网线上的信号还可以记录重要信息并立刻转发到其他的网络中。


用数码小白们能听懂的话来说就是,对于一般用户来说,我们想搞你,随时可以搞你,之所以你没被搞是因为你不值得被我们搞。
之所以上面说的这些都成立,是因为咱们前面已经讲了——网线本身的传输信号是不加密的。以太网诞生至今几十年,它的设计目标从来就不是“防监听”,而是“谁快谁上,谁抢到信道谁说话”。
而绝大多数用户的安全认知也就止步于“装个杀毒软件”“开启防火墙”“用个 VPN”,这些全都发生在系统软件层面。你从未想过,真正的信息泄露,很可能在操作系统启动之前,已经完成了。
所以,如果站在上帝视角来看网络,网线怎么可以不加密呢?于是,就有了MACsec!这个协议工作于标准网络模型的第二层(数据链路层),不依赖操作系统、不依赖 VPN、不依赖 TLS 证书,在每一帧以太网帧发出去之前就完成加密,在对端硬件解密之后才能继续通信?

如果不做认证的话,即便是用插入式方式监听网络信息也只能监控到一些无意义的信号,能看到数据被加密了,但始终无法得知数据内容。都是加密传输,这个协议和IPSec的区别是什么呢?其实区别超级大!IPSec在第三层,实际上是对IP协议进行加密和传输,依托于程序和系统配置,只能加密传输IPSec涵盖的部分,而MACsec则是对每个传输的以太网帧进行加密解密,这就是端对端的完全加密了,打个比方:
IPSec 就像你寄快递时,把里面的物品用厚厚的包装箱封起来,贴上标签封条。快递公司的人知道你要把东西从哪儿寄到哪儿,但他们看不到你寄的是什么。
MACsec 则不止是给快递打包,而是连“快递车本身”和“运送快递这段路”都加上了“隐身滤镜”——外人甚至无法知道你的车开了哪条路,更看不到路上有没有快递车在动。
简单的说MACsec怎么实现,这就是来回怼文章开头时候的那个哥们的留言了。
在MikroTik中是对MACsec提供直接支持的,路径 Interfaces - MACsec

点击新建建立一个新的MACsec端口:

再点击apply后在界面中会弹出CAK和CKN两个关键的字符串,这是密钥对。
这时候端口被设置为等待连结的状态(waiting interface),当你的其他支持MACsec的设备连接的时候就要依靠CAK和CKN进行认证。例如一台linux机器就可以通过这样的方式进行设置:
sudo ip macsec add macsec0 tx sa 0 pn 1 on key 00 0aa97db053e9cd94dcc9e8ac14a6726bsudo ip macsec add macsec0 rx address 6c:3b:6b:12:34:56 port 1sudo ip macsec add macsec0 rx address 6c:3b:6b:12:34:56 port 1 sa 0 pn 1 on key 00 0aa97db053e9cd94dcc9e8ac14a6726bsudo ip link set macsec0 up设置好后可以通过“ip macsec show”检查:

这样这台机器就有了通过MACsec连接端口的能力。
插入网线后

界面中显示R代表端口已经正常工作。
这时候在这条线路上的所有数据就已经完成了太网帧的加密过程所有的数据被加密传输,这个端口也就只有设置了MACsec密钥的机器可以使用,其他的设备是无法接通这个端口的。同样任何监听器其实也无法获取这条线路中所传递的网络数据信息。
呵呵,这个技能没有用吧?但是可以充分的装一波逼,当有人发愁自己办公室内有很多网络接口,又担心接口被无关人员盗用,或者有人担心自己组织的重要数据会被监听窃取,其实用这个方法就可以解决这些问题了。
但是这里得提前说一点,如果你的网卡不支持MACsec那么所有的加密计算就会依靠CPU进行AES编码,这件事在之前iN提过很多的那种做NAS的廉价CPU是不带有AES引擎的,所以会导致编码的机器CPU基本拉满。
还有一点,router OS路由器之间的互联实际上也可以走这个线路,当然了,这个意义在哪里就不和大家说了。