WLAN局域网抓包探索

之前记录过在ubuntu用linux_router来搭建无线网络抓包环境[1](ps:这里的无线网络抓包并不是抓802.11空口报文的意思,而是做实验需要获取无线局域网中的所有流量)。大概的网络结构是这样的:

image-20240808153135907

Ubuntu上有两张网卡,一张有线eth0一张无线wlan0,其中eth0连接到上游的路由器,而wlan0用来开启hotspot作为无线AP,给其他的无线设备提供Wi-Fi。这样在Ubuntu上直接使用tcpdump,抓取wlan0这张网卡上的所有流量,实际上就相当于在左侧这个网络的第二层(甚至第一层?)上抓包,那么就能抓取整个无线局域网中各个设备之间以及这些设备和外界互联网之间的流量。

在这种情况下可以抓包,但是却没办法对WLAN中的设备进行更细粒度的管理和操作,比如禁用某个设备和某个外界IP的连接,总之做实验需要这些操作,但是用linux_router做不到。于是决定折腾。以下是弯路:

x86_64主机安装PVE+openwrt虚拟机

被学长安利使用PVE安装openwrt虚拟机,然后在实验室发的电脑上安装pve,结果硬件直通的时候,intel的ax201网卡驱动有问题,pve和openwrt都无法识别pcie设备,于是借(白嫖)来了他已经安装好PVE和openwrt的一个工控主机。但是主机上只有4个RJ45接口,没有无线网卡。于是构思了下面的结构:

image-20240808163053275

可以看出来和第一张图几乎是没有区别的(因为根本就是用上面那张图改的),唯一的区别就是openwrt上没有无线网卡,只能把一个小米路由器改成有线中继模式,然后作为一个无线交换机接到openwrt的eth1上,eth1接口上提供dhcp服务,并且作为局域网的网关。

看上去很完美,但是实际上满足不了前面提到的需求。因为小米的路由器起到了交换机的作用,所以局域网内部设备之间的报文实际上完全没有经过网关,那么在openwrt的eth1上抓包的话,局域网内部的设备之间的流量是完全看不到的,只能抓到广播报文和流出去的报文。第一张图是因为Ubuntu的无线网卡提供了AP,所以可以抓二层的包,但是这张图,只能抓到经过eth1流经openwrt,最终路由到互联网上的报文。

搞了半天还是在有无线网卡的主机上折腾,这样相当于交换机也是可以抓包的(因为交换机就在主机里面),所以接下来试着折腾在树莓派上装个openwrt。

树莓派+openwrt

首先是编译镜像,按照找到的教程[2]上的说法,从某个网站[3]上编译自定义的固件,先输入使用的型号(Raspberry Pi 4B/400/CM4 (64bit)),右边还可以选择openwrt的版本,默认是最新版(23.05.4),然后展开首次运行的脚本,进行一些定制的设置,点击右下角的齿轮,会自动输入模板,然后把相应设置项的注释符号#删掉,并更改自己想改的设置,比如wifi的ssid和口令,还有root的密码,然后点击请求构建。之后下载FACTORY (EXT4)版本。

image-20240809112632822

下载下来的文件解压后获得img镜像文件,使用烧录镜像的软件(我用的树莓派官方的)烧录进启动的设备(SD卡或者U盘),然后插到树莓派上通电启动。然后就会遇到各种问题了,如下:

无法启动

似乎使用u盘作为启动设备会有一点小小的故障,无法启动,查资料应该是有一些bug,感觉是因为固件网站[3]默认大家是通过SD卡启动的,所以镜像文件里的设置是固定的,总之解决方案在[7]中有提到,更改烧录镜像后的启动设备中的一个文件的内容:

在root分区(应该是打错了,实际上是boot分区)有个cmdline.txt,把root=/dev/mmcblk0p2改成root=/dev/sda2就行了

然后继续,通电启动,按照[2]的说法,实际上这时候应该能找到树莓派的wifi了,但是我自己试下来并没有,刚开始时只能通过命令行访问树莓派,ip addr查看发现只有br-lan这个网桥设备有192.168.1.1这个ip,这个应该是openwrt的子网内部的ip,树莓派还有个eth0的以太网网卡,是没有ip的,试了一下插到自己有网络连接的路由器上,发现eth0刚开始还能自动获取ip,后来干脆ip都没有了。

没有ip无法进入web后台

没有wifi,而且有线网卡也不会自动dhcp,通过命令行改eth0的设置也不行,这样就没办法通过openwrt的web后台来配置路由器了。而且通过命令行修改/etc/config/network文件还会发现文件系统是readonly,后来查资料发现可能是某种bug[4],后来按照[5]中的说法应该是意外断电导致的(确实在安装的时候我自己手动断电过好几次,因为实在不知道怎么操作),[5][6]给出的解决方案有:e2fsck -y /dev/[your device]然后reboot重启就可以了,注意[your device]换成你用的启动设备,我的是sda2(和前面解决无法启动的bug时是对应的,也就是启动的操作系统分区)。

总之后来的解决办法是,把树莓派的以太网口和自己的电脑的以太网口连到一起,有些教程说自己电脑设置dhcp就可以,我试了一下好像不行

image-20240809162335323

总之手动设置ip肯定也是可以的,设置自己的电脑的ip为192.168.1.2(应该不和openwrt的192.168.1.1重复就行)

image-20240809162509846

然后通过浏览器访问http://192.168.1.1也就是openwrt的管理后台,在这里更改openwrt的设置。

image-20240809162609248

第一件事,先把防火墙关了(也不是关了,反正配置宽松一点),openwrt默认只能通过lan访问后台进行配置,先把wan口配置的防火墙规则打开,这样就可以直接在子网之外就能通过web后台来配置路由器了。总之全都改成accept,然后save & apply:

image-20240809162912603

添加wan口

进入后台之后,为了方便以后的配置,在导航栏network->interfaces下添加一个网络接口,也就是添加一个wan口。设置wan口为dhcp client。

image-20240809163355654

然后进到network->wireless,把wifi打开一下,下图是已经enable了的情况:

image-20240809164614181

然后把原来的br-lan这个interface改一下(因为这个interface也用了eth0这个物理设备,会出现冲突,改到无线网络接口上,选中wireless设备就行):

image-20240809164743052

然后save apply,执行之后实际上目前这个浏览器的窗口就不会有响应了,因为现在网络拓扑已经变化了,这时候可以把树莓派上的网线接到上游的路由器了。注意这里尽快把网线换到路由器上,忘记在哪看到的资料说多少秒内如果没有按照现有的配置成功完成设置,openwrt会自动reset回上次的设置,save and apply的时候有一个弹窗显示的时间应该就是timeout。由上层的路由器dhcp分配给它一个ip,可以通过这个ip来访问后台:

image-20240809165240360

web后台更改设置无法生效

如果在web后台更改设置,然后点击apply,然后刷新页面发现实际上并没有apply成功,那有可能是因为readonly的文件系统导致的,按照前面说的,运行e2fsck -y /dev/[your device]然后reboot重启就可以了。

总结

执行完上面的过程之后,树莓派已经变成一个合格的无线路由器了,然后就是其他的更改了。

后续

树莓派4B安装openwrt似乎存在2.4G频段的AP无法使用的情况,经过上述的配置之后,可以在5G频段以AP模式工作,但是无法在2.4G频段下以AP模式工作[8],会出现各种各样的报错。

然后根据这个issue中的讨论,这个问题很早之前就存在了,然后inconnu299[9]的回复是有效的,更改后我的/etc/config/wireless内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
config wifi-device 'radio0'
option type 'mac80211'
option path 'platform/soc/fe300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1'
option channel '1'
option band '2g'
option disabled '0'
option short_gi_40 '0'
option htmode 'HT40'
option cell_density '0'
# option legacy_rates '1'

config wifi-iface 'wifinet0'
option device 'radio0'
option mode 'ap'
option ssid 'your_ssid'
option encryption 'psk2'
option key 'your_wifi_password'
option network 'lan'

配置之后重启,然后就可以了。

暂时更到这里。一些可能有用的链接[10][11][12][13]

References


WLAN局域网抓包探索
http://zr4in.github.io/2024/08/08/WLAN局域网抓包探索/
作者
zr4in
发布于
2024年8月8日
许可协议