web-dev-qa-db-ja.com

単一のwifiAP NIC

まったく同じカードを介してWi-Fiネットワークに接続しているときに、PCワイヤレスカードをAPとして使用しようとしていますが、問題があります。私が達成しようとしているのは、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は、仮想IFnew1をAPモードにすることを拒否します。ここに興味深いビットがあります:iwリストの出力には次のものが含まれています

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つのAPvif。しかし、その後、不思議な制約に気づきました。STA/ APBIは一致する必要があります。

これが何を意味するのか、そしてこれが私のカードで2つのvifを使用する試みを妨げているのかどうかを誰かが知っていますか?1つはステーションでもう1つはAPモードです。乾杯

8
MariusMatutiae

「STA/APBIが一致する必要がある」ことを確認するために誰かがここに来る場合:

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.

したがって、[〜#〜] bi [〜#〜]ビーコン間隔であり、それを一致させることは大きな問題ではありません。

5
dirkt

実は不思議な文章

STA/AP BI must match

セットアップが機能しないこととは何の関係もないようです。代わりに、

 #channels <= 1

それを機能させるための鍵でした。私は最終的に、同じ物理デバイス(とにかく、Intel Centrino)に2つのvifがあり、1つはAPで、もう1つはステーションモードである場合、1つのチャネルしか使用できないことを意味することを理解しました。そのため、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

それから私はそれを手に入れました。1枚のwifiカードが、インターネットに接続されたネットワークへのアクセスポイントとクライアントとして同時に機能していました。

6
MariusMatutiae