Dork's port

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

Raspberry Pi

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

Dork94 2017. 9. 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/

Comments