1 路由器RoC 1.1 基本概念 路由器RoC(Router on a Chip)一般都会集成多口以太网switch。
1.2 MT7628K eCos写MAC地址 ra0的MAC是读取0x0004、0x0006和0x0008三个寄存器。 假设MAC地址:00:0C:43:76:20:58 用USB2UART线进入eCos命令行后。 cd net iwpriv ra0 e2p 04=0C00 iwpriv ra0 e2p 06=7643 iwpriv ra0 e2p 08=5820
1.3 MT7620 1)集成了6口以太网交换机(MT7530)。 2)MT7628K类似于MT7620,运行eCos,其中的WLAN模块,可以实现桥接功能,即AP-Client。 3)switch不支持为每一个port配置PVID,而是几个port配置为一个组,然后为这个组内的端口配置公用的PVID,PVID的默认值为1。 4)片上总线包括Pbus (Peripheral bus) 和Rbus (Ralink bus)。 5)USB设备IP使用CAST CUSB2,CAST 8051 and USB core come from Poland Evatronix SA(OTG 3.0 spec),Evatronix SA was acquired by Cadence in 2013。 6)MT7620的OHCI和EHCI配置时二选一。
2 无线路由器当无线交换机使用方法 2.1 交换芯片对应的网络节点 1)eth0.1是VLAN1分出的LAN口 2)eth0.2是VLAN2分出的WAN口 3)无线路由器的br-lan = eth0.1 + ra0,即将有线LAN口和WLAN桥接组成一个新的LAN
2.2 无线路由器配置成无线交换机 1)外部网线连到4个LAN口中的一个,IE登陆路由器后,禁止DHCP服务 2)其它设备搜索WLAN信号,输入用户名密码
3 Linux DSA Linux交换机驱动目录: drivers/net/dsa net/dsa/slave.c dsa_slave_create()
4 NAT 4.1 iptables static NAT PREROUTING:DNAT专用。 POSTROUTING:SNAT专用。 MASQUERADE:SNAT转换时,如果--to-source的地址经常变化,那么就无法在iptables命令中固定,譬如路由器WAN口上的IP地址,内网设备通过WAN口访问外网时,只要指定使用MASQUERADE参数,iptables就会统一将内网设备的IP地址替换为路由器WAN口的IP地址。 Figure 4-1 NAT chain
eth0: 192.168.0.99 eth1: 192.168.5.99
# client -> eth1 -> eth0 -> server iptables -t nat -A PREROUTING -d 192.168.5.99 -i eth1 -j DNAT --to-destination 192.168.0.99 # client -> eth0 -> eth1 -> server iptables -t nat -A POSTROUTING -s 192.168.0.99 -o eth1 -j SNAT --to-source 192.168.5.99 echo 1 > /proc/sys/net/ipv4/ip_forward
Android TCP Server: busybox nc -lvz -s 192.168.0.99 -p 8001 Windows SocketTool
4.2 硬件NAT 参考AR8327N(N表示支持硬件NAT)page 50的NAT Entry Table,NAT有32个entries,每个entry的长度是80 bits。表编辑控制寄存器是Entry Edit Control Register。
iptables FORWARD对接net_device_ops中的函数指针ndo_flow_offload实现HNAT。
AR8327N的VLAN Table访问控制寄存器是VTU_FUNC_REG0和VTU_FUNC_REG1。
4.3 Cone NAT and Symmetric NAT 4.3.1 NAT - NAPT - Cone NAT 只要是从同一个内部IP和port出来的包,无论目的地址是否相同,NAT都将它转换成同一个外部IP1和port1。同一个外部IP1和port1与无论目的地址是否相同形成了一个类似锥形的网络结构,也是这一名称的由来。
P2P原理: [12th-May-2022] 1)2个局域网客户端连接公网服务器,服务器将client1的公网IP和port发送给客户端client2,同样服务器也将client2的公网IP和port发送给客户端client1。 2)然后client1发送数据给client2对应的公网IP和port,会失败,但是client1所在路由器的Cone NAT中包含了client1到client2公网IP和port的NAT session,接着client2也发送数据给client1对应的公网IP和port,因为client1所在路由器的Cone NAT已经包含了client1到client2公网IP和port的NAT session,所以这次client1可以收到client2的数据。 3)以上client1所在路由器的Cone NAT包含了2条NAT session,一条是client1到服务器,另外一条是client1到client2;同样client2所在路由器的Cone NAT也包含了2条NAT session,一条是client2到服务器,另外一条是client2到client1。 4)根据3的分析,client1或者client2访问2个外部地址,使用了同一个NAT源地址,所以这里的NAT类型是Cone NAT。 5) Linux NAT session numbers /proc/net/ip_conntrack /proc/sys/net/netfilter/nf_conntrack_max
4.3.2 NAT - NAPT - Symmetric NAT Linux MASQUERADE在进行NAT转换时,会遵循两个原则: 尽量不去修改源端口,也就是说,IP伪装后的源端口尽可能保持不变。 更为重要的是,IP伪装后必须保证伪装后的源地址/端口与目标地址/端口(即所谓的socket)唯一。
5 Switch VLAN原理 5.1 VLAN Mode Tag-based VLANs are the industry standard 802.1Q VLANs (dot1q) , while the port-based VLANs are more akin to private VLANs.
trunk:VLAN ID多于一个的port口,基于Tag-based,使用IEEE 802.1Q VID access:untagged port,基于Tag-based,使用IEEE 802.1Q PVID,一个port最多有一个untagged的VLAN
5.2 VLAN帧格式 Linux内核代码:net/8021q/vlan_dev.c eth0:VLAN母设备 eth0.VID:VLAN子设备,其IP地址的一般形式是aaa.bbb.VID.ccc,除了VID之外,IP地址的其它3个字段与母设备保持一致 VLAN PCP:IEEE 802.1Q中没有定义,在IEEE 802.1p中定义,p表示priority;3 bit,表示帧的优先级,取值范围为0~7,值越大优先级越高 VLAN DEI:Drop eligible indicator,丢弃适当性指示符,局域网中取0;1 bit VLAN ID:12 bit,0保留 2个字节EtherType: - 0x0800 表示IPv4 - 0x0806 表示ARP - 0x86dd 表示IPv6 - 0x809B 表示AppleTalk协议数据 - 0x8138 表示Novell类型协议数据 - 0x88F7 表示gPTP协议数据
5.3 VLAN entry SRAM VLAN entry有4096个,每个entry占用4个字节,开机后需要将使能的VLAN信息配置在交换机的SRAM中,有效的VLAN entry就以12bit的VLAN ID为索引,定位到SRAM中对应的位置。
5.4 PVID默认值 1)PVID属于IEEE 802.1Q,不属于Port-based VLAN 2)PVID寄存器IEEE 802.1Q Default Tag Register Block 0x0B00, Page 34h: Adress 10h-21h;默认值是1;参考Kendin KSZ8995M/MA 3)当端口被分配到多个VLAN中时,PVID通过寄存器设置为最小的VLAN ID 4)AN-135 802.1Q Tag Based and Port Based VLAN Function and Setting in KSZ8995M/MA 5)例子 VLAN ID CPU (eth0) LAN1 LAN2 LAN3 WAN 1 ? ? ? ? ? ? ? ?T ? ? ? ? ? ? ? ?U ? ? ? ?U ? ? ? ?U ? ? ?X 2 ? ? ? ? ? ? ? ?T ? ? ? ? ? ? ? ?X ? ? ? ?X ? ? ? ?X ? ? ?U 51 ? ? ? ? ? ? ? ?X ? ? ? ? ? ? ? T ? ? ? ?T ? ? ? ?T ? ? ? T 85 ? ? ? ? ? ? ? ?X ? ? ? ? ? ? ? T ? ? ? ?T ? ? ? ?T ? ? ? T
5.5 IEEE 802.1p 在该规范中定义了PCP的值。 PCP ? ?Priority ? ?Acronym ? ?Traffic types 1 ? ? ? ?0 (lowest) ? ? ? ?BK ? ? ? ?Background 0 ? ? ? ?1 (default) ? ? ? BE ? ? ? ?Best effort 2 ? ? ? ?2 ? ? ? ? ? ? ? ? ? ? EE ? ? ? ?Excellent effort 3 ? ? ? ?3 ? ? ? ? ? ? ? ? ? ? CA ? ? ? ?Critical applications 4 ? ? ? ?4 ? ? ? ? ? ? ? ? ? ? VI ? ? ? ?Video, < 100 ms latency and jitter 5 ? ? ? ?5 ? ? ? ? ? ? ? ? ? ?VO ? ? ? ?Voice, < 10 ms latency and jitter 6 ? ? ? ?6 ? ? ? ? ? ? ? ? ? ?IC ? ? ? ?Internetwork control 7 ? ? ? ?7 (highest) ? ? NC ? ? ? ?Network control
5.6 QinQ 1)802.1Q in 802.1Q:VLAN双Tag,是基于IEEE 802.1Q技术的一种比较简单的二层虚拟专用网络协议 2)3个重要寄存器 PVID寄存器:IEEE 802.1Q Default Tag Register,16位寄存器,默认值是1,这个是多用途寄存器,untagged Port口的内部和外部的VID都用PVID ISP TPID寄存器:16位TPID值,常规的customer TPID的值为0x8100 ISP Tag Port映射寄存器:指明哪些Port口支持双Tag
6 MT7620 WiFi 6.1 物理层的组成 PLCP:Physical Layer Convergence Procedure,物理层汇聚子层 PMD:Physical Medium Dependent,物理媒介相关层;调制解调就是这一层
6.2 MRMC Concurrency 1)MRMC是multi-role multi-channel operation的缩写。 2)The WiLink8.0 supports the multi-channel operation as time division multiplexing (TDM)-based concurrency. Each role gets a portion of the air time. The core of the multi-role operation is the scheduler that decides on each given time what role should be activated, and protects the role that should be suspended before moving to a new role. 3)TI WLAN+SoftAP是单信道TDM并发。 4)Cypress WLAN+P2P采用不同的信道实现TDM并发。 5)Linux中每一个role叫做vif。
6.3 SRAM Table 1)WiFi AP MAC Search Table - MT7620有256个entry,每个entry占用8个字节,保存一个Client的MAC地址和2个字节的属性。 - 256个entry保存256个Wireless Client MAC地址。 - 256个entry保存128个Wireless Client MAC地址和128个WCIDn_TX_RATE(仅仅占用每个entry的2个字节,高6个字节未使用)。 2)WiFi AP Beacon Table - Linux kernel中每创建一个带有AP功能的vif(Multi BSSID Mode),驱动就会在Beacon Table中增加一个entry。 - 包括Beacon在内的管理帧通过3个发送队列之一的Tx0Q发送。
6.4 RT3070 4-way handshake ap/ap_auth.c ap/ap_assoc.c ap/ap_wpa.c 1)AP和STA计算各自的PTK(Pairwise Transient Key),GTK(Group Temporal Key)由AP计算,并发送给STA。 2)AP和STA双方使用PTK对单播进行加密,使用GTK对组播进行加密。 3)PTK保存在Pairwise Key Table(offset 0x4000)中,GTK保存在Shared Key Table(offset 0x6C00)中。
6.5 MT7628K AP-Client 0) AP-Client is similar to an ethernet switch, without DHCP enabled. [7th-May-2022] DA/SA/BSSID, AP-Client + AP MAT core will do MAC Address Translation for DA, SA and BSSID, there are two BSSID, one is repeater, another is main router. MAT is an AP-Client core technology. 无线终端像手机、笔记本类的如果是通过中继设备(也可以叫副路由器)上网,他们的地址都会被中继设备替换为自身的MAC。 Refer to zhihu 消失的MAC地址。 Beacon packet has three MAC DA/SA/BSSID, DA is FF:FF:FF:FF:FF:FF, SA and BSSID are equal to AP BSSID.
1)APCLI模式保持了无线网络名称(SSID)的一致性,在公司园区或者其它公共场所,都需要保持无线网络名称的一致性。 2)APCLI使用了软件网桥功能,ra0和apcli0都attach到网桥br0上。 3)apcli0的MAC地址是在ra0的MAC地址基础上加1,并且ra0的MAC地址第6个字节也即是最右边那个字节必须是4的倍数。 4)Secondary router需要禁止DHCP功能,IP地址由上级路由器分配。
6.6 WDS 1)WDS模式保持了无线网络名称(SSID)的一致性,在公司园区或者其它公共场所,都需要保持无线网络名称的一致性。 2)Secondary router需要禁止DHCP功能,IP地址由上级路由器分配。 3) WDS: DA/SA/TA/RA Normal: DA/SA/BSSID
6.7 WiFi mesh [14th-May-2022] Role decision is based on BSSID and RSSI. WiFi mesh不改变WiFi原来的3地址(DA/SA/BSSID)或者4地址(DA/SA/TA/RA)结构,而是将mesh header放置于WiFi Frame Body帧体的最前面,mesh payload is an ethernet frame。
7 debug 7.1 switch port mirror Read my blog “以太网交换机EtherSwitch”。
7.2 iptables port mirror 1) Linux iptables TEE CONFIG_NF_DUP_IPV4=m CONFIG_NF_DUP_IPV6=m CONFIG_NETFILTER_XT_TARGET_TEE=m
# eth0 -> USB eth1 (192.168.2.5) -> Windows NIC (192.168.2.100) iptables -A PREROUTING -t mangle -i eth0 -j TEE --gateway 192.168.2.100 iptables -A POSTROUTING -t mangle -o eth0 -j TEE --gateway 192.168.2.100
TEE复制报文时,同时替换复制报文的源和目的MAC地址分别到USB eth1和Windows NIC的MAC地址(组播MAC地址也被替换成了Windows NIC的MAC),IP地址不做替换,所以没有路由功能,报文止步于Windows NIC。其缺点是阻碍了原始数据包的快速通过。
2) Windows Tools Netmon: uses LWF (Light-Weight Filter) NDIS driver Wireshark: uses NPcap
Windows 10上,Netmon可以抓取所有TEE后的报文,而Wireshark不可以,必须要用SocketTool或者其它工具监听对应的IP和port,才能够抓到相应的报文。
8 Abbreviations DSA:Linux Distributed Switch Architecture gsw:Mediatek Gigabit Switch IOS: Cisco Internetwork Operating System, Apple iOS got Cisco IOS authorization IPQ:Internet Processor Qualcomm,采用Snapdragon ARM架构的路由器SoC LuCI: OpenWRT Lua Configuration Interface MIPS 24KEc:K表示1000,E表示expanded-precision,也即是具有DSP指令,c表示core mtk_esw:Ralink Fast Ethernet Embedded Switch NAPT:Network Address and Port Translation nftables: netfilter tables OpenWRT:Wireless RouTer promiscuous: sniff mode QCA:Qualcomm Atheros,一般都是MIPS架构 RTMP: Ralink Technology Miniport vif:Linux WLAN Virtual Interface
|