Docker 컨테이너로 와이파이 AP 만들기 (Intel NUC J5005)
안녕하세요? 도정진입니다.
이게 실은 hostapd 하려면 bridge 모드 말고는 만들기가 굉장히 불편합니다.
이전 글은 아래와 같습니다.
https://blog.djjproject.com/134
이에 따라 컨테이너로 좀 해보면 쉽지 않을까.. 해서 찾아보았는데 아래가 되네요.
바로 시작합니다.
1. wpa_supplicant 자동 시작 종료
일단은 wpa_supplicant 가 systemctl disable 해도 동작되는 문제가 있습니다. dbus 에 의해서 시작이 되는데요.
이를 mask 처리해서 죽여야합니다. 컨테이너의 hostapd 와 같이 동작하면 짜부가 나서 죽는 경우가 있습니다.
root@debian:~# systemctl disable wpa_supplicant.service root@debian:~# systemctl mask wpa_supplicant.service |
설정하고 리부팅을 해줍니다.
root@debian:~# reboot |
wpa_supplicant 가 도는지 확인을 해봅니다.
root@debian:~# ps -ef | grep wpa_su root 15374 1091 0 05:02 pts/1 00:00:00 grep wpa_su |
2. 컨테이너 실행
일단은 wifi 가 뭔지 찾아봅니다.
root@debian:~# ifconfig vmbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.17 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::1e69:7aff:fe09:6d01 prefixlen 64 scopeid 0x20<link> ether 1c:69:7a:09:6d:01 txqueuelen 1000 (Ethernet) RX packets 399266 bytes 423619330 (403.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 183037 bytes 25617915 (24.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlo2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.254.1 netmask 255.255.255.0 broadcast 0.0.0.0 ether 50:76:af:ac:0e:6d txqueuelen 1000 (Ethernet) RX packets 30518 bytes 3376887 (3.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 254997 bytes 330818390 (315.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 |
proxmox 를 사용하기 때문에 이더넷이 enp2s0 등의 이름이 아니네요. vmbr0 이더넷이고 wlo2 가 와이파이 입니다.
아래와 같이 컨테이너를 실행합니다.
root@debian:~# docker run --restart unless-stopped -dit --name wifiap \ -e INTERFACE=wlo2 \ -e OUTGOINGS=vmbr0 \ --net host --privileged offlinehacker/docker-ap |
3. 와이파이 설정 수정
일단은 이 컨테이너는 env 로 설정을 주면 잘 동작하지만, 일단은 귀찮아서 아래와 같이 수정을 합니다.
root@debian:/opt/wifiap# docker cp wifiap:/etc/hostapd.conf hostapd.conf root@debian:/opt/wifiap# cat hostapd.conf interface=wlo2 driver=nl80211 ssid=j5005 hw_mode=g channel=1 wpa=2 wpa_passphrase=12345678 wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP rsn_pairwise=CCMP wpa_ptk_rekey=600 ieee80211n=1 wmm_enabled=1 |
ac 모드나 a 모드가 지원되는지 테스트를 해보니 잘 안되네요.
그래서 그냥 2.4G 모드의 20MHz 로 설정을 하였습니다. 아마도 이 AC 와이파이를 하려면 hostapd 를 재컴파일 해야하고 j5005 의 와이파이 드라이버 iwlwifi 도 지원을 해야할 것입니다.
설정값을 다시 넣어줍니다.
root@debian:~# docker cp /opt/wifiap/hostapd.conf wifiap:/etc/hostapd.conf root@debian:~# docker restart wifiap wifiap |
4. 동작 체크
로그를 먼저 확인합니다.
root@debian:~# docker logs -f wifiap --tail 20 1 Setting iptables for outgoing traffics on vmbr0... Configuring DHCP server .. Starting DHCP server .. Internet Systems Consortium DHCP Server 4.4.2 Copyright 2004-2020 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Config file: /etc/dhcp/dhcpd.conf Database file: /var/lib/dhcp/dhcpd.leases PID file: /run/dhcp/dhcpd.pid Wrote 1 leases to leases file. Listening on LPF/wlo2/50:76:af:ac:0e:6d/192.168.254.0/24 Sending on LPF/wlo2/50:76:af:ac:0e:6d/192.168.254.0/24 Sending on Socket/fallback/fallback-net Starting HostAP daemon ... Configuration file: /etc/hostapd.conf Using interface wlo2 with hwaddr 50:76:af:ac:0e:6d and ssid "j5005" wlo2: interface state UNINITIALIZED->ENABLED wlo2: AP-ENABLED |
연결을 시도하면 아래와 같이 로그가 추가적으로 뜹니다.
wlo2: AP-STA-CONNECTED ce:9f:46:74:fa:86 wlo2: STA ce:9f:46:74:fa:86 RADIUS: starting accounting session B377C5A131088FA1 wlo2: STA ce:9f:46:74:fa:86 WPA: pairwise key handshake completed (RSN) |
5. 속도 측정
J5005 의 내장 안테나와 신발장에 둔 덕분인지 속도가 처참하네요.. ㅎㅎ
기회가 된다면 WIFI 5GHz 부분이 되는지도 체크를 해봐야겠네요.
마치겠습니다.
감사합니다.