현재(2014/11/6) 최신 버전인 hostapd-2.3 을 사용하여 여러가지 설정을 통해 AP 를 만드는 방법에 대해 설명한다.
여기서 사용하는 H/W 와 S/W 는 SDIO 8897 칩이다. 참고로 타겟은 PC 이며, 레퍼런스 형태의 SDIO 보드를 PC 에 꼽아 사용하였다.
hostapd 빌드하기
hostapd 의 최신버전은 http://w1.fi/hostapd/ 에서 받을 수 있다.
wpa_supplicant 와 마찬가지로 hostapd 는 많은 기능들을 지원한다. 자신에게 필요한 기능들만 선택하여 컴파일 할 수 있다. 기본적으로 hostapd/defconfig 파일을 사용하는데, 나의 경우 아래의 .config 파일을 사용하였다.
config 파일을 참고하자. 빌드하면, hostapd, hostapd_cli 바이너리 파일이 생성된다.
hostapd 실행하기
이제 hostapd 를 사용하여 AP 를 만들어보자.
여기서 필요한 설정 파일(hostapd.conf)을 작성하고, 실행 시 이를 적어주어야 한다.
어떻게 작성하는가에 따라 생성될 AP 의 설정이 달라진다.
OPEN
설정 파일(hostapd.conf)을 아래와 같이 작성한다.
interface=uap0 driver=nl80211 logger_syslog=-1 logger_syslog_level=2 logger_stdout=-1 logger_stdout_level=2 ctrl_interface=/var/run/hostapd ssid=UAP-WWW hw_mode=g channel=11 beacon_int=100 device_name=WirelessAP
WEP
interface=uap0 driver=nl80211 logger_syslog=-1 logger_syslog_level=2 logger_stdout=-1 logger_stdout_level=2 ctrl_interface=/var/run/hostapd ssid=UAP-WWW hw_mode=g channel=11 beacon_int=100 auth_algs=2 wep_default_key=0 wep_key0="12345" device_name=WirelessAP
WPA/WPA2
interface=uap0 driver=nl80211 logger_syslog=-1 logger_syslog_level=2 logger_stdout=-1 logger_stdout_level=2 ctrl_interface=/var/run/hostapd ssid=UAP-WWW hw_mode=g channel=11 beacon_int=100 auth_algs=1 wpa=3 wpa_passphrase=12345678 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP CCMP device_name=WirelessAP
WPS
PBC
설정 파일(hostapd.conf)을 아래와 같이 작성한다.
interface=uap0 driver=nl80211 logger_syslog=-1 logger_syslog_level=2 logger_stdout=-1 logger_stdout_level=2 ctrl_interface=/var/run/hostapd ssid=UAP-WWW hw_mode=g channel=11 beacon_int=100 auth_algs=1 wpa=3 wpa_passphrase=12345678 wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP device_name=WirelessAP eap_server=1 wps_state=2 ap_setup_locked=1 uuid=87654321-9abc-def0-1234-56789abc0000 wps_pin_requests=/var/run/hostapd.pin-req manufacturer=mrvl model_name=WAP model_number=123 serial_number=12345 device_type=6-0050F204-1 os_version=01020300 config_methods=label display push_button keypad
그리고 hostapd 를 실행한다.
#./hostapd ./hostapd.conf -d & #./hostapd_cli -i uap0 -p /var/run/hostapd >wps_pbc // connect to AP by WPS PBC
STA 상에서 WPS PBC 접속 시도를 한다. 이후 접속이 완료된다.
PIN
아래와 같이 hostapd.conf 파일을 작성한다.
interface=uap0 driver=nl80211 logger_syslog=-1 logger_syslog_level=2 logger_stdout=-1 logger_stdout_level=2 ctrl_interface=/var/run/hostapd ssid=UAP-WWW hw_mode=g channel=11 beacon_int=100 auth_algs=1 wpa=3 wpa_passphrase=12345678 wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP device_name=WirelessAP eap_server=1 wps_state=2 ap_setup_locked=1 uuid=87654321-9abc-def0-1234-56789abc0000 wps_pin_requests=/var/run/hostapd.pin-req manufacturer=mrvl model_name=WAP model_number=123 serial_number=12345 device_type=6-0050F204-1 os_version=01020300 config_methods=label display push_button keypad
아래와 같이 실행하자.
#./hostapd ./hostapd.conf -ddd &
Phone(PIN 생성 후)에서 접속 시
휴대폰에서 출력된 PIN 번호(예를들어 12345670)를 입력한다.
다른 터미널 창을 열어 아래와 같이 실행한다.
#./hostapd_cli -i uap0 -p /var/run/hostapd >wps_pin any 12345670
접속될 것이다.
AP(PIN 생성 후)에서 접속 시
다른 터미널 창을 열어 아래와 같이 실행한다.
#./hostapd_cli -i uap0 -p /var/run/hostapd >
그리고 STA 에서 아래와 같이 실행한다.
#wps_cli >wps_pin 00:50:43:21:8a:37 12345670 // 00:50:43:21:8a:37 는 AP 의 MAC 주소
그럼 STA 에서 AP 쪽으로 접속 시도를 한다. 그때, AP 터미널 창에는 아래와 비슷한 메세지가 출력된다.
<3>WPS-PIN-NEEDED 867ae626-40cb-5c01-a764-1d07e10a7a3e 5c:51:4f:2f:b5:d4 [ | | | | | 0-00000000-0] ...
여기서 아래와 같이 AP 쪽에서 입력한다.
>wps_pin 867ae626-40cb-5c01-a764-1d07e10a7a3e 12345670 OK
이제 STA 쪽에서 아래와 같이 입력한다.
>wps_pin any 12345670
접속이 된다.
앞서 실행한 작업의 순서를 보자면,
- STA 에서 AP 쪽으로 접속 시도한다.
- AT 에서 이를 감지하여 STA 의 UUID 와 PIN 번호를 등록한다(이때 감지한 AP 의 정보는 /var/run/hostapd.pin-req 파일에 저장된다)
- STA 에서 PIN 접속을 시도한다.
- 접속완료
이렇다.
PBC 와 PIN 이 다른점이 있다면, PBC 는 접속시 SSID 를 별도로 지정하지 않지만, PIN 은 SSID 를 별도로 지정하지만 않으면(any 로 하면), 순차적으로 AP 마다 접속시도를 한다.