Post

USB WIFI 网卡配置

USB WIFI 网卡配置

USB WIFI 网卡配置

配置过程很艰难,挑选有用的作为记录。特别姜某人的全程帮助。

USB WIFI网卡:绿联“免驱”网卡 AC650,其中的网卡型号为RTL8811cu。

在配置USB WIFI网卡之前,重新回到《OpenWRT配置》中留下的问题,我们需要完善之前的设置。

首先,目前ubuntu虽然在设置中有网卡了,但是仍然无法上网。在操作openwrt的时候发现,网卡只有一个lan,检查pve中虽然已经将vmbr0添加到openwrt的硬件中,但是在openwrt的终端输入ifconfig,发现并没有这张网卡。修改两张网卡的模型为intel E1000,再次输入ifconfig,此时两张网卡均出现在了openwrt中。之后,经过测试,可以将网卡调整回默认状态,避免后续添加ubs wifi网卡的时候出现问题。

添加eth1端口为wan口,此时openwrt可以ping通www.baidu.com 。 给wan口添加防火墙,启用wan口,此时虚拟机可以上网了。 (短短几行字,折腾了一个晚上。)

pve设置vmbr1的IP地址是192.168.58.1/24,网关为192.168.58.1,vmbr0设置192.168.59.1/24,方便调试的时候从交换机上别的设备通过lan访问到pve管理页面,同时保证整机上网。

我们的目标是:让USB WIFI作为热点,我们输入密码接入,即可管理整个PVE,同时可以上网。因此,有两种办法可以实现。其一,usb wifi直通给openwrt,让openwrt操作usb wifi;其二,pve操作usbwifi作为热点,将其变成vmbrx通入openwrt中,让openwrt管理lan。

一:

在pve中的openwrt里面选择Realtec的usb设备直通给openwrt,在openwrt的software中,先update,在进行检索,发现有现成的RTL8811cu固件可以使用,下载安装后发现,并没有什么用,使用ip a 查看,发现压根没有这张网卡,考虑到这张网卡是通过usb直通进来的,我们使用lsusb进行查看,发现Realtec的设备被识别成了disk。这是因为usb网卡插到windows里面,先是disk模式,把里面的驱动装完了自动modeswitch成网络设备,但是在这里usbwifi网卡没法安装驱动也就就没法自动modeswitch。

使用opkg下载usb-modeswitch,再次运行lsusb查看usbID:Bus 001 Device 013: ID 0bda:1a2b Realtek Semiconductor Corp.

所以,运行usb_modeswitch -KW -v 0bda -p 1a2b 没用

之后参考[OpenWrt Wiki] USB mode switch修改/etc/usb-mode.json依然没有用。

经过思考,猜测可能是因为usb以disk的形式被直通进来,无法修改,因此回到pve的管理界面,先取消usbwifi直通。在pve的shell中lsusb,发现usb并没有运行在网卡模式,因此,我们仍然需要修改它的工作模式。apt update && apt install usb-modeswitch lsusb记录usbID,usb_modeswitch -KW -v 0bda -p ID

最后,插拔一下USB wifi,用lsusb验证,发现usbwifi已经工作在了WIFI模式,再次直通给openwrt,在网络中,多出了一个无线选项卡,说明配置成功。

二:

受到186-软路由也玩无线接入 proxmox添加无线网卡当热点 - Google 文档的启发,最终决定还是选择方法二。

在前文已经解决usb wifi的被识别成硬盘的情况之后,在安装dkms之后

1
2
3
git clone https://github.com/brektrou/rtl8821CU.git
cd rtl8821CU/
sudo ./dkms-install.sh

报错,查看原因是缺少内核头,apt install pve-headers-6.8.12-9-pve,报错,说找不到,此时想到换源解决问题。

输入 nano /etc/apt/sources.list 命令,编辑修改 /etc/apt/sources.list 软件包仓库位置的配置文件

将系统 /etc/apt/sources.list 软件包仓库位置的原始默认配置文件修改为清华 debian的源,是否使用非自由软件源和强制安全更新使用镜像,应该与原来的保持一致。

apt update更新源,再次运行apt install pve-headers-6.8.12-9-pve,安装成功后再次./dkms-install.sh,没用,还是报错。

换一种编译方式,在rtl8821CU的目录下make,发现仍然有错误,查阅文档发现,该驱动对应的内核版本为6.6一下,无法用于6.8,在搜查只有也没有发现能用于的,因此选择降低内核版本。

先移除之前造成的垃圾,不然没法安装老的内核,

sudo dkms remove rtl8821CU/5.4.1 --all

安装内核

apt install pve-kernel-6.2 pve-headers-6.2

查看存在的内核

proxmox-boot-tool kernal list

使6.2的内核变成最优先的

proxmox-boot-tool kernal pin 6.2.16-20-pve

再次在rtl8821CU的目录下make,随后make install,在/etc/modprobe.d/blacklist.conf中添加blacklist rtw88_8821cu,屏蔽原始驱动,完成驱动安装。

使用ip link show 看网卡驱动是否加载,可以看到USB网卡后面state down,并且使用ip link set wlx6c1ff73c1a75 up 也不行,在pve管理界面也看不到这张网卡,但是不妨碍后面的东西,只要保证iwconfig能有东西就行。

网卡成功驱动的话,然后安装无线需要的安装包

apt-get install iw net-tools wireless-tools

首先查看一下本国信道 iw reg set CN

使用iw list查看是否支持AP模式 iw list | grep -A 10 'Supported interface modes'

是否支持多SSID iw list | grep -A 2 'valid interface combinations'

支持AP模式,我们安装热点包 apt-get install hostapd

编辑 nano /etc/default/hostapd 添加下面语句

DAEMON_CONF="/etc/hostapd/hostapd.conf"

编辑热点文件

nano /etc/hostapd/hostapd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
### Wireless network name ###
interface=wlp9s0
### Set your bridge name ###
bridge=vmbr1 # 这里我们是vmbr1
driver=nl80211

### (IN == INDIA, UK == United Kingdom, US == United Stats and so on ) ###
country_code=US
ssid=mywifi
hw_mode=g
channel=6

wpa=2
# WPA2 only
wpa_passphrase=12345678
## Key management algorithms ##
wpa_key_mgmt=WPA-PSK
## Set cipher suites (encryption algorithms) ##
## TKIP = Temporal Key Integrity Protocol
## CCMP = AES in Counter mode with CBC-MAC
wpa_pairwise=TKIP
rsn_pairwise=CCMP
## Shared Key Authentication ##
auth_algs=1
## Accept all MAC address ###
macaddr_acl=0

使用该命令开启热点 hostapd -d /etc/hostapd/hostapd.conf

以后只要每次开机运行这条指令即可


自动执行 hostapd 命令的解决方案

你希望 PVE 开机 3 秒后自动执行 hostapd -d /etc/hostapd/hostapd.conf 命令。最可靠和推荐的方法是使用 Systemd 服务。Systemd 是 Linux 系统中用于管理系统启动和服务的主要工具。

之前我提到了一个延迟启动 hostapd 的服务,这正好符合你的需求。我们将使用它,并确保它在网络服务启动后运行。


详细步骤

1. 创建 Systemd 服务文件

首先,创建一个 Systemd 服务文件来定义如何启动 hostapd

运行以下命令创建并编辑服务文件:

1
sudo nano /etc/systemd/system/hostapd-delayed.service

将以下内容粘贴到文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Hostapd Delayed Start for PVE WiFi AP
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStartPre=/bin/sleep 3  
ExecStart=/usr/sbin/hostapd -B /etc/hostapd/hostapd.conf
ExecStop=/usr/bin/killall hostapd
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
  • Description: 服务的简短描述。
  • After=network-online.target: 确保在网络服务完全启动并可用后才尝试启动此服务。这对于需要网络连接的服务非常重要。
  • Wants=network-online.target: 表示希望在 network-online.target 之后启动,但不是严格依赖。
  • ExecStartPre=/bin/sleep 3: 这是关键,它会在 hostapd 真正启动前强制系统等待 3 秒。你可以根据需要调整这个时间。
  • ExecStart=/usr/sbin/hostapd -B /etc/hostapd/hostapd.conf: 这是实际执行 hostapd 命令的行。
    • -B 参数会让 hostapd 在后台运行,这样服务就不会一直占用终端。
  • ExecStop=/usr/bin/killall hostapd: 定义了如何停止 hostapd 服务。
  • Restart=on-failure: 如果 hostapd 因某种原因失败退出,Systemd 会尝试重启它。
  • RestartSec=5: 如果服务失败,等待 5 秒后尝试重启。
  • WantedBy=multi-user.target: 这确保了服务在多用户模式下(即正常启动后)会被启动。

保存并关闭文件 (Ctrl+X, 然后按 Y 键确认,最后按 Enter 键)。

2. 禁用现有的 hostapd 服务(如果存在)

如果你之前已经通过 apt install hostapd 安装了 hostapd,它可能会自带一个默认的 Systemd 服务。为了避免冲突,并确保我们的延迟服务生效,最好禁用它:

1
sudo systemctl disable hostapd

3. 重新加载 Systemd 配置

在创建或修改了 Systemd 服务文件后,你需要让 Systemd 重新加载其配置,以便识别新服务:

1
sudo systemctl daemon-reload

4. 启用并启动你的新服务

现在,启用你的 hostapd-delayed.service,使其在每次系统启动时自动运行:

1
sudo systemctl enable hostapd-delayed.service

然后,你可以立即启动它来测试:

1
sudo systemctl start hostapd-delayed.service

5. 验证服务状态

你可以检查服务的运行状态来确认它是否已成功启动:

1
sudo systemctl status hostapd-delayed.service

如果一切正常,你会看到服务处于 “active (running)” 状态。


最终验证

完成上述步骤后,重启你的 PVE 服务器。在启动完成后,等待几秒钟,然后检查你的无线设备是否能看到热点名称 66666666

如果重启后仍然无法正常工作,你可以再次检查 hostapd-delayed.service 的状态,并查看其日志以获取更多线索:

1
2
sudo systemctl status hostapd-delayed.service
sudo journalctl -u hostapd-delayed.service
This post is licensed under CC BY 4.0 by the author.

© Houdazui. Some rights reserved.

Using the Chirpy theme for Jekyll.