-
Notifications
You must be signed in to change notification settings - Fork 31
Multiple SSIDs Configuration
在搭建好 hostapd 之后,我们仅使用了单个 SSID 来进行网络连接。在这篇 Wiki 里将讲解怎么配置多个 SSID,创建多个虚拟 AP。
在本质上,每个 SSID 都需要一个对应的 BSSID。在一个标准的单 SSID 配置中,无线网卡的 BSSID 是与网卡 Mac 地址完全相同的十六进制值。而在创建多 SSID 时,每个 SSID 都需要自己的 BSSID,所以 hostapd 需要被告知这些 BSSID 应该如何获得,这就是接下来需要配置的内容。
- 操作系统:Ubuntu
- 内核版本:Ubuntu 12.04
- 无线网卡型号:TENDA W311MI
并不是所有的网卡都支持 hostapd,支持的那些网卡中,也只有一部分支持多 SSID 的配置。
首先查看网卡信息,以便及时发现你的网卡支持哪些功能:
# iw list
...一些信息输出
valid interface combinations:
{ AP, mesh point } <= 8,total <= 8, #channels <= 1
注意:输入iw list
命令,而不是iwlist
。
在输出的信息中,请找到valid interface combinations
,在包含 AP 的那项中,对应值必须是大于 1 的数字。
例如在我的测试环境中,{ AP, mesh point } <= 8
即表示基于 Mesh 网络,无线网卡在 AP 模式下可以提供最多 8 个虚拟 SSID。
假设你从 iw 的列表中获得了确切的结果,第一个步骤是改变无线网卡的 MAC 地址。
为了确保新产生的地址不与其他设备冲突,修改的 MAC 必须以 02 开头,以 0 结束。
先查看网卡原本的 MAC 地址:
# ifconfig wlan0
wlan0 Link encap:以太网 硬件地址 c8:3a:35:cc:a5:98
假设 wlan0 是你的无线网卡,那么 MAC 应该被修改成如下所示:
c8:3a:35:cc:a5:98<- 改为 90,避免冲突
^
|
改为 02, 代表“本地管理”
为了让改动生效,需要重新启动无线网卡:
# sudo ifconfig wlan0 down
# sudo ifconfig wlan0 hw ether 02:3a:35:cc:a5:90
# sudo ifconfig wlan0 up
更改网卡的 MAC 地址后,网卡有可能无法启动,报如下错误:
SIOCSIFFLAGS: Device or resource busy
# sudo nmcli nm wifi off
# sudo rfkill unblock wlan
# sudo vim /etc/network/interfaces
不同虚拟网卡,即 BSS 应该有不同网关地址:
auto wlan0
iface wlan0 inet static
address 192.168.0.1
netmask 255.255.255.0
auto wlan0_0
iface wlan0_0 inet static
address 192.168.1.1
netmask 255.255.255.0
auto wlan0_1
iface wlan0_1 inet static
address 192.168.2.1
netmask 255.255.255.0
# sudo vim /etc/hostapd.conf
配置多个 SSID 如下所示:
interface=wlan0
bssid=02:3a:35:cc:a5:90 # 修改过的 wlan0 虚拟 MAC 地址
driver=nl80211
ssid=wifi0
hw_mode=g
channel=1
dtim_period=1
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
#ieee80211n=0
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
bss=wlan0_0
ssid=wifi1
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
bss=wlan0_1
ssid=wifi2
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
# sudo vim /etc/dnsmasq.conf
对每个虚拟网卡添加新的网段、网关以及 DNS 地址。
interface=wlan0
bind-interfaces
except-interface=lo
dhcp-range=192.168.0.100,192.168.0.200,6h
dhcp-option=3,192.168.0.1
dhcp-option=6,219.219.223.10
interface=wlan0_0
bind-interfaces
except-interface=lo
dhcp-range=192.168.1.100,192.168.1.200,6h
dhcp-option=3,192.168.1.1
dhcp-option=6,219.219.223.10
interface=wlan0_1
bind-interfaces
except-interface=lo
dhcp-range=192.168.2.100,192.168.2.200,6h
dhcp-option=3,192.168.2.1
dhcp-option=6,219.219.223.10
# sudo ifconfig wlan0 192.168.0.1 netmask 255.255.255.0
# sudo hostapd -B /etc/hostapd.conf
# sudo killall dnsmasq
# sudo dnsmasq
# sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# sudo echo 1 > /proc/sys/net/ipv4/ip_forward
# sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Using interface wlan0 with hwaddr 02:3a:35:cc:a5:90 and ssid "wifi0"
Using interface wlan0_0 with hwaddr 02:3a:35:cc:a5:91 and ssid "wifi1"
Using interface wlan0_1 with hwaddr 02:3a:35:cc:a5:92 and ssid "wifi2"
三个虚拟 AP 都可以被手机搜索到,并成功连接互联网。 需要注意的是:
- 虚拟网卡的 MAC 地址末位会自动增一。
- 连接到不同 SSID 会被自动分配不同网段的 IP 地址。
Failed to set beacon parameters
# sudo rfkill unblock wlan
wlan0: Could not connect to kernel driver
Failed to set interface wlan0 into AP mode
有人出现了配置多 SSID 后,新虚拟出来的 SSID 可以连接上网,但是 wlan0 的 SSID 根本无法被设备搜索到的情况。
# sudo vim /etc/NetworkManager/NetworkManager.conf
其实只需要将 netmanager 网络管理器中 wlan0 以及虚拟出来的网卡设置为"设备未托管"状态,之后多 SSID 就可以正常使用了。
# 在[ifupdown]字段之后将 managed=true 更改为 managed=false
managed=false
# 在[keyfile]字段之后添加内容,其中"02:3a:35:cc:a5:90"为 wlan0 的虚拟 MAC 地址
unmanaged-devices=mac:02:3a:35:cc:a5:90
unmanaged-devices=mac:02:3a:35:cc:a5:91
unmanaged-devices=mac:02:3a:35:cc:a5:92