3 minutes
๐ Let’s build a home server - 3. DNS and SSL
์์ฆ ๋์ค๋ ๊ณต์ ๊ธฐ๋ค์ ๋๋ถ๋ถ DDNS ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋ค. ๊ณต์ ๊ธฐ ์ ์กฐ์ฌ ์๋ฒ์ ํ์ฌ ๊ณต์ ๊ธฐ๊ฐ ์ฐ๊ฒฐ๋ IP ์ฃผ์๋ฅผ ๋ฑ๋กํ๊ณ , ์ฌ์ฉ์์ ์์ด๋ ๋ฑ์ ํด๋น ์๋ฒ์ URL์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
์ง๊ธ ์ฌ์ฉ์ค์ธ ๊ตญ์ฐ ๊ณต์ ๊ธฐ ๋ํ DDNS๋ฅผ ์ ๊ณตํ๊ณ ์๋๋ฐ, ๊ธฐ์ ํ ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ ๋งํผ ๋น์ฉ์ ์กฐ๊ธ ๋ค์ฌ์ ์กฐ๊ธ ๋ ์์ ๋๋ฉ์ธ ์ด๋ฆ์ ์ฌ์ฉํด๋ณด์.
1. DNS
DNS๋ ํ๋งคํ๋ ๊ตญ๋ด์ธ ์ฌ์ดํธ๊ฐ ๋ง์๋ฐ, DNS์ CDN ์ชฝ์์๋ ์ธ๊ณ ์ต๋ ๊ท๋ชจ ํ์ฌ ์ค ํ๋์ธ Cloudflare์ Registrar ์๋น์ค๊ฐ ๋ง์ง์ ๊ฑฐ์ ๋จ๊ธฐ์ง ์๊ณ DNS๋ฅผ ํ๋งคํ๋ค๊ณ ํ๋ค. ๋ค๋ง ํด์ธ๊ฒฐ์ ๋ฅผ ํด์ผํ๋ค๋ณด๋ ์์ฆ(2026.01.)๊ฐ์ ๊ณ ํ์จ ์๋์๋ ๋ฌ๋ฌ ๊ฒฐ์ ๊ฐ ๊ฝค ๋ถ๋ด์ด ๋๊ธฐ๋ ํ๋ค.
Cloudflare Registrar์์ ์ํ๋ ๋๋ฉ์ธ ์ด๋ฆ์ด ์ฌ์ฉ ๊ฐ๋ฅํ์ง ๊ฒ์ํ๋ค. ํ ์๋ฒ์ ์ด๋ฆ์ Cigarettes & Coffee๋ก ์ง์ ์๊ฐ์ด๋ผ ์ฒ์์๋ cnc.dev๋ก ํ๊ณ ์ถ์๋๋ฐ, ์ด๋ฏธ ์ด๋ค ๋
์ผ ํ์ฌ๊ฐ ์ฌ์ฉ ์ค์ด์๋ค. ์ด์ฉ ์ ์์ด ์กฐ๊ธ ํํํ์ฌ cignc.dev๋ผ๋ ์ด๋ฆ์ผ๋ก ๋๋ฉ์ธ์ ๊ตฌ์
ํ๋ค. 12 ๋ฌ๋ฌ๊ฐ ์กฐ๊ธ ๋๋ ๊ฐ๊ฒฉ์ ๊ตฌ์
ํ๊ณ , ์ํ๋ก ์ฝ 18,000์ ์ ๋๊ฐ ๊ฒฐ์ ๋์๋ค. ๋๋ฉ์ธ ์ด๋ฆ์ ํ ๋ฒ ๊ฒฐ์ ํ 1๋
๊ฐ ์ฌ์ฉํ ์ ์๊ณ , ๊ฐฑ์ ๊ฐ๊ฒฉ ๋ํ ์ฒ์ ๊ตฌ์
๋น์ฉ๊ณผ ๋น์ทํ๋ค.

๊ตฌ์
ํ Cloudflare์ ๋์๋ณด๋๋ก ์ฐ๊ฒฐ๋๋ค. DNS์ ๊ด๋ จํ ์ค์ ์ DNS > Records์์ ํ ์ ์๋ค. ๋ฉ์ธ์ผ๋ก ์ฌ์ฉํ cignc.dev์ ๋ ์ฝ๋์ ์ถ๊ฐ๋ก www.cignc.dev๋ฅผ ์ค์ ํ ๊ฒ์ด๋ค.
DDNS๋ฅผ ์ง์ํ๋ ๊ณต์ ๊ธฐ์์ ์ ๋ IP๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ CNAME์ผ๋ก DDNS๋ฅผ ๋ฑ๋กํด์ฃผ๋ ๊ฒ์ด ์ข๋ค. ์ด ๊ฒฝ์ฐ ๊ณต์ธ IP๊ฐ ๋ฐ๋๋๋ผ๋ DDNS๊ฐ ๋ณ๊ฒฝ๋ IP๋ฅผ ์๋์ผ๋ก ๊ณต์ ๊ธฐ ์ ์กฐ์ฌ ์๋ฒ๋ก ๋ฑ๋กํด์ค ๊ฒ์ด๊ณ , DNS ์ค์ ์ ๋ฐ๋ก ๋ฐ๊พธ์ด์ค ํ์์์ด ์ฌ์ฉํ ์ ์์ ๊ฒ์ด๋ค. ๋คํํ Cloudflare๋ DNS์ CNAME์ ๋ฑ๋กํ๋ ๊ฒ์ ํ์ฉํ๊ณ ์๋ค.
2. SSL
ํ ์๋ฒ์์ ์ฌ์ฉ ์ค์ธ .dev ๊ณ์ด ๋๋ฉ์ธ์ ๋ณด์ ์ฐ๊ฒฐ์ด ๋ฐ๋์ ํ์ํ ๋๋ฉ์ธ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํ ์๋ฒ์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ SSL ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค. Cloudflare์์ ๊ตฌ์
ํ ๋๋ฉ์ธ ๋ค์์ certbot๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ํตํด ์ฝ๊ฒ SSL ์ธ์ฆ์๋ฅผ ๋ฐ์ ์ ์๋ค(DNS-01 ๋ฐฉ์).
์ฐ์ Cloudflare์์ API ํ ํฐ์ ๋ฐ๊ธ๋ฐ์์ผ ํ๋ค. DNS๋ฅผ ์ค์ ํ๋ Cloudflare ๋์๋ณด๋์ Profile > API Tokens ๋ฉ๋ด์์ ๋ฐ๊ธ๋ฐ์ ์ ์๋ค. ๋ฐฉ๊ธ ์ค์ ํ ๋๋ฉ์ธ ์ด๋ฆ์ ๋ํ API ํ ํฐ์ ๋ฐ๊ธ ๋ฐ์ ์ ์ ๋ค๋ฅธ ๊ณณ์ ์ ์ด๋๋ค. ๋ฐ๊ธ ํ์๋ ๋ค์ ์ด ํ ํฐ์ ํ์ธํ ์ ์์ผ๋ฏ๋ก ์์ด๋ฒ๋ฆฐ๋ค๋ฉด ๋ค์ ๋ฐ๊ธ๋ฐ์์ผํจ์ ์ ์ํ๋ค.
์ดํ ์๋ฒ์ SSH๋ก ์ฐ๊ฒฐํ์ฌ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํ๋ค.
sudo apt update
sudo apt install certbot python3-certbot-dns-cloudflare
certbot --version
Cloudflare ์๊ฒฉ ์ฆ๋ช ํ์ผ์ ์์ฑํ๋ค.
sudo mkdir -p /root/.secrets/certbot
sudo nano /root/.secrets/certbot/cloudflare.ini
ํ์ผ์ ์๋ ํ ์ค์ ๋ฃ๋๋ค.
dns_cloudflare_api_token = <Cloudflare API ํ ํฐ>
ํ๋ฌ๊ทธ์ธ์ ํน์ฑ ์ ํ์ผ ๊ถํ์ ๋ฐ๋์ ์ ๊ถ์ผํ๋ค.
sudo chmod 600 /root/.secrets/certbot/cloudflare.ini
์ด์ ๋๋ฉ์ธ์ ๋ํ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ๋๋ค. ์๋ ๋ฐ๊ธ ๋ฐฉ๋ฒ์ ๋จ์ผ ๋๋ฉ์ธ์ ๋ํ ๋ฐ๊ธ์ด๋ค. DNS-01 ๋ฐฉ์์ ์๋ธ ๋๋ฉ์ธ์ ๋ํ ์์ผ๋์นด๋๋ฅผ ์ธ ์๋ ์๋ค. ์ด ๊ฒฝ์ฐ -d '*.<๋๋ฉ์ธ ์ด๋ฆ>'๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.secrets/certbot/cloudflare.ini -d <๋๋ฉ์ธ ์ด๋ฆ> --agree-tos -m <์ด๋ฉ์ผ ์ฃผ์>
์๋์ ๊ฐ์ด ๋ฐ๊ธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค. ์ธ์ฆ์๋ fullchain.pem์์, ๊ฐ์ธํค๋ privkey.pem์์ ํ์ธํ ์ ์๋ค.
sudo ls -l /etc/letsencrypt/live/<๋๋ฉ์ธ ์ด๋ฆ>/
certbot์ ํ์ด๋จธ ๊ธฐ๋ฐ์ ์๋ ๊ฐฑ์ ์ ์ง์ํ๋ค. ์๋ ๋ช
๋ น์ด๋ฅผ ํตํด ๊ฐฑ์ ์ด ์ ์์ ์ผ๋ก ๋๋์ง ํ์ธํ ์ ์๋ค. --dry-run ์ต์
์ ์ถ๊ฐํ๋ฉด ์ค์ ํ์ผ์ ๊ฐฑ์ ํ์ง ์๊ณ ํ
์คํธํด๋ณผ ์ ์๋ค.
sudo certbot renew --dry-run
OMV ์ค์
๋ฐ๊ธ๋ฐ์ SSL ์ธ์ฆ์๋ฅผ OMV ์น UI์๋ ์ ์ฉํ ์ ์๋ค. System > Certificates > SSL์์ ์ธ์ฆ์๋ฅผ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, System > Workbench์์ OMV์ ์ถ๊ฐํ ์ธ์ฆ์๋ฅผ ์น UI์ ์ฌ์ฉ ์ค์ ํ ์ ์๋ค. ๋ค๋ง ์ด๋ฒ ํ๋ก์ ํธ์์๋ nginx Reverse Proxy๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ผ ์ด ๋ถ๋ถ์ ์๋ตํ ๊ฒ์ด๋ค.