AP 모드

기본적으로 라즈베리파이 SD카드에 AP(Access Point) 설정됩니다.

AP 관련 설치 및 설정

  • 아래의 명렁어를 통해 패키지를 업데이트 해줍니다.

sudo apt-get update
  • 아래의 명렁어를 통해 AP, DNS 관련 패키지를 설치합니다.

sudo apt-get install hostapd dnsmasq
  • 설정을 변경하기 전에 hostapd, dnsmasq 서비스를 중지하여 충돌을 방지합니다.

sudo systemctl stop hostapd
sudo systemctl stop dnsmasq
  • 아래의 명렁어를 통해 Wifi 설정합니다.

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
country=KR
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="idearobot"
        psk="idearobot123"
        key_mgmt=WPA-PSK
}
  • 아래의 명렁어를 통해 AP 모드에서 사용할 인터페이스와 IP를 설정해줍니다.

sudo nano /etc/dhcpcd.conf
interface ap0
        static ip_address=192.168.10.1/24
        nohook wpa_supplicant
  • 아래의 명렁어를 통해 AP 모드에서 사용할 DHCP IP 주소 범위를 지정해줍니다.

sudo nano /etc/dnsmasq.conf
interface=ap0
dhcp-range=192.168.10.2,192.168.10.20,255.255.255.0,24h
  • 아래의 명령어를 통해 AP SSID 설정 및 실행 파일 생성해줍니다.

nano /home/pi/ap.py
import subprocess

interface = "ap0"
password = "1234567890"

def get_mac_address(interface):
    result = subprocess.check_output(["cat", f"/sys/class/net/{interface}/address"]).decode("utf-8")
    mac_address = result.strip().replace(":", "")
    return mac_address

raspberry_pi_mac = get_mac_address(interface)

ssid = f"STELLA{raspberry_pi_mac}"
print("SSID:", ssid)

hostapd_config = f"""interface={interface}
ssid={ssid}
hw_mode=g
channel=7
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase={password}
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
"""

with open("/etc/hostapd/hostapd.conf", "w") as f:
    f.write(hostapd_config)

subprocess.run(["sudo", "systemctl", "restart", "hostapd"])
  • 아래의 명령어를 통해 실행 권한 부여합니다.

chmod +x /home/pi/ap.py
  • 아래의 명령어를 통해 Hostapd 설정합니다.

sudo nano /etc/default/hostapd

기존 hostapd 파일 맨 밑에 아래의 명령어 작성

DAEMON_CONF="/etc/hostapd/hostapd.conf"
  • 아래의 명령어를 통해 IP 포워딩 활성화를 합니다.

sudo nano /etc/sysctl.conf

아래의 부분 주석 제거

net.ipv4.ip_forward=1
  • 아래의 명령어를 통해 NAT 설정하여 AP로 인터넷 공유가 가능하도록 합니다.

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
  • 아래의 명령어를 통해 NAT 룰을 저장하여 재부팅 시 유지되게 합니다.

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
  • 아래의 명령어를 통해 NAT 설정 유지 및 AP Python 파일 자동으로 활성화하도록 합니다.

sudo nano /etc/rc.local

-exit 0 앞에 추가해줍니다.

iptables-restore < /etc/iptables.ipv4.nat
sleep 5
python3 /home/pi/ap.py
  • 아래의 명령어를 통해 네트워크 인터페이스를 설정해줍니다.

sudo nano /etc/network/interfaces

맨 아래 추가해줍니다.

source /etc/network/interfaces.d/*
auto ap0
iface ap0 inet static
        address 192.168.10.1
        netmask 255.255.255.0
        network 192.168.10.0
        broadcast 192.168.10.255
  • 아래의 명령어를 통해 AP 인터페이스 스크립트를 생성해줍니다.

sudo nano /usr/local/bin/create_ap0.sh

빈 파일에 작성해줍니다.

#!/bin/bash

# Create ap0 interface
iw dev wlan0 interface add ap0 type __ap

# Bring up ap0 interface
ifconfig ap0 up
  • 아래의 명령어를 통해 스크립트 실행 권한 부여해줍니다.

sudo chmod +x /usr/local/bin/create_ap0.sh
  • 아래의 명령어를 통해 부팅 시 AP 인터페이스 생성을 자동화 해줍니다.

sudo nano /etc/systemd/system/create_ap0.service

맨 아래 추가해줍니다.

[Unit]
Description=Create ap0 interface at boot
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/create_ap0.sh
RemainAfterExit=true

[Install]
WantedBy=multi-user.target
  • 아래의 명령어를 통해 부팅시 자동 실행되도록 설정해줍니다.

sudo systemctl enable create_ap0.service
  • 아래의 명령어를 이용해서 네트워크 서비스를 재시작합니다.

sudo systemctl start create_ap0.service
sudo systemctl restart networking
sudo systemctl restart hostapd
sudo systemctl restart dnsmasq
  • 아래의 명렁어를 이용해서 Pi를 재시작 합니다.

sudo reboot

Last updated