Để chặn quảng cáo cho mạng nội bộ, bên cạnh AdGuard Home mình đã chia sẻ trước đây, chúng ta còn có một công cụ khác mạnh mẽ không kém: Pi-hole. Trên thực tế mình sử dụng Pi-hole trước, rồi sau đó mới chuyển qua dùng AdGuard Home.
Pi-hole tuy có giao diện không thân thiện, dễ dùng như AdGuard Home nhưng bù lại ưu điểm có thể kết hợp với Unbound và WireGuard VPN để tạo thành combo truy cập mạng bảo mật tối ưu. Các bạn có thêm tham khảo thêm về WireHole-UI, bộ công cụ Pi-hole + Unbound + WireGuard VPN mình đã chia sẻ trước đây
WireHole-UI – Thiết lập VPN Server tích hợp tính năng chặn quảng cáo
Nếu cần cài đặt Pi-hole trên Raspberry Pi hay máy ảo trong nhà để chặn quảng cáo, bạn không cần dùng đến WireHole-UI, mà chỉ cần cài đặt Pi-hole trực tiếp trên Docker. Hoặc nếu muốn tăng bảo mật và riêng tư thì có thể cài thêm Unbound.
Bài viết này sẽ hướng dẫn bạn cách cài đặt Pi-hole và Unbound để chặn quảng cáo cho mạng nội bộ trong nhà.
Yêu cầu hệ thống:
- Máy tính / máy ảo / Raspberry Pi cài đặt hệ điều hành Ubuntu / Debian / Arch / …
- Máy đã được cài đặt Docker và Docker-Compose.
I. Cài đặt Pi-hole bằng Docker
Bạn có thể cài đặt Pi-hole trực tiếp lên hệ điều hành bằng 1 dòng lệnh như sau
curl -sSL https://install.pi-hole.net | bash
Tuy nhiên, mình thích cài đặt bằng Docker cho nhanh gọn, dễ quản lý hệ thống.
Truy cập SSH vào máy tính và tạo thư mục pihole
mkdir ~/pihole
cd ~/pihole
Tạo file docker-compose.yml
để cấu hình Pi-hole
nano docker-compose.yml
Nhập vào nội dung sau và lưu lại: bấm Ctrl-O, rồi Ctrl-X
version: "3"
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp"
- "80:80/tcp"
environment:
TZ: 'Asia/Ho_Chi_Minh'
WEBPASSWORD: 'blntech'
# Volumes store your data between container upgrades
volumes:
- './etc-pihole/:/etc/pihole/'
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
# Recommended but not required (DHCP needs NET_ADMIN)
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
cap_add:
- NET_ADMIN
restart: unless-stopped
Bạn cần chú ý sửa lại thông số WEBPASSWORD
– mật khẩu để đăng nhập vào trang quản lý của Pi-hole.
Kích hoạt Pi-hole bằng lệnh docker-compose
docker-compose up -d
Chờ vài phút để hệ thống tải Docker image của Pi-hole và khởi động.
Bạn sử dụng trình duyệt để truy cập vào trang quản lý của Pi-hole theo địa chỉ IP của máy tính đang dùng: http://<IP-server>/admin
Bấm vào mục Login ở menu bên trái, sau đó nhập mật khẩu bạn đã chọn ở mục WEBPASSWORD
ở bước trên để đăng nhập vào trang quản trị.
Sửa lỗi fail to bind on port 53
Nhiều khả năng khi cài đặt trên Ubuntu, bạn sẽ bị báo lỗi fail to bind on port 53. Lý do là vì đã có dịch vụ systemd-resolved
đang sử dụng port 53 này. Bạn tắt dịch vụ này đi và deploy lại là được.
sudo mkdir -p /etc/systemd/resolved.conf.d/
sudo nano /etc/systemd/resolved.conf.d/adguardhome.conf
Điền vào nội dung sau
[Resolve]
DNS=127.0.0.1
DNSStubListener=no
Bấm CTRL + O để lưu lại và bấm CTRL + X để thoát ra
Tiếp theo chạy lệnh này để cập nhật thông số và khởi động lại systemd-resolved
sudo mv /etc/resolv.conf /etc/resolv.conf.backup
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved
Port 53 giờ đã được trả tự do để bạn cài đặt Pi-hole. Bạn có thể kiểm tra lại bằng lệnh
sudo lsof -i :53
Nếu không thấy kết quả nào trả lại nghĩa là port 53 đã được tự do.
II. Cấu hình Pi-hole
Mặc định sau khi cài đặt xong, Pi-hole đã có thể hoạt động được ngay. Bạn có thể truy cập vào Router để chỉnh lại DNS theo IP của máy tính đang cài Pi-hole.
Nếu muốn cấu hình chi tiết hơn, bạn có thể bấm vào nút Settings để thay đổi Upstream DNS (Google, Cloudflare,…), DHCP, …
Nếu muốn sử dụng Pi-hole làm DHCP Server, bạn bấm qua tab DHCP và cấu hình theo thiết lập mong muốn.
Nếu muốn thêm danh sách chặn quảng cáo, truy cập vào mục Group Management –> Adlist, rồi cấu hình trong đây.
III. Cài đặt Pi-hole + Unbound
Trong trường hợp muốn kết hợp Pi-hole và Unbound để tăng tính bảo mật và riêng tư khi kết nối mạng, chúng ta sẽ sử dụng docker-pihole-unbound. Tham khảo thêm về lợi ích khi sử dụng thêm Unbound ở đây.
Cấu hình pihole-unbound dưới đây đã bao gồm sẵn Pi-Hole. Do đó, trước khi thực hiện, bạn cần tạm ngưng dịch vụ Pi-Hole đã cài đặt ở trên bằng cách gõ lệnh docker-compose down
trong thư mục chứa file docker-compose.yml của Pi-Hole. Nếu không, bạn sẽ gặp lỗi Bind for 0.0.0.0:443 failed: port is already allocated
khi kích hoạt pihole-unbound.
Tạo thư mục mới pihole-unbound
để dễ quản lý và tạo file docker-compose.yml
mới
mkdir ~/pihole-unbound
cd ~/pihole-unbound
nano docker-compose.yml
Nhập vào nội dung như sau và lưu lại
version: '2'
services:
pihole:
container_name: pihole
image: cbcrowe/pihole-unbound:latest
hostname: ${HOSTNAME}
domainname: ${DOMAIN_NAME}
ports:
- 443:443/tcp
- 53:53/tcp
- 53:53/udp
- 80:80/tcp
# - 5335:5335/tcp # Uncomment to enable unbound access on local server
# - 22/tcp # Uncomment to enable SSH
environment:
ServerIP: ${ServerIP}
TZ: ${TZ}
WEBPASSWORD: ${WEBPASSWORD}
#REV_SERVER: ${REV_SERVER}
#REV_SERVER_TARGET: ${REV_SERVER_TARGET}
#REV_SERVER_DOMAIN: ${REV_SERVER_DOMAIN}
#REV_SERVER_CIDR: ${REV_SERVER_CIDR}
DNS1: 127.0.0.1 #5335 # Hardcoded to our Unbound server
DNS2: 127.0.0.1 #5335 # Hardcoded to our Unbound server
DNSSEC: "true" # Enable DNSSEC
volumes:
- ./pihole-unbound:/etc/pihole:rw
- ./pihole_dnsmasq-unbound:/etc/dnsmasq.d:rw
restart: unless-stopped
Tiếp theo tạo file .env
để cấu hình thông số
nano .env
Nhập vào nội dung như sau
ServerIP=192.168.0.50
TZ=Asia/Ho_Chi_Minh
WEBPASSWORD=blntech
#REV_SERVER=true
#REV_SERVER_DOMAIN=local
#REV_SERVER_TARGET=192.168.0.1
#REV_SERVER_CIDR=192.168.0.0/24
HOSTNAME=pihole
DOMAIN_NAME=pihole.local
Bạn cần chỉnh sửa lại các thông số cho phù hợp:
- ServerIP: địa chỉ IP của máy đang sử dụng
- WEBPASSWORD: mật khẩu đăng nhập vào Pi-hole
Nâng cao (không bắt buộc): Nếu bạn muốn sử dụng tính năng DNS conditional forwarding của Pi-hole thì bỏ dấu #
trong file docker-compose.yml
và file .env
trước các mục REV_ và sửa lại thông tin trong file .env
như sau
* REV_SERVER_TARGET: địa chỉ IP của router chính
* REV_SERVER_CIDR: IP Subnet của mạng nội bộ
Nếu đã kích hoạt Pi-hole ở bước I, bạn cần phải tắt nó bằng lệnh docker-compose down
, rồi mới kích hoạt Pi-hole + Unbound ở đây được.
Kích hoạt Pi-hole + Unbound
docker-compose up -d
Truy cập và đăng nhập vào Pi-hole tương tự như bước I: http://<IP-may-tinh>
Truy cập vào mục Settings –> DNS, bạn sẽ thấy Pi-hole đã được thiết lập sẵn sử dụng Upstream DNS Server ở địa chỉ localhost 127.0.0.1#5335
, chính là địa chỉ IP và port hoạt động của Unbound.
Bạn không cần thiết lập gì thêm trên Pi-hole nữa. Giờ chỉ cần thay đổi DNS trên Router thành IP của Pi-hole là xong.
Vậy là xong nhé! Chúc bạn cài đặt thành công!
Nguồn: thuanbui