admin 管理员组

文章数量: 887021

ip route get <address>
/proc/net/nf_contrack,NAT操作只会修改回复方向(第二个)四元组。
QNX route get <address>

Windows IP = 0.0.0.0

1 路由器RoC
1.1 基本概念
路由器RoC(Router on a Chip)一般都会集成多口以太网switch。
连接到路由器的USB存储设备,一般通过ftp访问。

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的EHCI和OHCI是2个平台设备。
ETH: 0x1010_0000
SPH EHCI: 0x101c_0000
SPH OHCI: 0x101c_1000
https://github/hynnet/openwrt-mt7620
7) Refer to page248 2.19.6.2 ACL Rule Table of MT7620_ProgrammingGuide.pdf.
ACL包解析器一般将MAC帧分割成每两个字节为一组送入ACL查找表,根据定义好的两字节偏移格式类型和两字节偏移进行匹配,一旦命中就输出index,index再送入action表。
8) Refer to page29 of MT7620datasheet.pdf for Reverse RGMII.

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 MT7620 WiFi
5.1 物理层的组成
PLCP:Physical Layer Convergence Procedure,物理层汇聚子层
PMD:Physical Medium Dependent,物理媒介相关层;调制解调就是这一层

5.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。

5.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发送。

5.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)中。

5.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地址由上级路由器分配。

5.6 WDS
1)WDS模式保持了无线网络名称(SSID)的一致性,在公司园区或者其它公共场所,都需要保持无线网络名称的一致性。
2)Secondary router需要禁止DHCP功能,IP地址由上级路由器分配。
3)
WDS: DA/SA/TA/RA
Normal: DA/SA/BSSID

5.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。

6 debug
6.1 switch port mirror
Read my blog “以太网交换机EtherSwitch”。

6.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,才能够抓到相应的报文。

7 Abbreviations
ADSL: BCM6338
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

本文标签: 路由器 知识