一、前言
自IEEE于2019年年中正式发布新的无线接入标准802.11ax——Wi-Fi6以来,适用于笔记本电脑的M.2无线网卡和台式机的PCI-e无线网卡便大行其道,协同Wi-Fi6无线路由器、Wi-Fi6手机智能终端蓬勃发展,助力Wi-Fi6生态焕新。
翼联EDUP AX1800无线网卡选用瑞昱芯片,致力提供高速而便捷的双频无线网络方案。AX1800无线网卡协商速率为1800Mbps,分别为2.4GHz频段下的574Mbps和5.8GHz频段下的1201Mbps。AX1800无线网卡率先采用USB结构设计,可为主流系统下的新老台式机及笔记本电脑提供即插即用的Wi-Fi6网络体验,该产品具体型号为:EP-AX1696S。笔者作为一名Gnu/Linux的爱好者,有幸拿到了该产品的测试设备。经过在Debian Gnu/Linux下的测试,总结如下:该产品可以很好的兼容Linux操作系统,当普通USB无线网卡使用,同时也可以结合Linux下的hostapd软件组件将该产品作为WI-FI6无线热点来使用,并且可以支持WI-FI6的80M基带带宽在双MCS下的1201mbps速率模式,将该网卡变成临时无线接入点,方便用户组建临时WIFI网络并为其他设备提供80211AX模式的高带宽接入需求。
二、产品简介
该产品拿到手以后,包装朴实而精美,如图:
打开取出后,大小类似传统U盘,背面有明显的WI-FI6产品标记:
同时可以看到,该设备USB接口采用了USB3的颜色标记,USB详细图片如下:
设备正面天线可以折叠和展开,非常人性化设计,如图为天线收起及展开状态:
同时随产品附带有驱动程序光盘一张。
三、测试系统环境
OS: Debian Gnu/Linux 11.1Kernel: Linux localhost.localdomain 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linuxgcc: gcc (Debian 10.2.1-6) 10.2.1 20210110make: GNU Make 4.3四、网卡驱动安装过程
4.1、系统组件安装
因为该网卡型号比较新,插入测试主机的USB接口后并不能直接使用,系统WIFI设置中并看不到该网卡,但通过执行命令lsusb系统有如下返回信息:
Bus 003 Device 002: ID 0bda:885c Realtek Semiconductor Corp. 802.11ax WLAN Adapter
说明内核已经正确地识别出该设备。不过缺少驱动程序来使设备正常工作。经过查看该设备附带的驱动程序光盘惊奇的发现该设备竟然包含了Linux系统驱动文件。为了能正确的编译安装该驱动程序,用户需要在Debian Gnu/Linux下安装一下软件组件,通过执行以下命令即可完成系统需要的编译环境组件安装:
[root@localhost ~]# apt-get install linux-headers-5.10.0-9-amd64 linux-support-5.10.0-9 linux-perf-5.10 linux-config-5.10 linux-compiler-gcc-10-x86 gcc-10 make libssl-dev libnl-3-200 libnl-3-dev libnl-genl-3-200 libnl-genl-3-dev nftables haveged以上组件包含了手工编译hostapd软件AP组件需要的依赖系统环境组件。笔者在这里一并进行描述,避免读者朋友在下一阶段安装hostapd编译过程中出现错误提示,耽误不必要的时间。之所以需要安装以上组件,是因为Linux系统在通过源码编译驱动程序模块的过程中需要用到Linux内核头文件中的源代码以及其它支持库文件源代码来生成最后的内核驱动“.ko”驱动模块文件使无线网卡正常进行工作。
4.2、EP-AX1696S驱动程序安装
如果系统组件安装完成,笔者认为这一步相对较为简单,首先是将光盘上的Linux驱动目录复制到Linux主机目录中,为了演示方便,笔者将该文件夹复制在笔者自己测试系统的用户目录中,笔者建议需要避免将驱动程序文件夹复制到绝对路径中存在中文或者特殊文件名的目录中,否则可能会遇到意想不到的编译错误或者问题,排查起来也异常复杂麻烦,耽误时间。将驱动程序复制到系统后可以直接找到RTL8832AU_WiFi_linux_v1.15.0.1-0-g/WIFI/目录,该目录下RTL8852AU_WiFi_linux_v1.15.0.1-0-g487ee886.20210714.tar.gz文件既是驱动程序压缩包,用户需要使用命令
tar -zxvf RTL8852AU_WiFi_linux_v1.15.0.1-0-g487ee886.20210714.tar.gz即可在当前目录下生成驱动程序安装目录RTL8852AU_WiFi_linux_v1.15.0.1-0-g487ee886.20210714,进入该目录可以看到install.sh文件,该文件既为驱动程序自动编译安装脚本文件,用户可以执行命令
chmod +x install.sh && ./install.sh直接进行设备驱动程序的自动化安装,最后系统回显如下信息:
make[1]: 离开目录“/usr/src/linux-headers-5.10.0-9-amd64”#cp Module.symvers .symvers.8852au##################################################Compile make driver ok!!##################################################Authentication requested [root] for install driver:install -p -m 644 8852au.ko /lib/modules/5.10.0-9-amd64/kernel/drivers/net/wireless//sbin/depmod -a 5.10.0-9-amd64Authentication requested [root] for remove driver:Authentication requested [root] for insert driver:##################################################The Setup Script is completed !##################################################恭喜你!!!系统已经成功编译生成了该无线网卡的驱动程序,并将它复制到了系统文件/lib/modules/5.10.0-9-amd64/kernel/drivers/net/wireless/中。用户也可以执行命令lsmod | grep 8852进一步确认驱动模块是否已经正常加载,如果系统出现如下回显信息:
8852au 14417920 0cfg80211 970752 4 iwldvm,8852au,iwlwifi,mac80211usbcore 323584 9 xhci_hcd,ehci_pci,8852au,usbhid,usb_storage,uvcvideo,ehci_hcd,btusb,xhci_pci则说明Linux内核已经加载了EP-AX1696S无线网卡驱动模块,此时用户插入该网卡系统将为该网卡创建网络设备名并准备连网,如以下图示,系统WIFI设置中已经可以看到网卡名为Realtek802.11ax的无线设备。
至此,用户就可以通过该无线网卡设备正常接入网络,接入AP可以从WI-FI6无线热点一直向下兼容,具有很好的兼容和适配性。当然了,最重要的还是在接入点为WI-FI6无线AP时,高带宽带来的极速体验,如下图就是笔者使用该网卡连接华为-airPRO2时的带宽显示:
五、hostapd无线AP创建过程
为了能让Linux系统使用hostapd组件提供软件AP模式的接入访问,同时支持802.11AX无线协议模式,我们需要先进行基础hostapd组件的安装,这样系统会自动创建该软件组件的基础配置文件和systemd守护进程配置文件,然后我们通过手工编译方式编译最新的hostapd2.9源码并开启802.11AX无线支持模式。通过一下配置即可完成相关hostapd软件组件的安装和配置
5.1、安装hostapd软件组件
用户在Linux系统中只需要执行命令
apt-get install hostapd系统会自动进行hostapd软件组件及相关依赖关系软件组件的安装,同时会在系统中创建默认配置文件以及systemd守护进程脚本,该脚本位于/lib/systemd/system/目录中。等待手工编译安装完成hostapd2.9后用户需要对该文件进行修改,才能开启802.11AX无线协议支持模式。
5.2、手工编译安装hostapd软件组件
用户可以前往hostapd网站,找到对应的下载文件直接进行下载之后进行解压,系统会在当前目录生成hostapd-2.9目录,编译前用户需要进入hostapd目录中并执行如下命令cp defconfig .config创建编译文件,并使用命令vi .config进行配置文件编译,依次将“CONFIG_LIBNL32=y” “CONFIG_IEEE80211N=y” “CONFIG_IEEE80211AC=y” "CONFIG_IEEE80211AX=y"选项前的“#”注释删除,以使hostapd软件组件支持802.11N到802.11AX无线协议。之后用户在当前目录下执行命令make && make install系统将开始编译并在随后将编译成功的软件组件“hostad” "hostapd_cli"自动复制到/usr/local/bin目录中,用户可以通过执行/usr/local/bin/hostapd -v命令,如果系统回显如下信息
hostapd v2.9User space daemon for IEEE 802.11 AP management,IEEE 802.1X/WPA/WPA2/EAP/RADIUS AuthenticatorCopyright (c) 2002-2019, Jouni Malinen <j@w1.fi> and contributors说明hostapd2.9手工编译安装正常,后续可以配置hostapd配置文件启用hostapd来完成无线热点创建。
5.3、配置hostapd
要启用hostapd服务,用户可以直接编辑“/etc/hostapd/hostapd.conf”文件,并确保配置文件中包含如下行:
interface=wlan1 ssid=MyHotApada driver=nl80211 country_code=US ieee80211d=1 ieee80211h=1 ieee80211n=1 ieee80211ac=1 hw_mode=a channel=36 wmm_enabled=1 ht_capab=[HT40+] vht_capab=[SHORT-GI-80][HTC-VHT][TX-STBC-2BY1][RXLDPC][MAX-MPDU-7991][MAX-A-MPDU-LEN-EXP2] vht_oper_chwidth=1 vht_oper_centr_freq_seg0_idx=42 ieee80211ax=1 he_su_beamformer=1 he_su_beamformee=1 he_mu_beamformer=1 he_bss_color=1 he_default_pe_duration=8 he_twt_required=1 he_rts_threshold=2 he_oper_chwidth=1 he_oper_centr_freq_seg0_idx=42 wpa=2 wpa_passphrase=test123456789 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=1 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP上面列出的配置基本上是必须的,其中:
ssid:别人所看到的我们这个无线接入点的名称;
hw_mode:指定802.11协议,包括 a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g,因为802.11AC实际是使用的5G频率,所以需要将此项选择为 ‘a’;
channel、ieee80211d=1、ieee80211h=1、 country_code=US:设定无线频道, 由于5G频率在各国分配使用上的预先定义,因此我们在自建802.11AX无线AP时,基本只能按照如上方法设置,唯一可以调整的是channel,该参数在实际测试中可以使用36、42、44、149、151、155等值。其实也就是无线通道号。
interface:接入点设备名称,如果该设备称为wlan1,填写wlan1即可。
driver:设定无线驱动,我这里是nl80211。
macaddr_acl:可选,指定MAC地址过滤规则,0表示除非在禁止列表否则允许,1表示除非在允许列表否则禁止,2表示使用外部RADIUS服务器。
wmm_enabled=1:启用VMM
ht_capab=[HT40+]:信道能力设置,在HT40+模式下可以使用36、44、42、52等通道,用户可以查看具体的配置文档进行更细致的设置
vht_oper_chwidth=1:设置网卡频率使用模式为VHT,也就是802.11AC模式
vht_oper_centr_freq_seg0_idx=42:设置vht中心频率
he_oper_chwidth=1:设置设置网卡频率使用模式为VHT,也就是802.11AX模式
he开头的其它参数:均为802.11AX功能相关参数设置
wpa:指定WPA类型,这是一个位域值(bit fields),bit 0表示启用WPA,bit 1表示启用WPA2。在我的配置中,置成2 可以正常连接;
wpa_passphrase:WPA/WPA2加密需要指定密钥,这个选项就是配置WPA/WPA2的密钥。注意wpa_passphrase要求8~63个字符。另外还可以通过配置wpa_psk来制定密钥,不过要设置一个256位的16进制密钥,不适合我们的需求;
wpa_pairwise/rsn_pairwise:如果启用了WPA,需要指定wpa_pairwise;如果启用了WPA2,需要指定rsn_pairwise,或者采用wpa_pairwise的设定。都可以设定成TKIP、CCMP或者两者都有,具体含义我也没仔细弄清楚。以上配置hostapd主参数文件结束后,用户可以使用命令“vi /etc/default/crda”编辑该文件,并将“REGDOMAIN”的值设置为“US”,这样用户在建立无线AP时就可以方便的将“channel”的值设置为36、40、44、48、149、151、155、161等不同的无线信道,避免建立多个AP时的信道冲突。该配置文件如果使用“#”号注释掉所有 “he”开头的参数行,启用hostapd无线AP后,EP-AX1696S无线网卡将工作在802.11AC的867mbps速率模式下,可以很好的向下兼容;开启这些参数后,网卡将工作在802.11AX的1201mbps速率模式下,1201mbps工作状态截图如下:
5.4、systemd启动脚本修改
为了能实现通过systemd脚本自动创建无线AP功能,我们可以修改“/lib/systemd/system/hostapd.service”来实现该功能,修改后的hostapd.service文件内容如下:
[Unit]Description=Advanced IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP AuthenticatorAfter=network.target[Service]Type=forkingPIDFile=/run/hostapd.pidRestart=on-failureRestartSec=2ExecStartPre=/usr/bin/nmcli device set wlan1 managed noExecStartPre=/usr/bin/nmcli device set wlan1 autoconnect noExecStartPre=/usr/sbin/rfkill unblock allExecStartPre=/sbin/ip addr add 192.168.10.1/24 dev wlan1Environment=DAEMON_CONF=/etc/hostapd/hostapd.confEnvironmentFile=-/etc/default/hostapdExecStart=/usr/local/bin/hostapd -B -P /run/hostapd.pid -B $DAEMON_OPTS ${DAEMON_CONF}ExecStopPost=/sbin/ip addr del 192.168.10.1/24 dev wlan1ExecStopPost=/usr/bin/nmcli device set wlan1 managed true[Install]WantedBy=multi-user.target通过以上脚本,我们可以在hostapd服务组件启动前将网卡设置为非NetworkManager服务托管设备,并在该设备上自动绑定需要的IP地址。在hostapd服务组件停止后,清除掉IP地址并将网卡重新托管给NetworkManager服务,从而恢复成普通网卡进行联网设置。该配置文件修改后,用户需要执行命令“systemctl daemon-reload” 重新加载 systemd 守护进程的配置。之后就可以通过命令“systemctl start hostapd.service”启动无线AP服务,并通过客户端连接进行测试。如果能够正常连上AP,那说明配置成功。用户就可以通过后面的nftatbles防火墙配置设置进行AP代理上网了。
5.5、nftables配置
使用命令“vi /etc/nftables.conf”编辑防火墙配置文件,内容如下:
#!/usr/sbin/nft -fflush rulesettable ip filter { chain INPUT { type filter hook input priority 0; policy drop; iif lo accept ct state established,related counter accept#### icmp type echo-request ct state new accept udp dport { 53,67,68 } ct state new limit rate 1/second burst 1 packets accept ip saddr 192.168.10.0/24 tcp dport 53 ct state new limit rate 1/second burst 1 packets accept counter drop} chain FORWARD { type filter hook forward priority 0; policy accept; } chain OUTPUT { type filter hook output priority 0; policy accept; }}table ip6 filter { chain INPUT { type filter hook input priority 0; policy drop; iif lo accept ct state established,related counter accept } chain FORWARD { type filter hook forward priority 0; policy accept; } chain OUTPUT { type filter hook output priority 0; policy accept; }}table bridge filter { chain INPUT { type filter hook input priority -200; policy accept; } chain FORWARD { type filter hook forward priority -200; policy accept; } chain OUTPUT { type filter hook output priority -200; policy accept; }}table ip nat { chain PREROUTING { type nat hook prerouting priority -100; policy accept; } chain INPUT { type nat hook input priority 100; policy accept; } chain POSTROUTING { type nat hook postrouting priority 100; policy accept; oifname "eth0" ip saddr 192.168.10.0/24 counter masquerade } chain OUTPUT { type nat hook output priority -100; policy accept; }}其中“oifname ‘eth0’ ip saddr 192.168.10.0/24 counter masquerade”和“ip saddr 192.168.10.0/24 tcp dport 53 ct state new limit rate 1/second burst 1 packets accept”为AP流量NAT规则,用户需要针对自己的出口网络接口和客户端IP地址进行自定义修改,本例中网络上行出口为“eth0”,客户端IP地址范围为“192.168.10.0/24”。之后用户需要使用命令“vi /etc/sysctl.conf”,添加“net.ipv4.ip_forward=1”打开内核包转发功能,同时使用命令“systemctl enable nftables.service”启用防火墙。当让有些用户可能会使用iptables作为数据转发NAT软件组件,相关配置用户可自行查阅相关资料完成数据NAT转发配置。
到这里用户设置无线AP的主要步骤就设置完成了,当然为了给接入无线AP的客户端自动分配IP地址和DNS服务器,用户可以使用Linux下常用的dnsmasq软件组件或者dhcpd等其它软件组件设置相应的DHCP服务来为接入设备提供动态地址分配服务,网上相关文章非常普及,笔者在这里就不再赘述了,广大读者可以自行进行相关资料的查找。完成后笔者使用手机连接自己启用的无线AP进行了测试,从图中可以看到连接热点带宽已经提高到1201mbps,同时笔者进行了网速测试,因为运营商提供的是光猫接入,下载速率已经可以到371mbps/s,下载速率可以到44.5mbps/s,基本达到了运营商宣称的最高速率了。如图:
六、总结
EP-AX1696S作为全球首批Wi-Fi6终端无线网卡设备,在Debian Gnu/Linux中既能很好的作为无线网卡通过WI-FI6无线AP接入上网,同时又能很好的结合hostapd软件组件快速的将该网卡转换为无线AP,供其它终端设备接入网络使用,更方便了用户出差或者移动办公时的用户侧各种终端设备接入,便于用户快速解决网络接入问题。因此该无线网卡基本上算是可以工作在windows及Linux下,具有很好的通用性和兼容性设备。
(本文由翼联EDUP合作达人狂奔的蜗牛评测供稿,翼联EDUP享有本文发布之独家授权,著作权归属狂奔的蜗牛。)