Dork's port

Raspberry Pi AP mode 설정(라즈베리파이를 무선 공유기 처럼 사용하기) 본문

Raspberry Pi

Raspberry Pi AP mode 설정(라즈베리파이를 무선 공유기 처럼 사용하기)

Dork94 2017.09.24 23:19

오늘은 라즈베리 파이를 무선 공유기 즉, AP모드로사용 하는방법에 대해 배우겠습니다.

 

원리는 이렇습니다.

 

라즈베리파이의 인터넷 사용 객체(파이어폭스, 서비스 등) ----> eth0(또는,wlan0) ----> ISP

 

※ISP란? Internet Service Provider의 준말로 인터넷 서비스 제공자 (SKT,KT,LG등)을 뜻합니다.

AP mode를 사용하게 되면

 

 

와이파이 사용자의 인터넷 사용 객체(파이어폭스,서비스 등) ----->wlan0(무선 인터페이스) ------->eth0(또는, 인터넷이 연결되어있는 인터페이스)------->ISP

 

즉, 무선 인터페이스로 부터, 신호를 받아(인터넷) 그 신호를 실제로 인터넷이 연결되어있는 네트워크 인터페이스로 보내주게 되므로써,

 

무선 공유기와 같이 작동하게 되는 것 입니다.

 

지금부터 설정 방법을 알아보도록 하겠습니다.

 

# apt-get install dnsmasq

# apt-get install hostapd

 

 

위의 명령어로 dnsmasq및 hostapd 패키지를 설치해 줍니다.

 

dnsmasq는 와이파이를 사용하고자하는 사용자가 오면 그 사용자에게 IP주소 및 DNS 서버를 할당해주는 역할을 하는 패키지이며,

hostapd는 무선 네트워크 인터페이스를 AP모드로 전환하여 서비스하게 해주는 패키지 입니다.

 

이때, 무선 네트워크 인터페이스는 AP모드를 지원해야하며 아래의 명령어로 확인할 수 있습니다.

 

# iw list

Supported interface modes:

* IBSS

* managed

* AP

* P2P-client

* P2P-GO

* P2P-device

 

위와 같이 많은 결과 창 중 Supported interface modes에 AP가 적혀있다면, AP모드를 지원하는 인터페이스로 제가 사용하는 라즈베리파이 3 모델 b버전에서는 기본적으로 장착되어있는 무선 네트워크 인터페이스로 확인한 결과 입니다.

 

그 후, 아래와 같이 네트워크 인터페이스의 설정을 해주어야 합니다.

 

# vi /etc/network/interfaces

allow-hotplug wlan0 
iface wlan0 inet static 
    address 172.24.1.1
    netmask 255.255.255.0
    network 172.24.1.0
    broadcast 172.24.1.255
#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

 

 

vi 편집기 또는, 다른 편집기로 위의 경로의 파일을 열어 위의 내용을 추가해줍니다. 이때 wlan0는 실제 AP모드를 지원하는 네트워크 인터페이스 이름을 적으시면 되며 아래의 address는 A,B,C class중 아무거나 임의로 사용하셔도 상관 없습니다.(네트워크 형식에 맞게 지정만 해주시면 됩니다.) 

 

여기까지 네트워크 인터페이스에 설정을 하였고 아래에서는 AP모드를 어떻게 구동 할 것인지에 대한 설정입니다.

 

# vi /etc/hostapd/hostapd.conf

# This is the name of the WiFi interface we configured above
interface=wlan0

# Use the nl80211 driver with the brcmfmac driver
driver=nl80211

# This is the name of the network
ssid=Pi3-AP

# Use the 2.4GHz band
hw_mode=g

# Use channel 6
channel=6

# Enable 802.11n
ieee80211n=1

# Enable WMM
wmm_enabled=1

# Enable 40MHz channels with 20ns guard interval
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

# Accept all MAC addresses
macaddr_acl=0

# Use WPA authentication
auth_algs=1

# Require clients to know the network name
ignore_broadcast_ssid=0

# Use WPA2
wpa=2

# Use a pre-shared key
wpa_key_mgmt=WPA-PSK

# The network passphrase
wpa_passphrase=raspberry

# Use AES, instead of TKIP
rsn_pairwise=CCMP

 

위의 설정으로 AP mode가 동작하게 됩니다. 위의 사항에서 바꾸실 사항이 있으면 수정해주게 되며 ssid , passphrase(패스워드).channel 정도 변경하시면 될 것 같고 이외엔 특별한 동작을 원하시는게 아니라면 위의 설정대로 하시면 됩니다.

또한, hw_mode의 값은 아래의 명령어에 따라 적절하게 설정해주시면 됩니다.

 

# iwconfig

wlan0   IEEE 802.11bgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=31 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on

 

이렇게 하면 AP mode까지 설정을 완료하였고, 아이피를 자동으로 할당해 줄 수 있도록, DHCP서버를 설정할 차례입니다.

 

# mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

# vi /etc/dnsmasq.conf

 

interface=wlan0      # Use interface wlan0 
listen-address=172.24.1.1 # Explicitly specify the address to listen on 
bind-interfaces      # Bind to the interface to make sure we aren't sending things elsewhere 
server=8.8.8.8       # Forward DNS requests to Google DNS 
domain-needed        # Don't forward short names 
bogus-priv           # Never forward addresses in the non-routed address spaces. 
dhcp-range=172.24.1.50,172.24.1.150,12h # Assign IP addresses between 172.24.1.50 and 172.24.1.150 with a 12 hour lease time 

 

먼저 기존의 설정파일을 백업해두고, vi편집기로 위의 내용을 추가하여 주면 DHCP또한 설정이 완료 됩니다.

 

# service hostapd start

# service dnsmasq start

 

위의 명령어로 각각의 서비스를 시작해 주고, AP를 동작 시켜보도록 하겠습니다.

 

# hostapd /etc/hostapd/hostapd.conf

 

위의 명령어로 실제 APmode를 동작 시키고, 다른 기기로 WIFI를 찾으면 위에서 설정한 SSID(와이파이이름)으로 접속되어 정상적으로 IP를 받아 오는 것을 볼 수 있습니다.

 

※위의 명령어가 실행 오류가 난다면 아래의 명령어를 시도해보세요! (2번째 명령어 실행의 결과가 no로 셋팅되어있어야 합니다.)

# nmcli radio wifi off

# rfkill unblock wlan

# rfkill list

 

그리고 인터넷을 사용하면 아직 인터넷이 되지 않는데요. 아직 한단계가 남았습니다.

 

와이파이 사용자의 인터넷 사용 객체(파이어폭스,서비스 등) ----->wlan0(무선 인터페이스) -------> eth0(또는, 인터넷이 연결되어있는 인터페이스)------->ISP

 

빨간 부분에 해당하는 화살표 부분을 설정해주지 않았기 때문인데요.  우선 기본적으로 위의 화살표와 같은 동작을 하지 못하도록 설정되어있는데 아래와 같은 명령어로 동작하도록 설정할 수 있습니다.

 

# sysctl net.ipv4.ip_forward=1

 

이제 비로소 위의 화살표와 같은동작을 할 수 있도록 되었습니다! 위의 명령어는 재부팅하면 설정이 남아있지 않으므로

 

# vi /etc/sysctl.conf

 

#net.ipv4.ip_forward=1

 

위의 행을 찾아 주석을 제거(#을 제거)해주시면 재부팅 후에도 설정이 남아있습니다.

 

그럼이제 마지막으로 화살표를 eth0로 향하도록 해볼까요!?(위의 설정은 화살표로 어딘가를 가르킬 수 있는 설정이고 화살표가 실제로 네트워크 인터페이스로 가르키도록 해야합니다.)

 

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT 

# iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT 

 

 

iptables(linux방화벽)에서 해당 규칙을 추가 해주어야 하는데, 첫번째 명령어는 밖으로 나가는 ip를 eth0(인터넷이 가능한 인터페이스)로 바꿔서 나가게끔 해주는 명령어 입니다.(외부에서는 제가 설정한 APmode의 네트워크 대역, 또는 내부 인터페이스의 주소를 알 수 없습니다. 때문에, 외부에서 알 수 있는 ip로 바꿔서 나가게 해주는 것 입니다.)

 

두 세번째 명령어는 인터페이스 간 통신을 가능하게 해주는 것 입니다.

 

FORWARD정책이 기본적으로 DROP으로 되어있을 경우 내부 인터페이스끼리의 통신은 허용되지 않으므로, 위의 명령어로 서로 통신(데이터를 주고 받을 수 있는 상태)이 가능하도록 해주는 것 입니다.

 

이상으로 AP mode설명을 마치도록 하겠습니다.

 

궁금한점이 있으시면 댓글로 남겨주세요!

 

참조 : https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/

52 Comments
  • 이전 댓글 더보기
  • 프로필사진 낙은 2018.06.05 22:02 interfaces 파일

    # interfaces(5) file used by ifup(8) and ifdown(8)

    # Please note that this file is written to be used with dhcpcd
    # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

    # Include files from /etc/network/interfaces.d:
    source-directory /etc/network/interfaces.d

    allow-hotplug wlan0
    iface wlan0 inet static
    address 192.168.100.51
    netmask 255.255.255.0
    network 192.168.100.50
    broadcast 192.168.100.255
    # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

    hostapd.conf 파일

    interface=wlan0
    driver=nl80211
    ssid=ILOCK-A-1
    hw_mode=g
    channel=6
    ieee80211n=1
    wmm_enabled=1
    ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
    macaddr_acl=0
    auth_algs=1
    ignore_broadcast_ssid=0
    wpa=2
    wpa_key_mgmt=WPA-PSK
    wpa_passphrase=12345678
    rsn_pairwise=CCMP

    dnsmasq.conf 파일
    interface=wlan0 # Use interface wlan0
    listen-address=192.168.100.51 # Explicitly specify the address to listen on
    bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
    server=8.8.8.8 # Forward DNS requests to Google DNS
    domain-needed # Don't forward short names
    bogus-priv # Never forward addresses in the non-routed address spaces.
    dhcp-range=192.168.100.150,192.168.100.170,12h # Assign IP addresses between 172.24.1.50 and 172.24.1.150 with a 12 hour lease time

    이렇게 설정해놨습니다.
  • 프로필사진 낙은 2018.06.05 22:03 pi@raspberrypi:~ $ sudo hostapd /etc/hostapd/hostapd.conf
    Configuration file: /etc/hostapd/hostapd.conf
    Failed to create interface mon.wlan0: -95 (Operation not supported)
    wlan0: Could not connect to kernel driver
    Using interface wlan0 with hwaddr b8:27:eb:e4:cf:4e and ssid "ILOCK-A-1"
    wlan0: interface state UNINITIALIZED->ENABLED
    wlan0: AP-ENABLED

    지금은 이렇게 동작합니다.
  • 프로필사진 낙은 2018.06.05 22:04 넵 sudo 로 했습니다!
  • 프로필사진 Dork94 2018.06.05 22:05 신고 밑에 ap enable이라고 적혀있는데 실제로 와이파이 목록에서 잡히나요??
  • 프로필사진 낙은 2018.06.05 22:08 넵! 스마트폰 목록에서는 잡히고 있습니다. 다만 접속이 안되네요.

    wlan0: interface state UNINITIALIZED->ENABLED
    wlan0: AP-ENABLED
    wlan0: STA e4:fa:ed:b3:40:6a IEEE 802.11: associated
    wlan0: AP-STA-CONNECTED e4:fa:ed:b3:40:6a
    wlan0: STA e4:fa:ed:b3:40:6a RADIUS: starting accounting session 5B168B3D-00000000
    wlan0: STA e4:fa:ed:b3:40:6a WPA: pairwise key handshake completed (RSN)
  • 프로필사진 Dork94 2018.06.05 22:09 신고 접속이 안되는건 dhcp의 문제일 가능성이 큽니다. 아이피를 할당 받아야하는데 주지않아서 기다리다가 연결을 끊는겨죠. dhcp설정은 모두 완료하셨나요?
  • 프로필사진 낙은 2018.06.05 22:18 위에서 설정해주신대로 같이 설정하였습니다.
  • 프로필사진 Dork94 2018.06.05 22:19 신고 한 한시간 뒤쯤 공부하러갈 것 같은데 그때 연락드리겠습니다. ssh 서버 부탁드려요!
  • 프로필사진 2018.06.05 22:56 비밀댓글입니다
  • 프로필사진 Dork94 2018.06.05 23:45 신고 이제 왔습니다 잠시만요~
  • 프로필사진 Dork94 2018.06.05 23:49 신고 VNC ID Password 알려주시겠어요?
  • 프로필사진 낙은 2018.06.05 23:48 네트워크가 안되는 걸지도 몰라서 공유기 제거하고 랜선에 연결해 놨습니다~
  • 프로필사진 2018.06.05 23:49 비밀댓글입니다
  • 프로필사진 Dork94 2018.06.06 00:08 신고 고생하세요 :) 어디서 설정을 잘못하신건진 모르겠지만.. 위의 링크대로하면 됩니다.. 그리고 만드시는 어플에 인터넷이 왜 필요한지도 잘 모르겠지만 의도한바대로 잘 만드셨으면 좋겠습니다 :)
  • 프로필사진 낙은 2018.06.06 00:10 해결해주셔서 진짜 감사합니다!!! 이 늦은 시간에 vnc로 하나하나 살펴가며 영어로 설명해주셔서 (한글이 안되서...초기화를 너무 많이해서 세팅을 안했거든요) 감사합니다.
    제가 지켜본 봐 제가 안됬던 이유는 마지막 방화벽 명령어 쪽에서 sudo 로 안해줬기 때문인거 같습니다.

    # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    # iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    # iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

    이부분을 전부 sudo 로 해줘야 됬던 것 같습니다. 덕분에 iptables -L 로 아이피 테이블 확인하는 법도 배우고 많이 배워갑니다.
    진짜 감사합니다.
  • 프로필사진 Dork94 2018.06.06 00:12 신고 아하 네네 iptables는 리눅스에서 방화벽이고 보통 명령 프롬포트에서 #은 관리자 $은 일반유저를 의미합니다. :)
  • 프로필사진 낙은 2018.06.06 00:16 아하~! 그렇군요. 제가 포스팅을 상세히 살펴보지 못했네요 ㅠㅠ
    그리고 리눅스 부터 다시 많이 공부해야겠네요. 덕분에 헤매던 것을 해결하게 되어서 매우 기쁩니다.
    편안한 밤되시고요! 내일 공휴일 잘보내시길 바라겠습니다^^
  • 프로필사진 Dork94 2018.06.06 00:18 신고 넵 좋은하루 되세요 :)
  • 프로필사진 노아 2018.06.08 13:03 ap모드에서 초기 와이파이모드로 되돌아가려면 어떻게 해야하나요??
  • 프로필사진 Dork94 2018.06.08 20:07 신고 안녕하세요. 말씀해주신 것에 대해 답변드리면 초기로 돌아가시기 위해서는 AP모드를 끄시면 되는데 hostapd 및 dnsmasq 서비스를 종료하시면 됩니다.
    하지만 포스팅중 interfaces를 설정하여 인터페이스에 고정아이피를 할당하도록 되어있는데 그부분을 처음과 같이 되돌려놓으시면 고정아이피 할당이 풀려 재부팅시 정상적으로 이용이 가능할 것으로 예상됩니다 :)
  • 프로필사진 2018.06.09 23:55 비밀댓글입니다
  • 프로필사진 Dork94 2018.06.10 07:16 신고 안녕하세요. 주신 내용으로보아 169 대역은 아이피가 제대로 할당 되지 않았을때 생기는 현상입니다. 아이피를 제대로 설정해주었는지 확인하신 후 다시 시도해보시길 바랍니다. 또한, 부팅 프로그램등록도 예전 포스팅에 올린 적 있으니 필요시 참조하시면 될 것 같습니다. http://dork94.tistory.com/41
  • 프로필사진 2018.06.11 20:08 비밀댓글입니다
  • 프로필사진 Dork94 2018.06.11 20:16 신고 journalctl -xe의 결과를 보여주셔야 에러를 확인 할 수 있습니다.
  • 프로필사진 2018.06.11 20:21 비밀댓글입니다
  • 프로필사진 Dork94 2018.06.11 20:36 신고 제가 지금 운동중이라 오늘 새벽쯤에나 확인이 가능할 것 같습니다. 해당오류를 키워드로 구글 검색을 먼저 해보시겠어요?
  • 프로필사진 2018.06.11 23:18 비밀댓글입니다
  • 프로필사진 낙은 2018.06.23 18:10 안녕하세요!! 기말고사를 보느라 바빴네요. 잘지내셨나요?
    다름이아니라 저번에 물어본 게 해결이 안되서 다시 왔어요.
    저번에 말씀해주신 시작프로그램 포스팅은 잘봤습니다.
    다만 AP 기능이
    eth0 Link is up, configuring
    wlan0 : Associated with I-LOCK-A
    wlan0 : Configured 169.254.170.152/16
    네트워크에 이렇게 뜨면서 IP 할당이 안되네요...
    구글링해도 해결책이 없어요.

    지금 DB랑 JSP랑 작업 끝나서 라즈베리파이에 옮기고 실행만 하면 되는데 AP에서 자꾸 막혀서 진도를 못나가고 있네요.
    도움을 받을 수 있을까요??
  • 프로필사진 Dork94 2018.07.03 23:24 신고 안녕하세요. 잘지내셨나요? 저 또한 바쁜일정이 있어 며칠간 블로그에 신경을 쓰지 못했습니다. 말씀하신 상태에서는 169 아이피가 할당된 것으로 보아 DHCP가 정상적으로 작동하지 않거나 설정이 제대로 동작하지 않은 것 같습니다. AP모드로 사용하시는 거라면 위의 interfaces 설정을 해주시거나 쉘스크립트를 통하여 ip를 할당해주시면 문제가 해결 될 것 같습니다. 감사합니다.
  • 프로필사진 좋음 2018.09.04 02:29 안녕하세요 ^^ 라즈베이파이로 공유기에 wlan으로 와이파이를 무선으로 연결한 상태에서 무선랜카드를 장착하여서 랜선을 연결하지 않고 핸드폰에서 와이파이를 통하여 라즈베이파이를 공유기로 사용하고 무선랜카드로 와이파이 신호를 받고 싶은데 이더넷 연결 말고 wlan0 wlan1 두개만으로는 안될까요?
  • 프로필사진 좋음 2018.09.04 02:30 라즈베리파이는 2개 보유중입니다
  • 프로필사진 Dork94 2018.09.04 02:41 신고 충분히 가능한 상황인 것 같습니다. 시도해 보지는 않았지만, 가능할 것으로 생각되며, 쉽게말해 브릿지를 만드시려는 의도처럼 보이는데 맞나요?
  • 프로필사진 kpd 2018.11.05 13:22 안녕하세요
    제가 궁금한게 있어서.. 문의좀 드립니다.
    제가 이해를 잘 못한걸지도 몰라서요

    제가 실제 해보고 싶은건..
    와이파이 -----1-----> 라즈베리 파이3 + -----2-----> 모바일기기(스마트폰)
    이런 구성입니다.

    랜케이블로 들어오는정보가 아니라 와이파이 신호를 잡은것을 다시 ap모드로 보낼수 있는가 하는겁니다.

    이 글이 그 내용은 아닌거 같긴한데..
    일단 제가 말씀드린 구성이 가능한건지 궁금하구요..

    실제 가능하다면 제 생각에는 제가 가지고 있는
    usb형무선동글(iptime n100mini)같은게 따로 있어야 할것도 같은데..

    조언좀 부탁드립니다.
    감사합니다.
  • 프로필사진 Choing 2018.11.25 23:07 안녕하세요 이더넷에 연결하지 직전 단계까지 따라한 후 테스트를 해보기 위하여 휴대폰과 연결을 시도했고, ip할당에서 자꾸 막혀서 dhcp 서버를 확인해보니 "failed to create listening socket for 172.24.1.1: Cannot assign requested address" 라는데 어떻게 해결할 수 있나요?
댓글쓰기 폼