标签: 网络

  • MacBook的高速网卡(>1000Mbps)方案踩坑

    MacBook的高速网卡(>1000Mbps)方案踩坑

    时效性提醒:本文首次编写发布于4 年前。

    本文是MacBook超过千兆网络的连接(比如2.5G/5G/10G)方案的探索,我的设备是MacBook Pro 13,2020年,M1芯片,系统为macOS Monterey 12.4。其他MacBook也可参考,主要的坑在于macOS。

    首先是MacBook自带的网络方案:内置Wi-Fi,但目前MacBook的WiFi6仅为2×2,且不支持160M频宽,PHY速度只能到1200M,实测在中高端路由器下,实际速度最大也仅为800Mbps左右,无法超过千兆。

    工作:常见的2.5G USB有线网卡(RTL8156芯片)

    示意图

    目前市场上有很多2.5G USB网卡,通常都是RTL8156芯片,这种芯片在macOS下工作良好,开箱即用(免驱)

    实测速度(iperf3):TX:2.35Gbps,RX:2.35Gbps,双向TX+RX:2.26Gbps+2.26Gbps,能跑满2.5G。

    还测试了长时间跑满2.5G,网卡外壳仅为温热,未出现明显降速,效能挺不错的。

    不工作:QNA-UC5G1T等5G USB有线网卡(AQC111u芯片)

    QNAP QNA-UC5G1T

    这里的5G指5Gbps,而不是5GHz WiFi的无线网卡,这基本是USB 3.x gen1(5Gbps)的最快速度,也是目前市面上最快的USB协议网卡(不包括雷电),USB 3.x gen2的USB网卡还未出现。

    不幸的是,AQC111u的官方驱动仅支持“macOS Catalina 10.15 or older”,在较新的MacBook上至少都是BigSur(11.x)以后的版本,无法使用。

    在较新的macOS版本下,虽然QNA-UC5G1T可以被识别,但仅能工作在1Gbps下,实际使用体验和满大街的千兆USB网卡没区别,没有意义,也不够稳定,有时甚至会握手为100Mbps。

    同时这种网卡在其他系统下也不建议使用,实测在Windows和Linux下也只能达到3Gbps左右的速度,比2.5G网卡强不了多少,考虑到其价格,完全没有性价比。

    大概率不工作:雷电硬盘盒转接普通PCIe万兆网卡

    市面上有售雷电3的万兆网卡,但都价格昂贵(1000+),使用几百块的雷电m2硬盘盒+普通PCIe万兆网卡似乎是更有性价比的方案,但实际并不能工作。通过雷电m2硬盘盒+m2转pcie座+外置12v电源,MacBook是可以实际识别到PCIe设备,但都因为驱动问题无法使用。我尝试了AQC107和Intel x540两种网卡,均无法使用。

    对于普通AQC107 PCIe万兆网卡,macOS虽然有AQC107的驱动,但其是仅为Mac Mini的内置网卡服务的,对于ID不同的普通AQC107网卡,macOS会拒绝加载驱动,虽然有破解方案,但对于白苹果繁琐且不值得。

    对于Intel x540PCIe万兆网卡,根本没有驱动,无法识别。

    因此市售的成品雷电3的万兆网卡,或许是MacBook万兆的唯一方案了,但因不是很值得(笔记本用个2.5G也够用,10G不是刚需),我没有购买测试。

  • 2022年,对于爱快(iKuai)路由系统本身网络活动的简单抓包分析

    2022年,对于爱快(iKuai)路由系统本身网络活动的简单抓包分析

    时效性提醒:本文首次编写发布于4 年前。

    iKuai路由系统,一个基于Linux的国产路由系统,特点是带有DPI流控并且免费,有一定审计功能,目前在国内似乎是除OpenWrt外最常用的软路由系统。

    不过和部分其他的专用路由系统类似,iKuai本身相对封闭,不开放Linux shell,甚至rootfs也是加密的,在商业上这自然无可厚非,但iKuai系统在几年前曾被爆出有过劫持用户网络的DNS和HTTP请求用于广告盈利的行为,虽然据传言已被去除,但仍然令人担忧其“私货”。

    所以这次,我将iKuai路由系统作为二级路由,连接到RouterOS主路由上。RouterOS有着方便的防火墙配置和抓包功能,可以设置filter进行抓包并保存到文件,然后导入Wireshark中查看。

    所用iKuai系统为“免费版3.6.0 x64 Build202202101800 体验版”,与目前的3.5.4正式版在网络活动行为上应该区别不大。在iKuai中并未开启“爱快云”和SD-WAN功能,仅打开默认的自动更新,意味爱快自身着其除了“download.ikuai8.com”外,理应不去访问任何外网。

    截止2022.02,iKuai系统在“爱快云”页面有一个隐私政策文档的链接,但其只描述了爱快云的隐私政策,并未说明在不使用“爱快云”的情况下iKuai路由系统本身会上传哪些信息。

    DNS抓包

    截取DNS请求是用于发现其试图访问哪些域名的方便方法,本次首先禁止了iKuai对除了“download.ikuai8.com”和114.114.114.114 DNS外的任何连接,然后截取了其开机几十分钟内的所有DNS请求:

    经过整理,其查询的所有域名如下:

    NTP服务,正常行为:
    0.centos.pool.ntp.org
    1.centos.pool.ntp.org
    2.centos.pool.ntp.org
    ntp.aliyun.com
    
    软件更新,正常行为:
    download.ikuai8.com
    
    意义不明的名字,但IP与download.ikuai8.com相同:
    302.ikuai8.com
    
    爱快云:
    yun.ikuai8.com.w.kunlungr.com (CNAME自 yun.ikuai8.com)
    
    疑似使用情况上报,存在疑问(如:上传了哪些信息?):
    report.ikuai8.com.w.kunluncan.com (CNAME自 report.ikuai8.com)
    
    阿里云-日志服务SLS,存在疑问(如:上传了哪些信息?):
    alpha-cloud-log.cn-hangzhou.log.aliyuncs.com
    
    疑似阿里广告服务(友盟),存在疑问:
    secgw-na61-na62.wagbridge.alibaba.alibabacorp.com (CNAME自 umdc.aliapp.org)
    
    用途未知,存在疑问,对应IP都属于阿里的AS37963:
    as1.ikuai8.com
    as2.ikuai8.com
    dis.ikuai8.com
    pkgmanager.ikuai8.com
    
    江苏电信的IP,疑似用于宽带加速服务,存在疑问:
    fastgame.ikuai8.com
    
    可能用于网络检测:
    baidu.com
    qq.com

    注:以上为单次简单实验收集到的域名查询和个人的主观推测,不为其正确性负责,不做出任何评价。若官方或第三方能提供更多信息,欢迎在评论区留言。

    在上级路由中使用的规则如下(192.168.88.2为iKuai的IP):

    未完待续,等有空时准备进行一次全天抓包。

  • Mikrotik CCR2004-1G-2XS-PCIe 实际CPU型号及拆解分析

    Mikrotik CCR2004-1G-2XS-PCIe 实际CPU型号及拆解分析

    时效性提醒:本文首次编写发布于4 年前。

    CCR2004-1G-2XS-PCIe时Mikrotik在2022年初发布的“网卡形态的路由器”,是一个网卡+路由器二合一的产品。

    关于CCR2004-1G-2XS-PCIe的CPU型号,Mikrotik的宣传手册上写的是AL32400,这与其他CCR2004系列路由器上的型号一致。但官网产品页面中写的却是AL52400,让人困惑,RouterOS中也没显示其CPU型号。

    这周正好我订的那个也到货了,直接拆开一探究竟,发现确实是AL32400,后缀1700,应该表示1.7GHz频率版本,与其他CCR2004系列路由器一致,同样这个CPU也被用在了QNAP的一款NAS上。其内核规格为4核A57(ARM Cortex-A57 1.7GHz x4),A57是A72的上一代架构,与A53、A55不同,A57是同属于A7x系列的高性能核,因此可以认为AL32400的CPU性能与树莓派4的BCM2711较为类似,后者为4核A72,1.5GHz或1.8GHz(新版arm_boost),对于路由器而言性能比较不错。

    下面为详细的拆解图(点击图片查看原始尺寸)

    说是拆解,但其实这就是一个PCIe卡,拆下PCIe档片后,在拧下背面的5个螺丝拆下散热器,即可露出全貌:

    背面:

    CPU,或者说SOC,型号AL32400(-1700):

    拆掉散热风扇,其规格为12v 0.13A 4线,直径44mm,孔距39mm,厚度约1cm:

    PCB全貌:

    可以看出其布局和普通的高速网卡是非常类似的,不同的是中央的芯片是一个SoC,而不是网卡芯片,并且上方还有其内存,内存大小为4GB,但内存颗粒为5个,可能是有ECC。

    关于其实际使用的体验,我会在后续发布新的文章。

    其他附属芯片

    SoC左侧,SFP28接口周围

    红色:德州仪器TI DS250DF410,25Gbps 多速率 4 通道重定时器,以太网重定时器、转接驱动器和多路复用器缓冲器

    具有集成信号调节功能的四通道多速率重定时器,最大速度25.8Gbps,支持协议:IEEE802.3bj, 100GbE, Infiniband EDR, OIF-CEi-25G-LR/MR/SR/VSR, QSFP28, CFP2/CFP4, CDFP

    DS250DF410 是一款具有集成信号调节功能的四通道多速率重定时器。该器件用于扩展有损且存在串扰的远距离高速串行链路的延伸长度并提升稳定性,同时实现不高于 10-15 的比特误码率 (BER)。

    黄色:德州仪器TI CDCM61002,1:2 超低抖动晶振时钟发生器

    CDCM61002是一种高度通用的低抖动频率合成器,可以产生两个低抖动时钟输出,可以在低压正发射器耦合逻辑(LVPECL)、低压差分信令(LVDS)或低压互补金属氧化物半导体(LVCMOS)输出之间进行选择,来自低频晶体或LVCMOS输入,用于各种有线和数据通信应用。CDCM61002具有板载PLL,只能通过控制引脚轻松配置。整体输出随机抖动性能小于1ps,RMS(从10 kHz到20 MHz),使该设备成为SONET、以太网、光纤通道和SAN等苛刻应用程序的完美选择。CDCM61002有一个小体积的32pin、5mm×5mm QFN封装可供选择。

    绿色:Atheros AR8035 集成10/100/1000千兆以太网收发器

    AR8035是Atheros的第4代 单口 10/100/1000 Mbps Tri-speed Ethernet PHY,支持RGMII接口的MAC。

    紫色:74HC595,串行输入、并行输出的8位移位缓存器

    蓝色:NT5AD512M16A4-HR,DDR4 8Gb(1GB)内存颗粒,支持速率:2933、2666、2400

    SoC右侧

    红色:铠侠(原东芝)Kioxia TC58BYG0S3HBAI6,Built-in ECC SLCNAND,1Gb(128MB)SLC NAND 闪存,1.8v,x8位宽

    黄色:意法半导体ST STM32F030C6T6,主流ARM Cortex-M0超值系列MCU,具有32 KB Flash和48 MHz CPU

    绿色:德州仪器TI TPS51362,具有超低静态电流的 3V 至 22V、10A 同步降压转换器,输入3~22v,输出0.6v ~ 2v

    蓝色:德州仪器TI TPS548B22 具有差分遥感功能的 1.5V 至 18V、25A 同步 SWIFT™ 降压转换器,输入1.5~18v,输出0.6v ~ 5.5v

    紫色:德州仪器TI SN74GTL2003 (丝印GK2003)3片,双向电平转换器,双向0.95v~5v

    棕色:LITE-ON LSP5523,3A 27V 同步降压转换器,输入4.5v~27v,输出0.925v~0.8Vin

    白色:意法半导体ST M24C64-F(丝印464FT),64-Kbit(8KB)串行I2C总线EEPROM

    背面

    红色:winbond W25Q128JWS,128Mb(16MB) SPI Flash,128M-bit Serial Flash Memory with uniform 4KB sectors and Dual/Quad SPI

    黄色:德州仪器TI TCA9546A(丝印PW546A),具有复位功能的低压 4 通道 I2C 和系统管理总线 (SMbus) 开关

    蓝色:德州仪器TI TCA9555 (丝印PW555),具有中断、弱上拉和配置寄存器的 16 位 1.65V 至 5.5V I2C/SMBus I/O 扩展器

  • “双网线”旁路由之“完美”解决IPv6和千兆瓶颈问题

    “双网线”旁路由之“完美”解决IPv6和千兆瓶颈问题

    时效性提醒:本文首次编写发布于4 年前。

    旁路由是一种homelab常见的需求,主路由用硬路由确保稳定,比如用Mikrotik的RouterOS路由器作为主路由,旁路由使用OpenWrt作为软路由,实现广告过滤和隧道等高级功能,这些功能往往都无法硬件加速,需要消耗大量CPU完成,x86的高性能软路由是很合适的选择。比起使用二级路由,可以减少在旁路由上的一次NAT(仅对于IPv4),提高利率,也便于主路由进行管理。

    本文提出了一种整活之余有些实用性的特殊旁路由方案,或者也可称为IPv4不NAT的二级路由方案。

    本文环境信息:

    • 主路由RouterOS,旁路由OpenWrt,需要主路由具有3个网口(对于硬路由很容易满足),旁路由至少具备双网口,假设其都为千兆网口;
    • 为了使用IPv6二级路由,运营商给的IPv6前缀至少需要为/63;
      • (常见的/56、/60都可满足,但如果给的是/64,虽然或许也能实现功能,但需要不同的设置)
    • 主内网(全功能)网段:192.168.10.0/24,辅助内网(备用/直连)网段:192.168.88.0/24

    0x01 传统旁路由设置

    传统的旁路由设置只针对IPv4,旁路由只需要一根网线连接内网和旁路由的LAN,旁路由的WAN空置。主路由LAN口IP为192.168.10.1/24,旁路由LAN口IP为192.168.10.2/24,在内网DHCP服务器设置中设置网关为192.168.10.2(DHCP服务器可运行在主路由或旁路由上,但只能有一个),然后在旁路由中设置网关为192.168.10.1。

    这样所有客户端都会使用192.168.10.2作为网关,将出口的IP封包发到旁路由上,旁路由因为开启了ip_forward(路由器都会开启),会对这些封包进行转发:由于在旁路由上设置了192.168.10.1作为网关,于是旁路由就会将这些封包直接转发到192.168.10.1的主路由上(传统旁路由的关键就在于,由于是LAN to LAN转发,所以不会匹配防火墙中LAN to WAN的masquerade规则,即不会进行我们常说的路由器NAT)。由于封包在旁路由上进行了转发,隧道软件就可以通过防火墙NAT表中的规则对这些封包进行处理(比如redirect和tproxy),满足我们使用旁路由的需求。

    在一般链接的回程(下载)时,经过主路由NAT后的入口封包的目标IP为客户端的内网IP,直接通过交换机到达客户端,无需再经过旁路由,所以理论上是可以对外网跑满双向千兆的。

    0x02 传统旁路由的问题

    第一个问题就是IPv6,IPv6没有单独的网关选项,对于SLAAC而言(至今Android只支持SLAAC,不支持DHCPv6),如果一台机器进行了RA(路由宣告),让客户端获得了前缀,那么客户端就会认为其是网关。由于公网IPv6前缀由PPPoE获得,所以必然是主路由进行RA,也就自动成为了所有客户端的IPv6网关,无法再指定旁路由为网关。

    一个常规的IPv6 RA包

    从另一个角度讲,IPv6要求所有设备(Node)必须从Router和Host这两种角色中二选一,而旁路由就恰恰是一个设备既作为Router,又作为Host。

    实际上,IPv6也没必要使用旁路由,由于通常情况下IPv6不使用NAT,路由器在这里做的仅仅是转发而已,我们可以放心的使用IPv6二级路由。

    另一个问题是千兆瓶颈的问题,这个千兆瓶颈只对于非直连流量(比如隧道流量)存在,即经过隧道的流量,上行和下行的速度总和无法超过1Gbps,这是因为隧道流量返程也需要经过旁路由。对于直连流量而言,如文章第一节所述,由于返程不需要经过旁路由,所以不存在千兆瓶颈,上下行速度总和可以达到2Gbps,即跑满。不过这个问题通常不会带来影响(啥公网隧道能千兆对等),但若能一并解决了也好。

    0x03 本文的魔改二级路由方案

    为避免混淆,以下使用「软路由」代指我们原本逻辑中的旁路由(即那台OpenWrt的软路由)

    这是一种双网口、IPv4旁路由+IPv6二级路由的方案,这种方案实际上更接近于标准的二级路由,但通过一些魔改,让IPv4变成旁路由模式。

    拓扑如下:

    图中主路由bridge代表主内网,具有软路由提供的高级功能;bridge_alt代表辅助内网,此处仅用于软路由与主路由间的通信,也可接入一个交换机作为直连/备用内网,其不具有软路由提供的高级功能,但能在软路由故障时继续提供标准(直连)的上网功能。如果主路由上不需要扩展辅助内网,也可不为辅助内网创建bridge,使用一接口代替。

    这里只列出了IPv4部分的参数。IPv6部分同标准的IPv6二级路由,但要注意,IPv6的RA和DHCP Server要运行在bridge_alt接口上(见下文)。

    如果你的主路由的具有硬件交换机且还有很多未用端口,那便可以省掉“主内网 交换机”,这样旁路由就是通过两根线连接了主路由,但并不会成环。

    下面开始IPv4部分的详细配置介绍:

    在主路由上,基于路由器模式的出厂设置(如Home AP Dual等),进行以下修改:

    1. 首先新建个Bridge,名称为“bridge_alt”:

    2. 添加需要的接口到bridge_alt中,这里我除了必要的有线端口ether1外,还添加了机器自带的两个wlan,作为备用网络热点(主内网的wlan由独立的AP提供):

    3. 为bridge设置IP:192.168.10.1/24;为bridge_alt设置IP:192.168.88.1/24

    4. 为bridge_alt设置分配192.168.88.0/24的DHCP服务器;如果主内网也由主路由提供DHCP服务,则为bridge设置分配192.168.10.0/24的DHCP服务器,并设置网关为192.168.10.2(下图未展示):

    5. 在Interface list中,将bridge_alt设置为LAN

    然后将软路由WAN口与bridge_alt的接口通过网线连接(本文中为ether0),然后你应该能看到软路由的WAN口从主路由获取了IP:

    (你可能会疑惑:这不是二级路由的状态吗?别急,下面我们就关闭它的NAT)

    下面我们在软路由中进行设置(类似的,基于OpenWrt的默认设置)

    6. 设置软路由的LAN口IP为192.168.10.2;如果在主路由上设置了主内网的DHCP服务,则要关闭软路由LAN的DHCP服务(下图未展示)

    7. 最为关键的一步,到防火墙中关闭WAN区域的“IP动态伪装”,也就是masquerade,即我们常说的NAT:

    然后将根据拓扑图,将软路由的LAN主路由的bridge主内网的设备都接到交换机上,IPv4的设置就完成了。

    关于IPv6的配置,和标准的IPv6二级路由相似,只是RA和DHCPv6 Server的接口设置有所不同,这部分网上有非常多很好的教程,比如:https://wu.renjie.im/blog/network/ros-dhcpv6/zh-cn/,下面仅写出在本文设置中需要注意的点。

    主路由上,IPv6的地址设置(包括了RA)和DHCPv6的设置中,需要在且仅在bridge_alt接口上进行设置,而不应对bridge进行任何设置。换句话说,在IPv6下,主路由不会使用主内网bridgebridge的IPv6 RA和路由完全由软路由负责,bridge作为bridge_alt的下级路由,形成标准的IPv6二级路由。

    0x04 后记

    本文的方法与普通二级路由的最大区别,其实就是对于IPv4:①在二级路由器(本文中的软路由)上关闭了LAN to WAN的masquerade NAT;②在主路由上连通了二级路由的LAN。从而达到了类似旁路由的效果(旁路由就是为了少一层NAT)。

    至于为什么可以在关闭二级路由器的NAT,不妨思考一下我们为什么在路由器上需要NAT:如果我们有一个连接上级网络的普通路由器,并关闭了NAT,那么我们发出的包其实还是可以正常的被送到远端的服务器,但由于包中的源IP地址还是我们客户端的内网IP地址,无法通过我们的内网IP向我们回应(其实通常直接就不会被远端服务器的防火墙接受)。而masquerade NAT就是一种特殊的src nat,其永远都会使用路由器本机地址,作为IP封包源地址的替换,从而让远端服务器的回应包能被正确发到路由器上,再由路由器转发给客户端。

    但在本文的方法中,首先在我们的包通过二级路由器直接转发给主路由后,由于主路由是带有NAT的,远端服务器的回应包会正常的到达主路由,然后主路由在转发回应包时,由于我们配置了上面的,回应包可以直接发给客户端,无需经过二级路由器,也就无需二级路由器的NAT,正常的完成了一次往返的通信。

    最后,本文的方法更多是整活向的。无论是直接使用单路由,还是普通的二级路由,甚至用传统旁路由方式并直接关闭IPv6,其实也没什么不好(毕竟2022年目前ISP和CDN的优化还是针对IPv4为主,很多地方依然是“关闭IPv6以提升上网体验”)。不过homelab的一大乐趣之一就是折腾各种非标准的方案和配置,本文也算是提出了一种旁路由+正常IPv6的解决方案,如果各位读者认为有改进的地方或漏洞,也欢迎在下面留言。