Skip to content

Multiple SSIDs Configuration

Ailkers edited this page Dec 22, 2015 · 6 revisions

在搭建好 hostapd 之后,我们仅使用了单个 SSID 来进行网络连接。在这篇 Wiki 里将讲解怎么配置多个 SSID,创建多个虚拟 AP。

在本质上,每个 SSID 都需要一个对应的 BSSID。在一个标准的单 SSID 配置中,无线网卡的 BSSID 是与网卡 Mac 地址完全相同的十六进制值。而在创建多 SSID 时,每个 SSID 都需要自己的 BSSID,所以 hostapd 需要被告知这些 BSSID 应该如何获得,这就是接下来需要配置的内容。

一、实验环境:

  • 操作系统:Ubuntu
  • 内核版本:Ubuntu 12.04
  • 无线网卡型号:TENDA W311MI

二、多 SSID 配置过程:

1. 查看网卡信息:

并不是所有的网卡都支持 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。

2. 修改网卡的 MAC 地址

假设你从 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

3. 配置网卡信息

# 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

4. 配置 hostapd

# 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

5. 配置 DHCP 服务器

# 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

6. 设置无线网卡 IP 地址

# sudo ifconfig wlan0 192.168.0.1 netmask 255.255.255.0

7. 启动 AP

# sudo hostapd -B /etc/hostapd.conf

8. 重启 dnsmasq,否则进行 IP 分发

# sudo killall dnsmasq
# sudo dnsmasq

9. 修改网络设置,打开 Linux 主机网络数据转发功能

# 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

10.此时多 SSID 已经成功建立

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 地址。

三、常见问题:

1. 启动 hostapd 时,提示 beacon 参数设置失败

Failed to set beacon parameters
解决办法:
# sudo rfkill unblock wlan

2. 网卡 wlan0 无法被驱动

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
Clone this wiki locally