-
OpenWrt ๋ฅผ docker ๋ก :: OpenWrt, SDK, Package, ipk, scpSECURITY/OpenWrt 2021. 7. 16. 18:33
๋ฌด์ ๊ณต์ ๊ธฐ๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋ฐํ๋ ํ๋ก์ ํธ๋ฅผ ์ํด OpenWrt ๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋ค. (๊ด๋ จ ๋ด์ฉ๋ ๊ธฐํ๊ฐ ๋๋ฉด ํฌ์คํ ํ๊ฒ ๋ค)
OpenWrt ๊ณต์ ๋ฌธ์ (ํนํ, ๊ฐ๋ฐ ๊ฐ์ด๋ https://openwrt.org/docs/guide-developer/start) ๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ณธ ๊ฒฐ๊ณผ, ๊ฐ๋ฐ ํ๋ฆ์ ์๊ฒ ๋์์ง๋ง, ์ค์ ๊ณต์ ๊ธฐ๊ฐ ์์ด์ ๊ณต์ ๊ธฐ๋ฅผ ๋์ฒดํ๊ธฐ ์ํด Docker ๋ก ํ ์คํธํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
(Docker ๋ฅผ Windows10 ์ ์ค์นํ๋ ๋ฐฉ๋ฒ์
์ฐธ๊ณ !)
OpenWrt ๋ OS ์ ํ ์ข ๋ฅ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ณ , ๊ณต์์ ์ผ๋ก Docker Image ๋ฅผ ์ ๊ณตํด์ฃผ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋์ปค๋ฅผ ์ฌ์ฉํ์ง ์์ ์ด์ ๊ฐ ์๋ค!
(๊ทธ๋๋ ์์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ ์คํ ํด๋ ๋ฌด๊ด~)
OpenWrt ๊ณต์ github ์ docker repository ๊ฐ ์๋ค. (https://github.com/openwrt/docker)
README ์ ์ฌ์ฉ๋ฒ์ ๋ํด ์์ฑ๋์ด ์๋๋ฐ, ํฌ๊ฒ rootfs, sdk, imagebuilder ์ ์ฌ์ฉํ ์ ์๋ Docker Image ๋ฅผ ์ ๊ณตํ๋ค.
๋๋ SDK ๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐํ ๊ฒ์ด๋ฏ๋ก, rootfs ์ sdk ์ ๋ํ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
OpenWrt rootfs
root file system ์ผ๋ก, OpenWrt ์ rootfs ๋ฅผ ์ ๊ณตํ๋ค.
์ด ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ปค์์ OpenWrt ๋ฅผ ์ฌ์ฉํ๊ณ ํ ์คํ ํ ์ ์๋ค.
PowerShell ์ docker rootfs ์ ๋ํ ์ด๋ฏธ์ง๋ก ์ปจํ ์ด๋๋ฅผ ์๋ก ๋ง๋ค์.
์ง๊ธ์ ํด๋น ์ด๋ฏธ์ง๋ฅผ ์ฒ์ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ ๋จผ์ Pulling ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ค์์ ์ ๋ ฅํด์ฃผ์.
docker run --rm -it openwrtorg/rootfs
์ด๋ ๊ฒ ์ฑ๊ณต์ ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๋ฉด, ์ํฐ๋ฅผ ์ ๋ ฅํด๋ณด์.
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด OpenWrt ๋ก๊ณ ๊ฐ ๋์จ๋ค !
ifconfig ๋ฅผ ์ ๋ ฅํ์ฌ ip ๋ฅผ ํ์ธํด๋ณด๊ฒ ๋ค.
(ํน์ ip addr show ์ ๋ ฅ)
๋์ปค๋ ์ปจํ ์ด๋์ ๋ด๋ถ IP ๋ฅผ 172.17.0.x ๋ก ์์ฐจ์ ์ผ๋ก ํ ๋นํ๋ค.
์ง๊ธ OpenWrt rootfs ์ปจํ ์ด๋์ IP ๋ 172.17.0.3 ์์ ํ์ธํ ์ ์๋ค.
passwd ๋ฅผ ์ ๋ ฅํ๋ฉด ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํ ์ ์๋ค.
(์ด๋ ์ดํ ํ์ผ์ ์ ์กํ ๋ ์ด์ฉํ ๊ฒ์ด๋, ํ์ผ์ ์ ์กํ ๊ณํ์ด ์๋ค๋ฉด.. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ถ๊ฐ์ ์ธ ๋น๋ฐ๋ฒํธ๊ฐ ํ์ํ ์ผ์ ํ ๊ฒ์ด๋ผ๋ฉด ๋น๋ฐ๋ฒํธ ๊น๋จน์ง ์๋๋ก ์ฃผ์!)
OpenWrt SDK
SDK ๋ cross compile ํ ์ ์๋๋ก ์ ๊ณตํ๋, pre-compiled toolchain ์ด๋ค.
(https://openwrt.org/docs/guide-developer/using_the_sdk)
์ ์ฒด firmware ๋ฅผ ์ปดํ์ผ ํ ์๋ ์์ง๋ง, ์ปค์คํ ์ํํธ์จ์ด๋ฅผ ์ปดํ์ผํ๋ ๊ฒ์ ๊ฐ๋ฅํ๋ค.
์ ์๊ฐ ํ์ํ๋ค๋ฉด cross compile ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฐ๋ก ๊ตฌ์ถํด์ผ ํ๊ณ , ๋์ ๊ฒฝ์ฐ ํ์๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ SDK ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ openwrtorg/sdk ์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค.
README ๋๋ก ๋ค์ ๋ด์ฉ์ ์ ๋ ฅํ๋ค. (๊ทธ๋๋ก ์ ๋ ฅํ๋ฉด $(pwd) ๋ก ์ธํด ์ค๋ฅ๊ฐ ๋์ง๋ง, ๊ทธ๋ฅ ์งํํ๋ค. ๋ถ๋ฌ์์ ๋ค์ ์คํ์ํค๋ฉด ๋๋๊น!)
docker run --rm -v "$(pwd)"/bin/:/home/build/openwrt/bin -it openwrtorg/sdk
์ปจํ ์ด๋๋ฅผ ์คํ์ํค๋ฉด ๋ค์๊ณผ ๊ฐ์ด SDK ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
ํ์ผ ๊ตฌ์กฐ๋ฅผ ํ์ธํด๋ณด๋, ํ์ํ ๋ด์ฉ๋ค์ ํ์ธํ ์ ์์๋ค.
๊ทธ ์ค์์ staging_dir ์ target (OpenWrt) ์ ๋ํ ํด์ฒด์ธ์ด ์๋ ํด๋๋ก, ํด๋น ํด๋์ toohain-x86_64_gcc-* ๋ก ์ปดํ์ผํด์ ์ฌ์ฉํ ์ ์๋ค. ํด๋น gcc ๋ก ๋ด๊ฐ ์ํ๋ ํ์ผ OpenWrt ๋ฒ์ ๊ณผ CPU ๋ฑ์ ๋ง๊ฒ ์ปดํ์ผ ํ ์ ์๋ค. ๊ต์ฐจ ์ปดํ์ผ ํ๊ฒฝ์ ๊ตฌ์ฑํ ์ ์๋ ๊ฒ์ด๋ค.
์ด์ ํ์ํ ๋๊ตฌ๋ค์ ์ค์นํด๋ณด๊ฒ ๋ค.
vim ์ ๊ผญ ์ค์นํด๋์ด์ผ์ง ๋์ค์ ํ์ผ์ ์์ฑํ ์ ์๋ค.
์ฒ์ ์ค์นํ ๊ฒฝ์ฐ vim ์ด ์์ ๊ฒ์ด๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ค์นํด์ค๋ค.
$ sudo apt-get update $ sudo apt-get install vim
Package ๋ค์ด๋ฐ์์ OpenWrt ์ ์ค์นํ๊ธฐ
์ด๋ฒ์ ์์ ๊ฐ์ด 2๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์ด์ฉํด์,
SDK ์ปจํ ์ด๋์์ ํน์ Package ๋ฅผ ์ปดํ์ผํ๊ณ OpenWrt ์ปจํ ์ด๋๋ก ๋ณด๋ด์ ์ค์นํด๋ณด๊ฒ ๋ค.
OpenWrt ๋ด์์ ์ง์ ํจํค์ง๋ฅผ ๋ค์ด๋ฐ์ ์ค์นํ ์ ์์ง๋ง, ์ถํ ๋ด๊ฐ ์ง์ ํจํค์ง๋ฅผ ๊ฐ๋ฐํ๊ณ SDK ๋ก ๋น๋ํ ๊ฒ์ ๊ณต๋ถํ๊ธฐ ์ํด SDK ์ปจํ ์ด๋์์ ํน์ ํจํค์ง๋ฅผ ๋ค์ด๋ฐ์ ๋น๋ํ๊ณ , OpenWrt ์ ๋ณด๋ธ ๋ค ์ค์นํ๋ ๊ณผ์ ์ ์ง์ ํด๋ณด๋ ค๋ ๊ฒ์ด๋ค.
* Step 1~4 ๋ SDK ์ปจํ ์ด๋์์ ์คํํ๊ณ , Step 5 ๋ OpenWrt ์ปจํ ์ด๋์์ ์คํํ๋ค.
Step 1) Install Package
SDK ์ ํจํค์ง๋ฅผ ์ค์นํ๊ธฐ ์ํด์ ๋ค์ ๋ช ๋ น๋ฅผ ์ ๋ ฅํด์ฃผ์.
$ ./scripts/feeds update -a $ ./scripts/feeds install -a
๋ง์ผ ์ ์ฒด ํจํค์ง๋ฅผ ๋ฐ๊ธฐ ๋ณด๋ค๋ ํน์ ํจํค์ง [PACKAGE_NAME] ๋ง ํ์ํ ๊ฒฝ์ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ค.
$ ./scripts/feeds update -a $ ./scripts/feeds install [PACKAGE_NAME]
(ex. ./scripts/feeds install firewall)
๋์ ๊ฒฝ์ฐ, hostapd ๋ผ๋ ํจํค์ง๋ฅผ ๋ค์ด๋ฐ์๋ค.
Step 2) ์์ ์ ๊ณต์ ๊ธฐ์ ๋ง๊ฒ ๋น๋ ํ๊ฒฝ์ ์ค์ ํ๋ค.
$ make menuconfig
Target System ๊ณผ Target Profile ์ ์ค์ ํ๋ค.
OpenWrt ์ ์ง์ ๊ณต์ ๊ธฐ ๋ชฉ๋ก์์ ์์ ์ ๊ณต์ ๊ธฐ๋ฅผ ์ฐพ๊ณ , ํด๋น ๊ณต์ ๊ธฐ์ CPU ์ ๋ฒ์ ์ ์์๋ณธ ๋ค ๊ทธ์ ๋ง๊ฒ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
ํน์ ๋ชจ๋ฅด๋ ๋น๋ ์ ์๋ ๋ช ๋ น์ด๋ก ํ์ธํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
$ make defconfig $ make prereq
make deconfig ๋ ์ค์ ํ์ผ(.config) ์ด ์์ ๊ฒฝ์ฐ default configuration ์ ์์ฑํด์ค๋ค.
๋ค๋ง ์ฐ๋ฆฌ๋ ์์์ make menuconfig ์ผ๋ก .config ํ์ผ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ฌ์ค์ ํ ํ์๋ ์๋ค.
์ด๋ฏธ ์ค์ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ make defconfig ๊ฐ ๊ธฐ์กด ํ์ผ์ ๋ณ๊ฒฝํ์ง ์๋๋ค.
make prereq ๋ ์ค์ build ์ ํ์ํ Architecture ๊ด๋ จ ๋ถ๋ถ์ด ๋๋ฝ๋๋์ง ํ์ธํ๋ ์ฝ๋์ธ ๊ฒ์ผ๋ก ์ฐพ์๋ค.
(์ฐธ๊ณ - https://technote.kr/167)
Step 3) ๋น๋ํ๊ธฐ
์๊น ๋ค์ด๋ฐ์ hostapd ํจํค์ง๋ฅผ ๋น๋ํด๋ณด์.
๊ธฐ๋ณธ์ ์ผ๋ก ํน์ ํจํค์ง๋ฅผ ๋น๋ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ฉด ๋๊ณ , ์ ์ฒด ํจํค์ง๋ฅผ ๋น๋ํ๋ ค๋ฉด ํน์ ํจํค์ง๋ฅผ ์ง์ ํ์ง ์๊ณ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
$ make package/[PACKAGE_NAME]/{clean,compile} V=s -j$(nproc)
make ๋ง ์ ๋ ฅํ๋๋ผ๋ ๋น๋๊ฐ ์งํ๋๊ธฐ ๋๋ฌธ์ ๋ค์ V=s ์ -j$(nproc) ์ ์ต์ ์ด๋ค.
V=s ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋๋ก ํ๋ ์ต์ ์ด๊ณ , -j$(nproc) ๋ ๋น๋๋ฅผ ๋ ๋นจ๋ฆฌ ํ๊ธฐ ์ํด์ ์์ ์ CPU ๊ฐ์์ ๋ง๊ฒ ์ต์ ์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด๋ค.
๋๋ hostapd ๋ฅผ ๋น๋ํ๊ธฐ ์ํด make package/hostapd/compile ์ ์คํํด์ฃผ์๋ค.
๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ธ .ipk ํ์ผ์ (๋์ ๊ฒฝ์ฐ) bin/packages/x86_64/base ์ ์์๋ค.
๋ณดํต bin/[TARGET]/pakages/base ์ ์์ ๊ฒ์ด๋ค.
Step 4) .ipk ํ์ผ์ OpenWrt ์ปจํ ์ด๋๋ก ์ ์กํ๊ธฐ
ํ์ผ์ ๋คํธ์ํฌ๋ก ์ ์กํ๊ธฐ ์ํด์ scp (: ํ์ผ ์ ์ก ํ๋กํ ์ฝ) ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
scp ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
$ scp FILE_NAME TARGET_USER_NAME@TARGET_IP:TARGET_DIR
- FILE_NAME: ์ ์กํ ํ์ผ๋ช
- TARGET_USER_NAME: ์ ์กํ ํ์ผ์ ์ฌ์ฉ์ ์ด๋ฆ
- TARGET_IP: ์ ์กํ ํ์ผ์ IP ์ฃผ์
- TARGET_DIR: ํ์ผ์ ์ ์ก ํ์ผ์ ์ด๋ ํด๋์ ์ ์ฅํ ์ง ๋ช ์ (/ ๋ root ์ ์ ์ฅ)
๋ฐ๋ผ์ scp ๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์ ip ์ฃผ์๊ฐ ํ์ํ๋ฐ, ๋ด๊ฐ ๋ง๋ OpenWrt ์ปจํ ์ด๋์ ip ์ฃผ์๋ ์์์ ํ์ธํ ๊ฒ๊ณผ ๊ฐ์ด 172.17.0.3 ์ด๋ค. ๋, OpenWrt ์ปจํ ์ด๋์ ์ฌ์ฉ์ ์ด๋ฆ์ root ๋ก ํ๋ฉด ๋๊ณ (๋ณ๋ ํ์ธ ํ์) , ํ์ผ์ ๋ฃจํธ ๊ฒฝ๋ก์ ์ ์ฅํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํด์ฃผ์๋ค.
$ scp FILE_NAME root@172.17.0.3:/
์ฐ์ธก์ ์ ์ก ์ํฉ์ด ๋จ๋ฉด์ ์ ์ ์ก๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. (100%)
Step 5) OpenWrt ์ปจํ ์ด๋ค์์ .ipk ์ค์นํ๊ธฐ
* ์ด ๋จ๊ณ๋ OpenWrt ์ปจํ ์ด๋์์ ์คํํ๋ค.
๋จผ์ hostapd ๋ฅผ ์ ๋ ฅํด๋ณด๋ฉด, not found ๋ผ๊ณ ๋จ๋ฉด์ ์์ง์ ํด๋น ๋ช ๋ น์ด๋ก ์คํํ ์ ์๋ ํ๋ก๊ทธ๋จ์ด ์์์ ์ ์ ์๋ค.
ipk ํ์ผ์ ์ค์นํ๊ธฐ ์ํด, ๋จผ์ Step 4 ์์ OpenWrt ์ปจํ ์ด๋๋ก ipk ํ์ผ์ ๋ณด๋ธ ๊ฒ์ ๋ฃจํธ ํด๋์์ ํ์ธํด๋ณด์.
ํด๋น ํ์ผ์ด ์ ์ ์ก๋์์์ ํ์ธํ ์ ์๋ค.
OpenWrt ๋ opkg (Open PacKaGe management system) ์ผ๋ก ํจํค์ง๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ์ง์ํ๋ค.
opkg ๋ ํจํค์ง ๊ด๋ฆฌ ํด๋ก, ์ฌ์ฉ๋๋ ํจํค์ง ํ์ผ์ .ipk, .opk ์ ํ์ฅ์๋ฅผ ๊ฐ์ง๋ฉฐ ์ ๋ฌด์ ๊ณต์ ๊ธฐ๊ฐ ์ธํฐ๋ท ์ ์ํ ์ ์๋ ํ๊ฒฝ์ด๋ผ๋ฉด ์๋์ผ๋ก ์ธํฐ๋ท ์ฌ์ดํธ๋ก๋ถํฐ ํจํค์ง๋ฅผ ๋ค์ด๋ฐ์ ์ค์นํ ์ ์๋ค. ์ฆ ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฝ๊ฒ ์ค์นํ ์ ์๋๋ก ์ง์ํด์ฃผ๋ ์๋ฒ ๋๋ ๋ฆฌ๋ ์ค ๋๋ฐ์ด์ค๋ฅผ ์ํ ํด์ด๋ค.
(์์ ๋งํ๋ฏ, OpenWrt ์์ฒด๋ ํจํค์ง๋ฅผ ๋ค์ด๋ฐ์ ์ค์นํ ์ ์๋ค ~)
opkg ๋ก ํจํค์ง๋ฅผ ์ค์นํ๋ ค๋ฉด ์๋์ ๊ฐ์ ํ์์ผ๋ก ์ ๋ ฅํ๋ฉด ๋๋ค.
# opkg install PACKAGE_FILE
opkg ๋ก ์ ์ก๋ฐ์ ํ์ผ์ ์ค์นํ๊ณ , hostapd ๋ฅผ ๋ค์ ์ ๋ ฅํด์ฃผ๋ฉด ํด๋น ํจํค์ง๊ฐ ์ค์น๋์ด hostapd ๋ฅผ ์ฌ์ฉํ ์ ์์์ ํ์ธํ ์ ์๋ค.
์ด๋ ๊ฒ Docker ๋ฅผ ์ฌ์ฉํด์ OpenWrt ์ ๋ํ ์ค์ต์ ์งํํด๋ณด์๋ค.
'SECURITY > OpenWrt' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
OpenWrt: DDos ๊ณต๊ฒฉ์ Snort ๋ก ํ์ง (0) 2021.08.07 OpenWrt: Package ํจํค์ง ๋น๋ :: Hello, world! (0) 2021.07.22