안녕하세요, 이번 글에서는 Pi-hole 데몬을 설치하고 설정 테스트까지 진행해보려고 합니다.
사용 서버는 Rocky 8.8 1대로 진행하였습니다.
목록
- Pi-hole ?
- Pi-hole 설치 과정
- 최종 테스트 결과 정리
< 1. Pi-hole? >
1. Pi-hole 정의
Pi-hole은 네트워크 전체에서 광고와 추적 도메인을 차단하는 DNS 기반 광고 차단 시스템입니다.
로컬 DNS 서버로 동작하며, 광고 서버로의 요청을 가로채서 응답하지 않음
결과적으로 PC, 스마트폰, 스마트TV 등 네트워크에 연결된 모든 기기에서 광고가 사라짐
2. 주요 특징
-
네트워크 전체 광고 차단 (클라이언트별 설정 불필요)
-
웹 기반 대시보드 제공 → 실시간 DNS 요청/차단 로그 확인 가능
-
화이트리스트/블랙리스트 관리로 유연한 제어 가능
-
경량 서비스 → 단일 서버(Rocky Linux 등)에서 쉽게 실행 가능
3. 사용 목적
-
광고 없는 인터넷 환경 구축
-
추적 도메인 차단으로 개인정보 보호 강화
-
네트워크 트래픽 최적화 (불필요한 광고 요청 제거)
4. Pi-hole 장점
-
네트워크 전체 광고 차단: 클라이언트별 설정 없이, DNS를 Pi-hole로 지정하면 모든 기기에서 광고 제거
-
개인정보 보호 강화: 추적 도메인 차단으로 트래킹 방지
-
경량 서비스: 단일 Rocky 서버에서도 무리 없이 실행 가능
-
웹 대시보드 제공: 실시간 DNS 요청/차단 로그 확인 가능
-
유연한 제어: 블랙리스트/화이트리스트 관리로 원하는 도메인만 허용/차단 가능
5. Pi-hole 단점
-
외부 접속 제한: 기본적으로 내부 네트워크에서만 접근 가능, 외부 접속은 VPN/역프록시 필요
-
광고 차단 한계: DNS 기반이라 HTTPS/동영상 내 삽입 광고는 완벽히 차단 불가
-
서비스 충돌 가능성: 다른 DNS 서비스(systemd-resolved, BIND 등)와 포트(53) 충돌 발생 가능
-
관리 필요: 광고 리스트 업데이트, 화이트리스트 관리 등 주기적 유지보수 필요
-
보안 위험: 잘못 설정하면 외부에 DNS 서버가 노출될 수 있음
< 2. Pi-hole 설치 과정 >
01. 서버 업데이트 및 필수 패키지 설치
# dnf update -y # dnf install -y curl
02. 설치 스크립트 실행
# curl -sSL https://install.pi-hole.net | bash
[✓] Root user check
.;;,.
.ccccc:,.
:cccclll:. ..,,
:ccccclll. ;ooodc
'ccll:;ll .oooodc
.;cll.;;looo:.
.. ','.
.',,,,,,'.
.',,,,,,,,,,.
.',,,,,,,,,,,,....
....''',,,,,,,'.......
......... .... .........
.......... ..........
.......... ..........
......... .... .........
........,,,,,,,'......
....',,,,,,,,,,,,.
.',,,,,,,,,'.
.',,,,,,'.
..'''.
[✓] Default SELinux: disabled
[✓] Current SELinux: disabled
Last metadata expiration check: 0:11:41 ago on Sat May 23 22:07:28 2026.
Dependencies resolved.
==============================================================================================================================
Package Architecture Version Repository Size
==============================================================================================================================
Installing:
rpm-build x86_64 4.14.3-32.el8_10 appstream 174 k
Installing dependencies:
bzip2 x86_64 1.0.6-28.el8_10 baseos 59 k
elfutils x86_64 0.190-2.el8 baseos 570 k
gc x86_64 7.6.4-3.el8 appstream 108 k
gdb-headless x86_64 8.2-20.el8.0.1 appstream 3.7 M
guile x86_64 5:2.0.14-7.el8 appstream 3.5 M
libatomic_ops x86_64 7.6.2-3.el8 appstream 37 k
libbabeltrace x86_64 1.5.4-4.el8 baseos 199 k
libipt x86_64 1.6.1-8.el8 appstream 49 k
libtool-ltdl x86_64 2.4.6-25.el8 baseos 57 k
patch x86_64 2.7.6-11.el8 baseos 137 k
zstd x86_64 1.4.4-1.el8 appstream 392 k
Transaction Summary
==============================================================================================================================
Install 12 Packages
Total download size: 8.9 M
Installed size: 29 M
Downloading Packages:
(1/12): gc-7.6.4-3.el8.x86_64.rpm 464 kB/s | 108 kB 00:00
(2/12): guile-2.0.14-7.el8.x86_64.rpm 12 MB/s | 3.5 MB 00:00
(3/12): libatomic_ops-7.6.2-3.el8.x86_64.rpm 601 kB/s | 37 kB 00:00
(4/12): libipt-1.6.1-8.el8.x86_64.rpm 3.1 MB/s | 49 kB 00:00
(5/12): zstd-1.4.4-1.el8.x86_64.rpm 9.7 MB/s | 392 kB 00:00
(6/12): rpm-build-4.14.3-32.el8_10.x86_64.rpm 1.8 MB/s | 174 kB 00:00
(7/12): bzip2-1.0.6-28.el8_10.x86_64.rpm 595 kB/s | 59 kB 00:00
(8/12): gdb-headless-8.2-20.el8.0.1.x86_64.rpm 7.1 MB/s | 3.7 MB 00:00
(9/12): libbabeltrace-1.5.4-4.el8.x86_64.rpm 2.0 MB/s | 199 kB 00:00
(10/12): elfutils-0.190-2.el8.x86_64.rpm 3.2 MB/s | 570 kB 00:00
(11/12): libtool-ltdl-2.4.6-25.el8.x86_64.rpm 587 kB/s | 57 kB 00:00
(12/12): patch-2.7.6-11.el8.x86_64.rpm 1.2 MB/s | 137 kB 00:00
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 5.3 MB/s | 8.9 MB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : patch-2.7.6-11.el8.x86_64 1/12
Installing : libtool-ltdl-2.4.6-25.el8.x86_64 2/12
Running scriptlet: libtool-ltdl-2.4.6-25.el8.x86_64 2/12
Installing : libbabeltrace-1.5.4-4.el8.x86_64 3/12
Running scriptlet: libbabeltrace-1.5.4-4.el8.x86_64 3/12
Installing : elfutils-0.190-2.el8.x86_64 4/12
Installing : bzip2-1.0.6-28.el8_10.x86_64 5/12
Installing : zstd-1.4.4-1.el8.x86_64 6/12
Installing : libipt-1.6.1-8.el8.x86_64 7/12
Installing : libatomic_ops-7.6.2-3.el8.x86_64 8/12
Installing : gc-7.6.4-3.el8.x86_64 9/12
Installing : guile-5:2.0.14-7.el8.x86_64 10/12
Running scriptlet: guile-5:2.0.14-7.el8.x86_64 10/12
Installing : gdb-headless-8.2-20.el8.0.1.x86_64 11/12
Installing : rpm-build-4.14.3-32.el8_10.x86_64 12/12
Running scriptlet: guile-5:2.0.14-7.el8.x86_64 12/12
Running scriptlet: rpm-build-4.14.3-32.el8_10.x86_64 12/12
Verifying : gc-7.6.4-3.el8.x86_64 1/12
Verifying : gdb-headless-8.2-20.el8.0.1.x86_64 2/12
Verifying : guile-5:2.0.14-7.el8.x86_64 3/12
Verifying : libatomic_ops-7.6.2-3.el8.x86_64 4/12
Verifying : libipt-1.6.1-8.el8.x86_64 5/12
Verifying : rpm-build-4.14.3-32.el8_10.x86_64 6/12
Verifying : zstd-1.4.4-1.el8.x86_64 7/12
Verifying : bzip2-1.0.6-28.el8_10.x86_64 8/12
Verifying : elfutils-0.190-2.el8.x86_64 9/12
Verifying : libbabeltrace-1.5.4-4.el8.x86_64 10/12
Verifying : libtool-ltdl-2.4.6-25.el8.x86_64 11/12
Verifying : patch-2.7.6-11.el8.x86_64 12/12
Installed:
bzip2-1.0.6-28.el8_10.x86_64 elfutils-0.190-2.el8.x86_64 gc-7.6.4-3.el8.x86_64 gdb-headless-8.2-20.el8.0.1.x86_64 guile-5:2.0.14-7.el8.x86_64
libatomic_ops-7.6.2-3.el8.x86_64 libbabeltrace-1.5.4-4.el8.x86_64 libipt-1.6.1-8.el8.x86_64 libtool-ltdl-2.4.6-25.el8.x86_64 patch-2.7.6-11.el8.x86_64
rpm-build-4.14.3-32.el8_10.x86_64 zstd-1.4.4-1.el8.x86_64
Complete!
[✓] Building dependency package pihole-meta.rpm
Dependencies resolved.
==============================================================================================================================================================
Package Architecture Version Repository Size
==============================================================================================================================================================
Removing:
rpm-build x86_64 4.14.3-32.el8_10 @appstream 292 k
Removing unused dependencies:
bzip2 x86_64 1.0.6-28.el8_10 @baseos 90 k
elfutils x86_64 0.190-2.el8 @baseos 2.8 M
gc x86_64 7.6.4-3.el8 @appstream 210 k
gdb-headless x86_64 8.2-20.el8.0.1 @appstream 11 M
guile x86_64 5:2.0.14-7.el8 @appstream 12 M
libatomic_ops x86_64 7.6.2-3.el8 @appstream 75 k
libbabeltrace x86_64 1.5.4-4.el8 @baseos 534 k
libipt x86_64 1.6.1-8.el8 @appstream 96 k
libtool-ltdl x86_64 2.4.6-25.el8 @baseos 67 k
patch x86_64 2.7.6-11.el8 @baseos 261 k
zstd x86_64 1.4.4-1.el8 @appstream 1.5 M
Transaction Summary
==============================================================================================================================================================
Remove 12 Packages
Freed space: 29 M
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Erasing : rpm-build-4.14.3-32.el8_10.x86_64 1/12
Erasing : gdb-headless-8.2-20.el8.0.1.x86_64 2/12
Running scriptlet: guile-5:2.0.14-7.el8.x86_64 3/12
Erasing : guile-5:2.0.14-7.el8.x86_64 3/12
Running scriptlet: guile-5:2.0.14-7.el8.x86_64 3/12
Erasing : gc-7.6.4-3.el8.x86_64 4/12
Erasing : libatomic_ops-7.6.2-3.el8.x86_64 5/12
Erasing : libtool-ltdl-2.4.6-25.el8.x86_64 6/12
Running scriptlet: libtool-ltdl-2.4.6-25.el8.x86_64 6/12
Erasing : libbabeltrace-1.5.4-4.el8.x86_64 7/12
Running scriptlet: libbabeltrace-1.5.4-4.el8.x86_64 7/12
Erasing : libipt-1.6.1-8.el8.x86_64 8/12
Erasing : bzip2-1.0.6-28.el8_10.x86_64 9/12
Erasing : elfutils-0.190-2.el8.x86_64 10/12
Erasing : patch-2.7.6-11.el8.x86_64 11/12
Erasing : zstd-1.4.4-1.el8.x86_64 12/12
Running scriptlet: zstd-1.4.4-1.el8.x86_64 12/12
Verifying : bzip2-1.0.6-28.el8_10.x86_64 1/12
Verifying : elfutils-0.190-2.el8.x86_64 2/12
Verifying : gc-7.6.4-3.el8.x86_64 3/12
Verifying : gdb-headless-8.2-20.el8.0.1.x86_64 4/12
Verifying : guile-5:2.0.14-7.el8.x86_64 5/12
Verifying : libatomic_ops-7.6.2-3.el8.x86_64 6/12
Verifying : libbabeltrace-1.5.4-4.el8.x86_64 7/12
Verifying : libipt-1.6.1-8.el8.x86_64 8/12
Verifying : libtool-ltdl-2.4.6-25.el8.x86_64 9/12
Verifying : patch-2.7.6-11.el8.x86_64 10/12
Verifying : rpm-build-4.14.3-32.el8_10.x86_64 11/12
Verifying : zstd-1.4.4-1.el8.x86_64 12/12
Removed:
bzip2-1.0.6-28.el8_10.x86_64 elfutils-0.190-2.el8.x86_64 gc-7.6.4-3.el8.x86_64 gdb-headless-8.2-20.el8.0.1.x86_64 guile-5:2.0.14-7.el8.x86_64
libatomic_ops-7.6.2-3.el8.x86_64 libbabeltrace-1.5.4-4.el8.x86_64 libipt-1.6.1-8.el8.x86_64 libtool-ltdl-2.4.6-25.el8.x86_64 patch-2.7.6-11.el8.x86_64
rpm-build-4.14.3-32.el8_10.x86_64 zstd-1.4.4-1.el8.x86_64
Complete!
[✓] Installing Pi-hole dependency package
[i] IPv4 address: 10.101.0.8/21
[i] Unable to find IPv6 ULA/GUA address
[i] IPv6 address:
[i] Using upstream DNS: Google (ECS, DNSSEC) (8.8.8.8, 8.8.4.4)
[i] Installing StevenBlack's Unified Hosts List
[i] Query Logging on.
[i] Using privacy level: 0
[✗] Check for existing repository in /etc/.pihole
[i] Clone https://github.com/pi-hole/pi-hole.git into /etc/.pihole...HEAD is now at 3413768 Pi-hole Core v6.4.2 (#6610)
[✓] Clone https://github.com/pi-hole/pi-hole.git into /etc/.pihole
[✗] Check for existing repository in /var/www/html/admin
[i] Clone https://github.com/pi-hole/web.git into /var/www/html/admin...HEAD is now at 7a17e01 Pi-hole Web v6.5 (#3751)
[✓] Clone https://github.com/pi-hole/web.git into /var/www/html/admin
[✗] Checking for group 'pihole'
[✓] Creating group 'pihole'
[✓] Creating user 'pihole'
[i] FTL Checks...
[✓] Detected x86_64 architecture
[✓] Downloading and Installing FTL
[✓] Installing scripts from /etc/.pihole
[i] Installing configs from /etc/.pihole...
[✓] Installing latest Cron script
[✓] Installing latest logrotate script
[✓] man pages installed and database updated
[i] Testing if systemd-resolved is enabled
[i] Systemd-resolved is not enabled
[i] Restarting services...
[✓] Enabling pihole-FTL service to start on reboot...
[✓] Restarting pihole-FTL service...
[✓] DNS resolution is available
[✗] Migrating the list's cache directory to new location
[i] Creating new gravity database
[i] Migrating content of /etc/pihole/adlists.list into new database
[✓] Deleting existing list cache
[i] Neutrino emissions detected...
[✓] Preparing new gravity database
[✓] Creating new gravity databases
[✓] Pulling blocklist source list into range
[i] Using libz compression
[i] Target: https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
[✓] Status: Retrieval successful
[✓] Parsed 84231 exact domains and 0 ABP-style domains (blocking, ignored 1 non-domain entries)
Sample of non-domain entries:
- fe80::1%lo0
[✓] Building gravity tree
[✓] Building antigravity tree
[i] Number of gravity domains: 84231 (84231 unique domains)
[i] Number of antigravity domains: 0 (0 unique domains)
[i] Number of exact denied domains: 0
[i] Number of regex denied filters: 0
[i] Number of exact allowed domains: 0
[i] Number of regex allowed filters: 0
[✓] Optimizing database
[✓] Swapping databases
[✓] The old database remains available
[✓] Cleaning up stray matter
[✓] Done.
[i] You may now configure your devices to use the Pi-hole as their DNS server
[i] Pi-hole DNS (IPv4): 10.101.0.8
[i] If you have not done so already, the above IP should be set to static.
[i] View the web interface at http://pi.hole:80/admin or http://10.101.0.8:80/admin
[i] Web Interface password: nYQx-nhw
[i] This can be changed using 'pihole setpassword'
[i] To allow your user to use all CLI functions without authentication, refer to
our documentation at: https://docs.pi-hole.net/main/post-install/
[i] The install log is located at: /etc/pihole/install.log
[✓] Installation complete!

고정 IP (Static IP) 사용이 필요함을 알리는 팝업창이 뜹니다, IP 이동이 변동적인 DHCP 서버를 사용한다면 Exit, Static IP를 사용한다면 Continue 를 선택하고 넘어갑니다.

“Upstream DNS Provider” — 즉, 상위 DNS 공급자 선택 단계입니다. 알맞은 공급자를 선택합니다, 전 Google을 선택하였습니다.

쿼리 로깅 활성화 유무 선택창으로, Pi-hole이 처리하는 모든 DNS 요청(쿼리)을 기록해서 나중에 분석할 수 있게 하는 옵션입니다.
저는 YES를 선택하였습니다.
이후 뜨는 팝업창들은 글의 길이를 위하여 생략하였습니다. 설치 과정 중 자신에게 맞는 선택지를 선택하면 되겠습니다.

설치가 완료되면 해당 팝업창이 뜨게 됩니다. OK 선택 시 팝업창이 사라지며 수초내 설치가 완료됩니다.
보안상 설정한 사설 IP는 가림처리 하였습니다.
# systemctl status pihole-FTL
● pihole-FTL.service - Pi-hole FTL
Loaded: loaded (/etc/systemd/system/pihole-FTL.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2026-05-23 22:22:11 KST; 8min ago
Process: 122486 ExecStartPre=/opt/pihole/pihole-FTL-prestart.sh (code=exited, status=0/SUCCESS)
Main PID: 122500 (pihole-FTL)
Tasks: 8 (limit: 22944)
Memory: 4.7M
CGroup: /system.slice/pihole-FTL.service
└─122500 /usr/bin/pihole-FTL -f
May 23 22:22:16 alsgur5694-309175.novalocal [122500]: Compiled for linux/amd64 (compiled on CI) using cc (Alpine 15.2.0) 15.2.0
May 23 22:22:16 alsgur5694-309175.novalocal [122500]: Wrote config file:
May 23 22:22:16 alsgur5694-309175.novalocal [122500]: - 166 total entries
May 23 22:22:16 alsgur5694-309175.novalocal [122500]: - 163 entries are default
May 23 22:22:16 alsgur5694-309175.novalocal [122500]: - 3 entries are modified
May 23 22:22:16 alsgur5694-309175.novalocal [122500]: - 0 entries are forced through environment
May 23 22:22:16 alsgur5694-309175.novalocal [122500]: Parsed config file /etc/pihole/pihole.toml successfully
May 23 22:22:16 alsgur5694-309175.novalocal [122500]: PID file does not exist or not readable
May 23 22:22:16 alsgur5694-309175.novalocal [122500]: No other running FTL process found.
May 23 22:22:16 alsgur5694-309175.novalocal [122500]: PID of FTL process: 122500
-> 설치가 완료되었으며 자동으로 데몬이 실행중인점을 확인하였습니다.
# pihole status
/opt/pihole/utils.sh: line 100: local: FTL_PID_FILE: readonly variable
[✓] FTL is listening on port 53
[✓] UDP (IPv4)
[✓] TCP (IPv4)
[✓] UDP (IPv6)
[✓] TCP (IPv6)
[✓] Pi-hole blocking is enabled
# dig @127.0.0.1 google.com
; <<>> DiG 9.11.36-RedHat-9.11.36-16.el8_10.7 <<>> @127.0.0.1 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18143
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 300 IN A 142.251.24.101
google.com. 300 IN A 142.251.24.139
google.com. 300 IN A 142.251.24.113
google.com. 300 IN A 142.251.24.102
google.com. 300 IN A 142.251.24.100
google.com. 300 IN A 142.251.24.138
;; Query time: 40 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat May 23 22:32:10 KST 2026
;; MSG SIZE rcvd: 135저
정상 실행되고 있으며 구글 IP 주소가 정상적으로 반환되고 있는 점이 확인됩니다.
< 3. 최종 테스트 결과 정리 >
– 웹 대시보드 접속
-
내부 네트워크에서
http://<서버IP>/admin -
로그인 성공 후 확인 가능한 항목:
-
Total Queries: 전체 DNS 요청 수
-
Blocked Queries: 차단된 광고/추적 도메인 수
-
Percentage Blocked: 차단 비율
-
Query Log: 실시간 요청 내역
-

-> Pi-hole 설치 직후의 초기 대시보드 화면. DNS 요청이 아직 없기 때문에 통계 그래프가 비어 있으며, 시스템 상태는 Active로 표시됩니다.
1. 서버 내 DNS 레코드 조회 테스트
# dig @IP google.com ; <<>> DiG 9.11.36-RedHat-9.11.36-16.el8_10.7 <<>> @IP google.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41735 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 300 IN A 142.251.24.101 google.com. 300 IN A 142.251.24.138 google.com. 300 IN A 142.251.24.113 google.com. 300 IN A 142.251.24.100 google.com. 300 IN A 142.251.24.139 google.com. 300 IN A 142.251.24.102
-> 정상적으로 레코드 값을 반환하고 있습니다.
2. 테스트용 광고 도메인 조회 테스트
# dig @IP ads.google.com ; <<>> DiG 9.11.36-RedHat-9.11.36-16.el8_10.7 <<>> @IP ads.google.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60550 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;ads.google.com. IN A ;; ANSWER SECTION: ads.google.com. 2 IN A 0.0.0.0 ;; Query time: 0 msec ;; SERVER: 10.101.0.5#53(10.101.0.5) ;; WHEN: Sat May 23 23:03:36 KST 2026 ;; MSG SIZE rcvd: 59 # dig @IP doubleclick.net ; <<>> DiG 9.11.36-RedHat-9.11.36-16.el8_10.7 <<>> @IP doubleclick.net ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33504 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;doubleclick.net. IN A ;; ANSWER SECTION: doubleclick.net. 2 IN A 0.0.0.0 ;; Query time: 0 msec ;; SERVER: 10.101.0.5#53(10.101.0.5) ;; WHEN: Sat May 23 23:03:36 KST 2026 ;; MSG SIZE rcvd: 60


-> 값이 비어있던 대시보드에 그래프값이 생긴 점을 확인할 수 있습니다.
> 최종 정리
-
FTL 서비스 정상 실행
-
루프백(127.0.0.1) + LAN IP 응답 확인 완료
-
방화벽/SELinux 문제 해결 → LAN에서도 DNS 요청 처리 가능
-
대시보드 그래프 정상 누적 → 광고 차단 및 통계 확인 가능
이로써 Pi-hole 설치 및 설정 메뉴얼을 마치고자 합니다. 감사합니다.
■ 참고 링크
https://pi-hole.net/




