虚拟WiFi / 802.11接口类似于Linux上的VETH

时间:2015-10-12 23:41:25

标签: linux virtual wireless

我正在寻找一种在单个设备上设置纯虚拟(即无实际信号)802.11网络的方法 - 用于测试目的,使我的功能类似于此:

  • 创建多个接入点接口(例如ap0ap1 ..)
    • 设置基本参数(ssid ...)
    • 在每个上面设置dhcp服务器,
    • 使用shell命令(iw?)
    • 管理信号强度
    • 允许加密管理(更改密码,加密方法等)
  • 创建单一访问点客户端界面(wifi0),即可
    • 查看具体的接入点(或所有接入点)
    • 借助NetworkManager
    • 等工具,允许我连接到特定界面
实际上,它是非常基本的,并且看到veth驱动程序如何与ip link一起工作给了我很多希望。

是否可以使用iw工具?如果是的话 - 我该怎么做?

如果不是,如果我需要实现这个,我通常会如何追究此事?通过创建一个提供数据的假wpa_supplicant驱动程序?

我很欣赏有关此事的任何提示和指示。

2 个答案:

答案 0 :(得分:5)

我试图遵循St​​efano Cappa发布的提示,但没有运气。我的界面一直报告No valid interface combinations,这表明我应该被卡住(但不是)。

虚拟WIFI可借助

提出
  • mac80211_hwsim内核模块
    • 模块可配置radios参数,表示虚拟实体卡的数量(phy#)。
    • 每个phy#都可以模拟独立的无线电卡。
    • 每张phy#卡都会获得一个关联的lan界面(wlan#)。
    • 模块还带有hwsim#接口,可用于窥探所有无线电卡之间发生的伪wifi 流量。
  • hostapd能够将任何无线电(包括模拟无线电)转换为接入点的工具,
  • wpa_supplicant工具,可用于扫描接入点的区域或连接到这些接入点。

我最终想出了一个解决方案(花了我一段时间,因为我试图通过Android实现这一点)只依赖于这三件事。这些工具将使用nl80211驱动程序与伪硬件进行通信。

我简单的配置文件如下所示:

hostapd.conf (请注意,此文件的设置多于所需设置,但我在此处发布了所有设置)

interface=wlan1
driver=nl80211
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface_group=0
ssid=Vamonos Pest
country_code=US
hw_mode=g
channel=1
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
eapol_key_index_workaround=0
eap_server=0
own_ip_addr=127.0.0.1

<强>的wpa_supplicant.conf

network={
    ssid="Vamonos Pest"
    key_mgmt=NONE
    priority=16
}

最后推出了两个:

hostapd -d hostapd.conf 
wpa_supplicant -Dnl80211 -iwlan0 -d -csupplicant.conf

这就是诀窍。 wpa_supplicant能够扫描网络区域并查找所有虚拟wifi接入点。如果hwsim模块使用更多的两个无线电,则可以创建更多。从这里开始,其余的很简单 - 在wlan1上启动dhcp服务器,在wlan0上启动dhcp客户端,然后就完成了。

答案 1 :(得分:0)

我无法回答你所有的问题,但我可以给你一个提示。

您可以使用iw创建虚拟网络接口,但要小心,因为您的wifi卡的驱动程序可能会被制造商限制。

尝试检查&#34;有效的界面组合&#34;使用类似的命令(选择正确的&#34; phy&#34;之前):

iw phy phy0 info

并检查最大接口数及其组合。

我不确定,但可能你可以直接用wpa_supplicant创建一个虚拟界面(就像这个软件直接用于wi-fi)。 如果您需要有关wpa_supplicant的帮助,我建议您使用此邮件列表:http://lists.shmoo.com/pipermail/hostap/

还有一个小例子。我使用了Android和Wpa_supplicant的Nexus 5。我为Android编译了iw,结果是:

> iw phy phy0 info
Supported interface modes:
              * IBSS
              * managed
              * AP
              * P2P-client
              * P2P-GO
     software interface modes (can always be added):
     valid interface combinations:
              * #{ managed } <= 2, #{ P2P-client, P2P-GO } <= 2, #{ IBSS } <= 1,
                total <= 3, #channels <= 2


 >iw dev
     phy#0
     Interface p2p1
             ifindex 24
             type managed
     Interface wlan0
             ifindex 21
             type managed
     Interface p2p0
             ifindex 20
             type managed

显然,如果您使用的是带有Linux的PC,接口数量可能更高。这是一款司机有限的智能手机。

最后,要小心,因为,就像wpa_supplicant的创建者向我解释的那样,如果你想要一个完全支持802.11的veth,你应该选择正确的类型,例如,使用驱动程序nl80211而不是macvtap和ip link。