무선 액세스 포인트(wireless access point, WAP)는 컴퓨터 네트워크에서 와이파이를 이용한 관련 표준을 이용하여 무선 장치들을 유선 장치에 연결할 수 있게 하는 장치를 가리킨다. WAP는 일반적으로 유선망을 거치는 라우터에 연결되며 컴퓨터, 프린터와 같은 무선 장치와 네트워크 상의 유선 장치 간 데이터를 중계할 수 있다. 그리고 무선 장비 연결중 블루투스 를 이용할때는 일반적으로 1:1로 연결을 하게 되므로 이때는 무선 액서스 포인트라고 하기보다는, 1:1 근거리 무선 통신 장비라고 한다. 이유는 일반적인 무선 액서스 포인트의 용도는 1:다수가 접속을 하는데 사용하기 때문이다. ( 위키백과 https://ko.wikipedia.org/wiki/%EB%AC%B4%EC%84%A0_%EC%95%A1%EC%84%B8%EC%8A%A4_%ED%8F%AC%EC%9D%B8%ED%8A%B8 )
그냥 쉽게 인터넷 기기들이 접속할 수 있는 무선/유선 포인트라고 생각하면 된다. 집에 있는 무선 공유기, 라우터, 아니면 스마트 폰 핫 스팟 기능이라고 이해하길 바란다. 이렇게 설정하는 게 왜 좋은가? 왜 필요한가? 이것을 이해하면 아래는 할 필요가 없다.
바로 독립적인 무선 기기로 만들 수가 있다. 인터넷이 되든 안되는 상관없이 말이다. 실내에 있는 라즈베리 파이에 무선으로 접속할 수 있다는 말이 된다. 즉, AP 모드로 설정한 라즈베리 파이는 부팅을 하게 되면 AP 장치가 된다. 그래서 스마트 폰이든 노트북에서 접속이 가능하다. 파일을 실행 시킬 수 있고, 로봇으로 동작시킬 수 있고, 몰래 카메라 같은 기능을 실행하게 할 수 있다는 말이다. 무엇보다 네트워크 환경에서 해야 하는 개발이나 테스트가 아주 쉽게 할 수 있다는 말이다.
라즈베리파이3 보드에 내장된 BCM43438 칩이 AP Mode 를 진원합니다. AP 란 Access Point 로 라우터나 공유기 같은 기능을 지원한다는 말입니다.
SSH로 접속하고 로그인 하는 과정은 생략하도록 하겠습니다.
1. 업데이트 & 업그레이드
1 2 3 4
$sudo apt-get update $sudo apt-get upgrade -y cs
2. 패키지 설치
1 2 3 4
$sudo apt-get install hostapd -y $sudo apt-get install dnsmasq -y
Colored by Color Scripter cs
여기서 hostapd는 wifi ap mode로 설정할 때 사용하며
dnsmasq 는 DHCP나 DNS를 설정할 때 사용합니다.
3. 자동실행 설정
1 2 3 4
$sudo systemctl disable hostapd $sudo systemctl disable dnsmasq
Colored by Color Scripter cs
여기서 바로 넘어가면 설정이 되지 않은채로 실행되므로 이를 정지시켜 줍니다.
4. hostapd 설정
나노 에디터를 열어 아래 내용을 추가해 주시면 됩니다. 편집을 마치고 빠져 나올때는 ctrl-x 누르시고 저장할거냐 ? 물어오니 Y 누르시고 엔터 누르시면 빠져 나옵니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
$sudo nano /etc/hostapd/hostapd.conf
interface=wlan0 driver=nl80211 ssid=RPI3wifi hw_mode=g channel=6 wmm_enabled=0 macaddr_acl=0 auth_algs=1 wpa=2 wpa_passphrase=1234567890 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
Colored by Color Scripter cs
편집을 마치고 빠져 나올때는 ctrl-x 누르시고 저장할거냐 ? 물어오니 Y 누르시고 엔터 누르시면 빠져 나옵니다.
대충 보자면 wlan0을 설정하고 ssid를 설정하고 뭐라뭐라 되있는데 솔직히 2개만 신경썼습니다.
ssid랑 wpa_passphrase
ssid는 우리가 와이파이를 켰을 때 보이는 이름이며
wpa_passphrase는 비밀번호입니다.
다른건 드라이버나 채널 암호화 방식등등 입니다.
완료되었다면 저장 후 종료를 해줍니다.
nano 에디터 기준으로 Ctrl + x, y, enter 를 하면 저장 후 종료하게 됩니다.
다음 파일을 열어서
$sudo nano /etc/default/hostapd
#demon_conf="" 부분을
demon_conf="/etc/hostapd/hostapd.conf" 로 바꾸어 줍니다.
5. dnsmasq 설정 아패 파일을 열어서 아래 방향키를 사용하여 맨 아래로 이동하여 그대로 입력합니다.
1 2 3 4 5 6 7 8 9 10 11
$sudo nano /etc/dnsmasq.conf
#Pi3Hotspot Config #stop DNSmasq from using resolv.conf no-resolv #Interface to use interface=wlan0 bind-interfaces dhcp-range=10.0.0.3,10.0.0.20,12h
Colored by Color Scripter cs
저장-종료를 해줍니다. ctrl-x 누르고 y 누르고 엔터쳐서 빠져나옵니다.
6. network 설정
1 2 3 4 5 6 7 8
$sudo nano /etc/network/interfaces
allow-hotplug wlan0 iface wlan0 inet manual wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
Colored by Color Scripter cs
3번째 줄에 #을 추가하여 아래와 같이 바꿔줍니다.
1 2 3 4 5 6
allow-hotplug wlan0 iface wlan0 inet manual #wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
Colored by Color Scripter cs
이제 스크립트를 수정해 주어야 합니다.
왜 수정하느냐?
라즈베리파이를 켰을 때 일일이 연결해서(이더넷같은 방법으로) ap mode 켜주고 할 순 없으니까요
7. rc.local 설정
rc.local은 라즈베리파이가 부팅할 때 실행되는 프로그램이나 커맨드에 관한 부분입니다. 자세한 내용은 아래 링크를 참조해 주시기 바랍니다.
https://www.raspberrypi.org/documentation/linux/usage/rc-local.md
#sudo nano /etc/rc.local
명령으로 파일을 엽니다.
#!/bin/sh -e 위와같이 되어있는 맨 윗줄을
#!/bin/bash -e 로 바꾸어 줍니다.
그리고 fi (printf ~~ 바로 아래) 와 exit 0 사이에 아래 스크립트를 추가해 줍니다. 에러가 나면 그대로 입력되어 있나 확인해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #Wifi config - if no prefered Wifi generate a hotspot #RPi Network Conf Bootstrapper
createAdHocNetwork() { echo "Creating RPI Hotspot network" ifconfig wlan0 down ifconfig wlan0 10.0.0.5 netmask 255.255.255.0 up service dnsmasq start service hostapd start echo " " echo "Hotspot network created" echo " " }
echo "=================================" echo "RPi Network Conf Bootstrapper" echo "=================================" echo "Scanning for known WiFi networks" ssids=( 'mySSID1','mySSID2' ) connected=false for ssid in "${ssids[@]}" do echo " " echo "checking if ssid available:" $ssid echo " " if iwlist wlan0 scan | grep $ssid > /dev/null then echo "First WiFi in range has SSID:" $ssid echo "Starting supplicant for WPA/WPA2" wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null 2>&1 echo "Obtaining IP from DHCP" if dhclient -1 wlan0 then echo "Connected to WiFi" connected=true break else echo "DHCP server did not respond with an IP lease (DHCPOFFER)" wpa_cli terminate break fi else echo "Not in range, WiFi with SSID:" $ssid fi done
if ! $connected; then createAdHocNetwork fi
Colored by Color Scripter cs
제일 처음 고쳤던 sh를 bash로 바꾸는 부분을 잘 몰라서 검색을 해보았습니다.
키워드 : sh vs bash
얻은 링크 : http://stackoverflow.com/questions/5725296/difference-between-sh-and-bash
다음으로 스크립트에 관한 내용입니다.
여기서 신경쓸 부분은
ssids=( ‘ssid1’, ‘ssid2’ )
부분입니다.
이 부분은 주변에 와이파이를 스캔해본 뒤 일치하는 ssid가 있으면 wpa_supplicant.conf 에 설정되어 있는데로 연결을 시도하며 그게 아니라면 ap mode로 진입합니다.
위처럼 ‘,’ 를 이용하여 여러개를 넣을 수 있으며 1개만 넣어주어도 됩니다.
일치하는 ssid가 있으면 ap mode로 바뀌지 않으므로 일부러 틀린 ssid를 넣어 와이파이가 공유기에 접속하지 못하게 하였습니다.
저장-종료 후 재부팅을 해줍니다.
$sudo reboot 이까지 되었다면 라즈베리파이를 ap mode로 사용할 수 있습니다.
wifi
8. 추가사항(필수)
이대로 진행해보니 에러가 하나 발생하였습니다.
pip를 설치하려는데 에러가 나길레
$ping google.com 을 해보니 알 수 없는 주소라는 에러가 출력되었습니다.
그런데
$ping 8.8.8.8 은 잘됩니다.
dns 문제인가 싶어 dnsmasq를 먼저 수정해 보았습니다.
하지만 뭘 수정해야 할지 모르므로 구글링
키워드 : dnsmasq raspberry pi
얻은 링크 : https://www.raspberrypi.org/forums/viewtopic.php?t=46154
중간에 server=8.8.8.8 이라는 부분이 보였습니다.
이를 dnsmasq.conf에 추가해 줍니다.
$sudo nano /etc/dnsmasq.conf
server=8.8.8.8 를 맨 마지막에 추가해 주었습니다.
저장-종료 후 재부팅을 해줍니다.
$sudo reboot 설정이 잘 되었는지 확인하기 위해 ifconfig 명령을 사용해 wlan0 가 셋팅되어 있음을 확인한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 pi@raspberrypi:~ $ ifconfig eth0 Link encap:Ethernet HWaddr b8:27:eb:7f:d0:79 inet addr:192.168.1.239 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::b9ce:c93b:7972:2869/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:408 errors:0 dropped:2 overruns:0 frame:0 TX packets:155 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:34505 (33.6 KiB) TX bytes:24505 (23.9 KiB)
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:358 errors:0 dropped:0 overruns:0 frame:0 TX packets:358 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:26825 (26.1 KiB) TX bytes:26825 (26.1 KiB)
wlan0 Link encap:Ethernet HWaddr b8:27:eb:2a:85:2c inet addr:10.0.0.5 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::4b59:6b44:6e1b:a9a5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:369 errors:0 dropped:369 overruns:0 frame:0 TX packets:117 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:69521 (67.8 KiB) TX bytes:20521 (20.0 KiB)
pi@raspberrypi:~ $
Colored by Color Scripter cs
위 화면은 이더넷 케이블로 IP 주소를 받고, AP 모드로 설정된 상태이다. 즉 무선 AP 로 설정된 상태다. SSID는 RPI3wifi 이고 주소는 10.0.0.5 임을 알 수 있다.
$ping google.com
여기까지 했는데 막히는 곳이 하나 있다. 바로 /etc/rc.local 파일이 실행되지 않는 것이다. 아래처럼 해결한다.
참고자료 목록
http://www.raspberryconnect.com/network/item/315-rpi3-auto-wifi-hotspot-if-no-internet http://elinux.org/RPi_Setting_up_a_static_IP_in_Debian https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/ |