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