Azure Zest

[ 라즈베리파이 ] 라즈베리파이로 무선 ap 만들기 본문

DIP & 라즈베리파이 & 아두이노 & 웹개발 & 논문리뷰

[ 라즈베리파이 ] 라즈베리파이로 무선 ap 만들기

LABONG_R 2019. 4. 4. 09:48

필요한 소프트웨어 설치

먼저 Raspbian 설치를 업데이트를 한다.

$ sudo apt-get update
$ sudo apt-get upgrade

그 다음 필요한 모든 소프트웨어를 한 번에 설치한다.

$ sudo apt-get install dnsmasq hostapd

이 소프트웨어들은 설치되면 바로 실행이 저절로 되기 때문에 구성 파일이 준비되지 않았으므로, 다음과 같이 새 소프트웨어를 꺼준다.

$ sudo systemctl stop dnsmasq
$ sudo systemctl stop hostapd

설치가 다 완료되었고, 소프트웨어도 껐다면 올바르게 사용하기 위해 리부트한다.

$ sudo reboot

고정 IP 구성

독립형 네트워크를 구성하기 위해 라즈베리 파이에는 무선 포트에 static IP 주소가 할당 되어야 한다.

따라서 무선 네트워크 표준인 192.168.xx IP 주소를 사용하고 있다고 가정하고, 서버에 192.168.4.1을 할당한다.

$ sudo nano /etc/dhcpcd.conf

이 파일의 끝에 다음줄을 첨가한다.

interface wlan0
    static ip_address=192.168.4.1/24
    nohook wpa_supplicant

올바르게 작성했으면 다시 시작하여 새로운 wlan0 구성을 설정한다.

$ sudo service dhcpcd restart

 

DHCP 서버 구성(dnsmasq)

DHCP 서비스는 dnsmasq에서 제공한다. 이 때, 기본적인 구성 파일에는 필요하지 않은 정보가 많이 포함되어 있기 때문에 처음부터 시작하기 위해서 파일을 옮기고, 새 파일을 만들어 수정한다.

$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig  
$ sudo nano /etc/dnsmasq.conf

다음 줄들을 dnsmasq 파일에 입력한다.

다음 코드를 통해 192.168.4.2에서 192.168.4.20 사이의 IP 주소를 24시간 동안 제공해주는 것이다.

dnsmasq에는 더 많은 옵션들이 있고, 다른 섹션을 첨가하려면 이 사이트를 통해 살펴보면 된다.

interface=wlan0      # Use the require wireless interface - usually wlan0
  dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h

액세스 포인트 호스트 소프트웨어 구성(hostapd)

이 다음은 무선 네트워크의 다양한 매개변수를 추가하는 것에 대한 내용이다.

/etc/hostapd/hostapd.conf에 있는 hostapd 구성 파일을 편집하면 된다.

$ sudo nano /etc/hostapd/hostapd.conf

다음 파일을 열어서 아래 내용을 첨가해주면 된다.

이 때, 이름과 암호는 ''로 묶으면 안되고, 암호는 8자에서 64자 사이여야한다.

5GHz 대역을 사용하려면 작동모드를 hw_mode=g에서 hw_mode=a로 변경하면 된다.

interface=wlan0
driver=nl80211
ssid=설정할 이름
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=암호
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

이 때, 혹시 무선 네트워크를 숨기고 싶다면, ignore_broadcast_ssid=1로 바꿔주면 된다.

이렇게 작성을 완료했다면 이 위치를 알려야 하기 때문에 다음과 같은 명령을 적어준다.

$ sudo nano /etc/default/hostapd

이 파일에서 #DAEMON_CONF 로 시작하는 줄을 찾아 다음과 같이 작성하고, 주석을 해제한다.

DAEMON_CONF="/etc/hostapd/hostapd.conf"

시작하기

이제 환경을 다 갖추었고, 시작하면 된다.

$ sudo systemctl start hostapd
$ sudo systemctl start dnsmasq
$ sudo nano /etc/sysctl.conf

로 가서, 다음 행의 주석을 해제한다.

net.ipv4.ip_forward=1

또한, 다음 명령을 추가한다.

$ sudo iptables -t nat -A  POSTROUTING -o eth0 -j MASQUERADE
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

그리고, 다음 파일로 가서 exit0 바로 위에 다음 행을 추가한다.

$ sudo nano /etc/rc.local
iptables-restore < /etc/iptables.ipv4.nat

이제 모든 작업이 완료되었고, 리부트를 해준다.

$ sudo reboot

ERRORS

직접 해보면서 한 두가지 오류들이 나왔었다.

먼저, hostapd를 설치할 때 제대로 설지가 되지 않았다. 

Failed to start hostapd.service: Unit hostapd.service is masked

라는 오류가 떴었고, 구글에서 찾아보니 아마 버전이 업데이트 되면서 마스크가 된채로 배포되어 생기는 문제 같았다.

$ sudo systemctl unmask hostapd
$ sudo systemctl enabel hostapd
$ sudo systemctl start hostapd

위의 명령들을 치고 나니 다행히 작동이 되었다.

 

또한, 나중에 모든 설정을 마치고 다시 hostapd를 실행시켰을 때 오류가 났었는데,

Job for hostapd.service failed because the control process exited with error code

라는 오류가 났었고 이유를 찾을 수가 없었다.

나중에 다시 차근차근 해보니 #DAEMON_CONF 의 주석처리를 제거하지 않아 생기는 문제였고, 주석을 해제하고 나니 잘 실행이 되었다.


hostapd dnsmasq 자동실행

라즈베리파이를 reboot했을 때, 자꾸 hostapd와 dnsmasq가 꺼져 다시 켜야하는 상황이 있었다.

이 때는

$ sudo update-rc.d hostapd enable
$ sudo update-rc.d dnsmasq enable

를 치면 해결된다. 자동실행을 해지하고 싶다면 마지막을 disable로 바꿔주면 된다.

(출처: https://altongmon.tistory.com/705 [IOS를 Java]) 

 


Reference : 라즈베리파이 공식 사이트