我这个环境是在proxmox内开了一台虚拟机,把usb无线网卡直通给虚拟机,然后在虚拟机内操作的。
网络很简单,我是光猫改了个桥接,然后用路由器拨号上网的,proxmox是接到路由器的LAN口,proxmox内的虚拟机是配置的桥接网络。
简而言之proxmox和虚拟机都在同一个网段内:192.168.0.x。配置的步骤都差不多,关键点其实在于这个usb无线网卡:
1.首先这个网卡要支持AP模式。
2.其次得搞一个在Linux有比较好的驱动支持的。
3.和Hostapd兼容。
我在这里看了半天:https://wireless.wiki.kernel.org/en/users/drivers
发现这些驱动支持的芯片貌似都很老了,现在外面卖的usb无线网卡不一定是用的这些芯片,而且貌似都没有一个功能支持特别全面的芯片。
我最终选择rt2800usb驱动支持的RT3070芯片,特地去某宝买了一个用这个芯片的usb无线网卡,以防翻车。。
把usb无线网卡直通给虚拟机后,看看虚拟机能不能识别到,没有的话你可能需要找合适的驱动自己手动安装:
root@debian:~# lsusb Bus 001 Device 002: ID 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 002: ID 0627:0001 Adomax Technology Co., Ltd Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
可以看到能识别到RT2870/RT3070 Wireless Adapter,接下来看看网卡支不支持AP模式:
apt -y update apt -y install iw lshw iw list
确保下面能列出AP,没有的话就不能搭建Wi-Fi热点:
Supported interface modes: * IBSS * managed * AP * AP/VLAN * monitor * mesh point
接下来看有没有wlan0接口:
lshw -c network
如果有的话那恭喜你什么都不用做,可以说是开箱即用。
有一种像我这种情况:有无线网卡的接口,但名字不是wlan0,是一个以MAC地址命名的接口。
这显然是不正常的,后续我也发现hostapd识别不到这个接口,所以这里我需要编辑grub:
nano /etc/default/grub
加入下面的配置:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
更新grub:
update-grub
这样的话机器重启后会帮我们重命名接口。但是有一个问题,主网卡的接口名字也会被重命名,我的是ens18重启后会变成eth0。
所以在重启之前还需要编辑接口配置文件:
nano /etc/network/interfaces
修改主网卡的接口名字为eth0:
allow-hotplug eth0 iface eth0 inet dhcp
最后重启即可:
reboot
hostapd支持桥接和NAT两种方式配置网络,这里我选择用桥接。现在安装hostapd和桥接需要用到的包:
apt -y install hostapd bridge-utils
还是编辑接口配置文件:
nano /etc/network/interfaces
建一个名为br0的网桥,这个网桥只需要桥到eth0即可:
allow-hotplug eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.0.8 netmask 255.255.255.0 gateway 192.168.0.1 # 我的路由器IP bridge_ports eth0
重启网络:
systemctl restart networking
接下来编辑hostapd的配置文件:
nano /etc/hostapd/hostapd.conf
修改为如下配置:
interface=wlan0 # 无线网卡接口名 bridge=br0 # 网桥名和之前建立的网桥名对应 driver=nl80211 # 驱动 ssid=imlala # Wi-Fi的SSID utf8_ssid=1 # 防止某些设备出现SSID乱码 preamble=1 # 优化网络的设置 hw_mode=g # 模式 ieee80211n=1 # 启用802.11n支持 wmm_enabled=1 #QoS支持 ht_capab=[HT40+][SHORT-GI-40][RX-STBC1] # 这个需要根据你的网卡支持情况自己修改,通过iw list命令查看Capabilities,不需要可以注释掉 country_code=CN # 国家 channel=6 # 信道 macaddr_acl=0 # 允许所有MAC地址连接 ignore_broadcast_ssid=0 # 广播SSID auth_algs=1 # 验证 wpa=2 # 1指设置WPA,2指WPA2,3指两者皆支持 wpa_passphrase=yourpassword # 设置你的Wi-Fi密码 wpa_key_mgmt=WPA-PSK # 认证方式 wpa_pairwise=TKIP # TKIP加密方式 rsn_pairwise=CCMP # AES加密方式
上面这个配置是最基本的使用WPA2-PSK认证的Wi-Fi热点。
由于每个人的硬件和网络环境都不一定完全相同,这个配置只能说比较通用,如果你的设备使用这个配置不能正常工作,你需要参考一下示例配置文件,根据需要自己修改:
https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf
由于Debian10仓库的这个hostapd包谜之操作,你需要先unmask它:
systemctl unmask hostapd
才能像往常一样使用systemd管理:
systemctl enable hostapd systemctl start hostapd
如果Wi-Fi速度慢,可能是由于熵过低,查看值如果少于1000:
cat /proc/sys/kernel/random/entropy_avail
安装并启用haveged来增加熵:
apt -y install haveged systemctl start haveged systemctl enable haveged
最后测试一下可以连接:
WPA2-PSK折腾完了,那么接下来就是EAP-TLS之类的东西了,有空折腾出来了再水文章吧。。。
参考文献:
https://github.com/raspberrypi/documentation/issues/1018
https://wiki.gentoo.org/wiki/Hostapd#802.11b.2Fg.2Fn_with_WPA2-PSK_and_CCMP
https://askubuntu.com/questions/928084/how-to-rename-wlp2s0-to-wlan0-in-ubuntu-17-04
最新评论
5211314
能不能教我 一点不会