Linux 시스템이 단일 물리적 WLAN 인터페이스를 사용하여 무선 클라이언트와 액세스 포인트로 동시에 작동 할 수 있습니까?


12

물리적 WLAN 인터페이스가 하나만있는 경우 기존 액세스 지점의 클라이언트가 될 수 있고 동시에 다른 클라이언트의 액세스 지점으로 작동 할 수있는 해커가 있습니까?

기존 802.11g ADSL 라우터가 있고 802.11n을 지원하는 HTPC를 구축 할 예정입니다. 내 랩톱에는 802.11n도 있지만 현재 AP는 54Mbps로 연결되어 있기 때문에 AP가 지원합니다. HTPC를 ADSL 라우터의 클라이언트로 사용하고 싶지만 랩톱을 HTPC의 클라이언트로 사용하고 싶기 때문에 파일을 복사하는 것이 더 빠릅니다.

가능한?

편집 : 분명히 이더넷을 사용하여 HTPC를 ADSL 라우터에 연결하고 라우터에서 wifi를 비활성화 할 수는 있지만 해당 옵션을 무시할 수 있습니다. :-)

답변:


9

개인적으로이 작업을 수행하지는 않았지만 올바른 방향으로 나아 가기위한 몇 가지 정보가 있습니다.

프로토콜 관점에서 볼 때 AP와 클라이언트 STA 모두로 작동하는 단일 라디오를 가질 수 있습니다. 만들고있는 AP와 클라이언트로 가입 한 AP가 같은 채널에있는 경우 가장 잘 작동합니다 (또는 거의 필수). 라디오 카드가 서비스 요청으로 채널을 계속 전환하도록하는 것은 프레임 손실과 끔찍한 성능을위한 레시피입니다.

소프트웨어 적으로는 가능 해지고 있습니다. Linux의 여러 802.11 카드 드라이버는 단일 카드가 동시에 여러 AP (여러 SSID, 심지어 BSSID)로 작동 할 수 있도록하는 VAP (가상 AP)의 개념을 지원합니다. 직관적으로 VAP라는 용어는 가상 인터페이스가 AP 모드인지 여부에 관계없이 동일한 802.11 카드에있는 모든 종류의 가상 인터페이스를 의미합니다. 따라서이 카드 / 드라이버 콤보에서 두 가지 VAP (STA 모드 VAP)를 만들 수 있습니다.

Atheros 기반 카드 용 MadWifi 드라이버는 VAP를 지원하는 드라이버입니다. 802.11 카드가 Atheros 칩셋을 사용하고 올바른 버전의 MadWifi 드라이버를 설치하는 경우 다음과 같은 동시 STA + AP 모드를 위해 카드를 구성 할 수 있습니다.

wlanconfig ath0 create wlandev wifi0 wlanmode sta
wlanconfig ath1 create wlandev wifi0 wlanmode ap

다음은 모든 설정에 대한 완전한 지침이 아니라 시작을위한 시도입니다.

자세한 내용 은 " wifi vap " 과 같은 것을 Google에 원할 수 있습니다 . 위의 명령을 여기 에서 복사했습니다 .

아, 그리고 일부 신화 파열 : 소비자 컴퓨터에서는 Atheros 카드가 드물지 않습니다. 이들은 Broadcom, Marvell, Intel 및 Ralink와 함께 802.11 칩셋의 주요 업체입니다. 그리고 내가 MadWifi / Atheros의 예를 사용했다고해서 비슷한 일을 할 수있는 다른 주요 플레이어 칩을위한 Linux 드라이버가 없다는 것을 의미하지는 않습니다. 또한 802.11은 필요 하지 않습니다. 이를 수행하기 위해 802.11s를 수행해야한다는 것은 한 인터페이스에서 다른 인터페이스로 프레임을 전달하기 위해 스패닝 트리 프로토콜을 지원해야한다는 것과 같습니다.


마치 받고있는 보드에 Atheros 칩셋이있는 것처럼 보이므로 운이 좋을 수도 있습니다. 구성 요소 배송을 기다리는 중이고 빌드하고 테스트 할 수 있습니다.
ThatGraemeGuy

아직 MadWifi와 게임을 할 기회가 없었습니다. 답변이 정확하기 때문에 동의합니다.이 기능을 제공하는 다른 칩셋 / 제품군이없는 것 같습니다.
ThatGraemeGuy

Spiff, 저는 Atheros 칩과 madwifi로 작업하고 있으며 VAP를 하나는 sta에, 하나는 ap에 설치하려고합니다. AP 모드에서 여러 VAP를 설정할 수 있지만 sta에서 첫 번째 VAP를 설정 한 다음 ap에서 다른 VAP를 설정하려고하면 wlanconfig : ioctl : 입력 / 출력 오류가 발생합니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
sachinr

1
@sachinr 다른 사람의 질문에 대한 3 살짜리 답변에 대한 의견이 아니라 모든 사람이 볼 수 있도록 질문으로 질문하십시오.
Spiff

이봐, 난 여기에 내 질문을 추가 - superuser.com/questions/649742/...을 . 당신은 볼 수 있습니까? 감사합니다 :)
sachinr

4

nl80211 드라이버에는 "관리"인터페이스 모드가 있습니다. "iw"유틸리티를 사용하여 다음과 같이 구성 할 수 있습니다.

iw phy phy0 인터페이스 추가 wlan1 유형 관리

이에 대한 자세한 정보는 https://wireless.wiki.kernel.org/en/users/documentation/iw 에서 확인할 수 있습니다 . Phy0은 / sys / class / ieee80211 /에 표시되는 내용을 나타냅니다.

또한 rPI3가 비슷한 작업을 수행하지만 더 그늘진 "__ap"인터페이스 모드를 사용하는 것을 보았습니다 . 이렇게하면 사용자는 AP 모드에서만 실행되는 두 번째 인터페이스를 만들고 초기 인터페이스를 클라이언트 모드로 사용합니다.

당신이 그것을 깨닫는 방법이 무엇이든 (드라이버가 분명히 그것을 지원해야한다), 동일한 물리적 장치로부터 두 개의 인터페이스가 필요하다. 한 인터페이스는 wpa_supplicant를 클라이언트 모드로 간단히 실행할 수 있고, 다른 인터페이스 (AP 모드)는 일반적으로 hostapd를 사용하여 액세스 포인트를 재생합니다.

[편집하다:]

iw 도구의 소스 코드는 그늘진 __ap 모드에 대해 많은 것을 명확하게합니다.

..
} else if (strcmp(tpstr, "__ap") == 0) {
    *type = NL80211_IFTYPE_AP;
    return 0;
} else if (strcmp(tpstr, "__ap_vlan") == 0) {
    *type = NL80211_IFTYPE_AP_VLAN;
    return 0;
} else if (strcmp(tpstr, "wds") == 0) {
    *type = NL80211_IFTYPE_WDS;
    return 0;
} else if (strcmp(tpstr, "managed") == 0 ||
       strcmp(tpstr, "mgd") == 0 ||
       strcmp(tpstr, "station") == 0) {
    *type = NL80211_IFTYPE_STATION;
    return 0;
} 
..

__ap 모드는 netlink 유형 NL80211_IFTYPE_AP로 변환됩니다. 나는 또한 이것을 테스트했고 이것은 잘 작동한다. 커널 문서 위키가 그것을 언급하지 않는 것이 이상합니다.


4

소스 및 추가 정보 :

https://wiki.archlinux.org/index.php/Software_access_point

짧은 답변

sudo iw dev wlan0 interface add wlan0_ap type managed
sudo create_ap wlan0_ap wlan0 createap mypassword

Wi-Fi 장치는 AP 모드를 지원해야합니다

AP 작동 모드를 지원하는 nl80211 호환 무선 장치가 필요합니다. 이는 지원되는 인터페이스 모드 블록 아래에 iw list 명령을 실행하여 확인할 수 있습니다. AP가 나열되어 있어야합니다.

...
    Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * WDS
         * monitor
         * mesh point
...

단일 Wi-Fi 장치가있는 무선 클라이언트 및 소프트웨어 AP

소프트웨어 AP 만들기는 자신의 네트워크 연결 (이더넷, 무선 등)과 독립적입니다. 많은 무선 장치는 AP 및 무선 "클라이언트"와 동시에 동시 작업을 지원합니다. 이 기능을 사용하면 단일 무선 장치를 사용하여 기존 네트워크에 대한 "무선 리피터"역할을하는 소프트웨어 AP를 만들 수 있습니다. 이 기능은 iw list 출력의 다음 섹션에 나열되어 있습니다.

유효한 인터페이스 조합 :

$ iw list
...
valid interface combinations:
     * #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1,
       total <= 3, #channels <= 2
...

제한 #channels <= 1은 소프트웨어 AP가 Wi-Fi 클라이언트 연결과 동일한 채널에서 작동해야 함을 의미합니다. 아래 hostapd.conf의 채널 설정을 참조하십시오.

기능 / 기능을 사용하려면 이더넷 연결을 사용할 수 없기 때문에이를 사용하기 위해 두 개의 별도 가상 인터페이스를 작성해야합니다. 물리적 장치 wlan0에 대한 가상 인터페이스는 다음과 같이 만들 수 있습니다. 고유 MAC 주소를 가진 가상 인터페이스는 네트워크 연결 (wlan0_sta) 자체 및 소프트웨어 AP / hostapd "무선 리피터"에 대해 작성됩니다.

# iw dev wlan0 interface add wlan0_sta type managed 
# iw dev wlan0 interface add wlan0_ap  type managed

구성

액세스 포인트 설정은 두 가지 주요 부분으로 구성됩니다.

  1. 무선 클라이언트가 컴퓨터의 소프트웨어 액세스 포인트에 연결하고 IP 패킷을 교환 할 수 있도록 Wi-Fi 링크 계층을 설정합니다.
  2. 컴퓨터에서 네트워크 구성을 설정하여 자체 인터넷 연결과 무선 클라이언트간에 IP 패킷을 올바르게 릴레이합니다.

도구

create_ap

create_ap 패키지는 인터넷 공유를 위해 브리지 또는 NAT 액세스 포인트를 생성 할 수있는 스크립트를 제공합니다. 액세스 포인트의 올바른 기능을 위해 hostapd, dnsmasq 및 iptables를 결합합니다. NAT 가상 네트워크를 생성하는 기본 구문은 다음과 같습니다.

# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase

좋은 답변, 감사합니다!
Iman Akbari

나는 이것이 훌륭한 해답이라고 생각한다. 특히 채널 제약에 관한 내용이다
crazystick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.