Chuyên mục
Network

Hướng dẫn cài đặt Pi-hole + Unbound

Để 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:

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ị.

Giao diện trang quản trị Pi-hole

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, …

Cấu hình Upstream DNS Servers

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