새로운 컴퓨터에 설치하기 위한 단계별 가이드
WiFi 핫스팟을 구축하기 위해 두 가지 필수 패키지가 필요합니다. hostapd는 WiFi 액세스 포인트 역할을 수행하며, dnsmasq는 DHCP 서버와 DNS 포워더 역할을 담당합니다.
sudo apt update
sudo apt install hostapd dnsmasq iptables-persistent -y
설치 후 서비스 중지 (설정 완료 전까지):
sudo systemctl stop hostapd
sudo systemctl stop dnsmasq
hostapd는 무선 인터페이스를 액세스 포인트로 동작시키는 데몬입니다. SSID, 비밀번호, 채널, 보안 모드 등을 설정합니다.
설정 파일 생성:
sudo nano /etc/hostapd/hostapd.conf
파일 내용:
interface=wlp0s20f3
driver=nl80211
ssid=YourSSID
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
wpa_passphrase=YourPassword
| 설정 항목 | 설명 |
|---|---|
| interface | 무선 인터페이스 이름 (iwconfig로 확인) |
| ssid | WiFi 네트워크 이름 |
| hw_mode=g | 2.4GHz 대역 (a: 5GHz) |
| wpa=2 | WPA2 보안 |
| wpa_pairwise=CCMP | AES 암호화 (TKIP는 취약하므로 사용 지양) |
| wpa_passphrase | WiFi 비밀번호 (8자 이상) |
dnsmasq는 가벼운 DHCP 및 DNS 서버입니다. 핫스팟에 연결된 클라이언트에게 IP 주소를 할당하고 DNS 쿼리를 처리합니다.
설정 파일 편집:
sudo nano /etc/dnsmasq.conf
파일 내용 (기존 내용은 주석 처리 후 추가):
interface=wlp0s20f3
dhcp-range=10.0.0.50,10.0.0.150,12h
dhcp-option=3,10.0.0.1
dhcp-option=6,10.0.0.1,8.8.8.8
bind-interfaces
server=8.8.8.8
| 설정 항목 | 설명 |
|---|---|
| interface | DHCP를 제공할 인터페이스 |
| dhcp-range | 할당할 IP 범위와 임대 시간 |
| dhcp-option=3 | 게이트웨이 주소 (필수!) |
| dhcp-option=6 | DNS 서버 주소 |
| bind-interfaces | 지정된 인터페이스에만 바인딩 |
무선 인터페이스에 고정 IP 주소를 할당해야 합니다.
sudo nano /etc/network/interfaces
추가할 내용:
auto wlp0s20f3
iface wlp0s20f3 inet static
address 10.0.0.1
netmask 255.255.255.0
sudo nano /etc/netplan/01-network-manager-all.yaml
기존 내용에 추가:
wlp0s20f3:
dhcp4: no
addresses: [10.0.0.1/24]
sudo netplan apply
NetworkManager가 무선 인터페이스를 관리하지 않도록 설정:
sudo nano /etc/NetworkManager/NetworkManager.conf
추가:
[keyfile]
unmanaged-devices=interface-name:wlp0s20f3
핫스팟 클라이언트가 인터넷에 접속하려면 IP 포워딩이 활성화되어야 합니다.
임시 활성화:
sudo sysctl -w net.ipv4.ip_forward=1
영구 설정:
sudo nano /etc/sysctl.conf
파일 끝에 추가:
net.ipv4.ip_forward=1
sudo sysctl -p
⚠️ 핵심: 무선 인터페이스가 속한 영역의 target을 ACCEPT로 설정해야 합니다. 이 설정이 없으면 "admin prohibited filter" 오류로 인터넷이 차단됩니다!
무선 인터페이스 영역 확인:
sudo firewall-cmd --get-active-zones
무선 인터페이스를 internal 영역에 추가:
sudo firewall-cmd --zone=internal --add-interface=wlp0s20f3 --permanent
sudo firewall-cmd --reload
internal 영역 target을 ACCEPT로 변경 (필수!):
sudo firewall-cmd --zone=internal --set-target=ACCEPT --permanent
sudo firewall-cmd --reload
public 영역에 masquerade 활성화:
sudo firewall-cmd --zone=public --add-masquerade --permanent
sudo firewall-cmd --reload
설정 확인:
sudo firewall-cmd --zone=internal --list-all
target: ACCEPT로 표시되어야 합니다!
서비스 활성화:
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl enable dnsmasq
서비스 시작:
sudo systemctl start hostapd
sudo systemctl start dnsmasq
서비스 상태 확인:
sudo systemctl status hostapd
sudo systemctl status dnsmasq
재부팅:
sudo reboot
재부팅 후 확인 항목:
# 서비스 상태
systemctl status hostapd dnsmasq
# IP 주소
ip addr show wlp0s20f3
# IP 포워딩
cat /proc/sys/net/ipv4/ip_forward
# 방화벽
sudo firewall-cmd --zone=internal --list-all
가장 흔한 원인은 방화벽 설정입니다.
# internal 영역 target 확인
sudo firewall-cmd --zone=internal --list-all
# ACCEPT로 변경
sudo firewall-cmd --zone=internal --set-target=ACCEPT --permanent
sudo firewall-cmd --reload
진단 명령어:
# 패킷 모니터링
sudo tcpdump -i wlp0s20f3 -n
# NAT 패킷 확인
sudo tcpdump -i enp109s0 -n icmp
# 방화벽 로그
sudo journalctl -u firewalld -f
# 무선 인터페이스 확인
iwconfig
# 로그 확인
sudo journalctl -u hostapd -n 50
# dnsmasq 로그 확인
journalctl -u dnsmasq
# DHCP 할당 확인
sudo cat /var/lib/misc/dnsmasq.leases
| 파일 경로 | 용도 |
|---|---|
| /etc/hostapd/hostapd.conf | WiFi AP 설정 |
| /etc/dnsmasq.conf | DHCP/DNS 서버 설정 |
| /etc/network/interfaces | 정적 IP 설정 (legacy) |
| /etc/netplan/*.yaml | 정적 IP 설정 (Netplan) |
| /etc/sysctl.conf | IP 포워딩 설정 |
| /etc/NetworkManager/NetworkManager.conf | NM 인터페이스 제외 설정 |
# === 한 번에 실행 ===
# 1. 패키지 설치
sudo apt install hostapd dnsmasq iptables-persistent -y
# 2. IP 포워딩
sudo sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
# 3. firewalld 설정
sudo firewall-cmd --zone=internal --add-interface=wlp0s20f3 --permanent
sudo firewall-cmd --zone=internal --set-target=ACCEPT --permanent
sudo firewall-cmd --zone=public --add-masquerade --permanent
sudo firewall-cmd --reload
# 4. 서비스 활성화
sudo systemctl unmask hostapd
sudo systemctl enable hostapd dnsmasq
sudo systemctl start hostapd dnsmasq
sudo nano /etc/systemd/system/wlan0-static.service
[Unit]
Description=Assign static IP to AP interface after hostapd starts
After=hostapd.service
Wants=hostapd.service
[Service]
Type=oneshot
ExecStart=/sbin/ip link set wlp0s20f3 up
ExecStart=/sbin/ip addr add 10.0.0.1/24 dev wlp0s20f3
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable wlan0-static.service
sudo systemctl start wlan0-static.service
ip addr show wlp0s20f3
journalctl -u wlan0-static.service
ifconfig -a | grep wlp0s20f3
wlp0s20f3: flags=4163 mtu 1500
inet 10.0.0.1 netmask 255.255.255.0 broadcast 0.0.0.0
ether c0:a5:e8:aa:d0:57 txqueuelen 1000 (Ethernet)
RX packets 21052 bytes 4537776 (4.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 19793 bytes 20612047 (20.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
systemctl status hostapd dnsmasq
● hostapd.service - Access point and authentication server for Wi-Fi
Loaded: loaded (/lib/systemd/system/hostapd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2026-03-22 17:29:31 KST; 1h 14min ago
Main PID: 11909 (hostapd)
Tasks: 1 (limit: 37811)
Memory: 1.3M
CPU: 204ms
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2026-03-22 17:29:50 KST; 1h 13min ago
Main PID: 12044 (dnsmasq)
⚠️ hostapd 로그 (클라이언트 연결 상태)
3월 22 17:59:19 hostapd[11909]: wlp0s20f3: STA 98:b8:ba:10:71:2a WPA: pairwise key handshake completed
3월 22 18:23:38 hostapd[11909]: wlp0s20f3: STA ac:f6:f7:b3:a6:b1 associated (aid 2)
3월 22 18:23:46 hostapd[11909]: wlp0s20f3: STA 5e:e5:00:33:83:90 WPA: pairwise key handshake completed
⚠️ dnsmasq 로그 (경고)
3월 22 17:49:55 dnsmasq-dhcp[12044]: DHCP packet received on wlp0s20f3 which has no address
✅ 완료! 이제 클라이언트에서 WiFi 에 연결하여 인터넷이 되는지 확인하세요.
댓글목록
관리자님의 댓글