具有单个 NIC 的 wifi AP

具有单个 NIC 的 wifi AP

我试图将我的 PC 无线网卡用作 AP,同时通过同一张卡连接到我的 wifi 网络,但遇到了问题。我试图实现的功能相当于 Windows 的虚拟 Wi-fi 技术。从原理上讲,这非常简单:

service network-manager stop
iw dev wlan0 del
iw phy phy0 interface add new0 type station
service network-manager start
iw phy phy0 interface add new1 type __ap
hostapd -B /etc/hostapd.conf

使用适合 hostapd 的配置:

cat /etc/hostapd/hostapd.conf 
interface=new1
driver=nl80211
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ssid=XXXX
country_code=us
hw_mode=g
channel=1
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
eap_server=0
wpa=2
wpa_passphrase=XXXX
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP

然而,驱动程序 nl80211 拒绝将虚拟 IF new1 置于 AP 模式。有趣的是:iw list 的输出包含

Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * monitor
software interface modes (can always be added):
         * AP/VLAN
         * monitor
valid interface combinations:
         * #{ managed } <= 1, #{ AP } <= 1,
           total <= 2, #channels <= 1, STA/AP BI must match
         * #{ managed } <= 2,
           total <= 2, #channels <= 1

很明显,我的 wifi 卡(iwlwifi 下的 Intel Centrino Advanced-N 6235 [8086:088e])支持 AP 模式(我已经测试过了),我把“有效接口组合”解释为,我最多可以同时在这张卡上拥有 1 个托管和 1 个 AP vif。但后来我注意到一个神秘的限制,STA/AP BI 必须匹配。

有人知道这是什么意思吗?这是否就是我尝试在卡上使用两个 vif(一个在站点,另一个在 AP 模式)失败的原因?谢谢

答案1

以防有人到这里来识别“STA/AP BI 必须匹配”:

内核源代码include/net/cfg80211.h特别struct ieee80211_iface_combination指出

 * @beacon_int_infra_match: In this combination, the beacon intervals
 *  between infrastructure and AP types must match. This is required
 *  only in special cases.

所以是个信标间隔,并且使其匹配应该不是什么大问题。

答案2

事实上,这句神秘的句子

STA/AP BI must match

似乎与我的设置不起作用无关。结果却是

 #channels <= 1

是让它工作的关键。我最终明白了这意味着当我在同一个物理设备(无论如何是我的 Intel Centrino)上有两个 vif 时,我只能使用一个通道,一个处于 AP 模式,另一个处于 Station 模式。所以我将 hostapd conf 文件中的通道切换到我尝试连接的通道,并且没有出现任何错误消息。

此时我配置了 iptables,启动了 dnsmasq,然后通过 hostapd

echo 1 >/proc/sys/net/ipv4/ip_forward
iptables --table nat --append POSTROUTING --out-interface new0 -j MASQUERADE
iptables --append FORWARD --in-interface new1 -j ACCEPT
dnsmasq 
/usr/local/bin/hostapd /etc/hostapd/hostapd.conf

然后我有了它,一张 wifi 卡同时作为接入点和连接到互联网的网络客户端工作。

相关内容