Bookmark
Billboard ads

Hướng dẫn cài đặt AdguardHome trực tiếp lên OpenWRT

Ads top post

I. Chuẩn bị

Router có dung lượng RAM và ROM thấp hoặc CPU chậm có thể sẽ không phù hợp để chạy AdGuardHome. Dưới đây là hướng dẫn chung cho mọi thiết bị chạy OpenWRT, nếu bạn gặp bất cứ vấn đề gì liên quan đến tài nguyên hệ thống, tốc độ xử lý... hãy gỡ bỏ AdguardHome hoặc cài đặt lên một thiết bị khác mạnh hơn (RasberryPi, MiniPC...).
  • Tối thiểu 50MB RAM trống.
  • Tối thiểu 100MB bộ nhớ trống (Xem yêu cầu về Bộ nhớ).
  • Router có CPU hiệu suất cao v.d: Dual-core (2 lõi) với tốc độ CPU (MHz) càng cao càng tốt.

Dung lượng RAM cần thiết cũng sẽ liên quan đến danh sách bộ lọc bạn sử dụng.

Router có RAM dưới 128MB hoặc chỉ có CPU lõi đơn sẽ có xu hướng hoạt động kém.

Một tùy chọn thay thế có thể là sử dụng Raspberry Pi Zero cắm vào cổng USB của router để chạy AGH. ( xem hướng dẫn )

I.1 Độ trễ DNS / Hiệu suất

Để đảm bảo hiệu suất tốt nhất và độ trễ thấp nhất đối với các yêu cầu DNS (DNS Query), AGH nên được thiết lập làm máy chủ DNS chính. Nếu bạn hiện đang cài đặt dnsmasq hoặc unbound, bạn nên di chuyển các port dịch vụ này sang một port khác thay thế và thiết lập AGH sử dụng cổng DNS 53. Hướng dẫn này đề xuất giữ dnsmasq/unbound để làm máy chủ phân giải Reverse-DNS (PTR) nội bộ.

Lý do AGH nên được thiết lập làm máy chủ DNS chính là do các máy chủ phân giải như dnsmasq sẽ phân nhánh từng yêu cầu DNS khi AGH được đặt làm máy chủ Upstream DNS, điều này sẽ ảnh hưởng đến độ trễ DNS, có thể được theo dõi trong bảng điều khiển AGH. Nếu AGH không phải là máy chủ DNS chính của bạn, bạn cũng sẽ không thể xem các yêu cầu DNS được thực hiện bởi mỗi máy khách, vì toàn bộ dữ liệu sẽ xuất hiện từ 1 IP duy nhất đó là IP Router (vì dnsmasq sẽ gửi request đến AGH rồi AGH lại phải gửi tiếp request đó).

Hướng dẫn sau đây sẽ thiết lập cho dnsmasq sang cổng 54 và cấu hình nó cho AGH để sử dụng cho việc tra cứu Reverse-DNS (PTR) cục bộ.

I.2 Yêu cầu về bộ nhớ

Từ phiên bản 0.107.0, binary của AdGuardHome được biên dịch đã tăng dung lượng đáng kể. Đối với nhiều Router, nó sẽ chiếm một dung lượng lưu trữ khá trong hệ thống. Ngoài ra, các tính năng như thống kê và ghi nhật ký truy vấn cũng sẽ yêu cầu thêm dung lượng lưu trữ khi được ghi vào thư mục làm việc. Đối với các Router có ít dung lượng bộ nhớ, bạn nên sử dụng USB hoặc đường dẫn lưu trữ bên ngoài để tránh làm đầy hệ thống. Nếu dung lượng bộ nhớ thấp, bạn có thể sử dụng phương pháp cài đặt tùy chỉnh và lưu trữ tất cả cài đặt AdGuard Home vào bộ nhớ ngoài. Ngoài ra, bạn cũng có thể thực hiện cấu hình exroot .

Hiện tại (tháng 5 năm 2022, edge build 108) một bản cài đặt đầy đủ vào thư mục /opt sẽ cần khoảng 100Mb dung lượng.

  • (70Mb) 35Mbx2 cho Binary AGH chính và 1 Binary phụ được backup khi nâng cấp. (nằm trong thư mục agh-backup - Disable autoupdate sẽ tiết kiệm được phần này)
  • 20Mb cho bộ lọc. (bạn có thể tăng hoặc giảm mức này tùy thuộc vào danh sách bộ lọc bạn sử dụng)
  • 2Mb cho thống kê 90 ngày.
  • 53Mb cho 7 ngày nhật ký truy vấn.

Một số tips giúp tiết kiệm bộ nhớ router:

  • Lưu query log ở bộ nhớ RAM
  • Set DNS cache nhỏ lại
  • Tắt Autoupdate và sử dụng UPX Packer để nén Binary về nhỏ nhất có thể.
  • Bỏ các filter không cần thiết, chỉ giữ 2 or 3 filter quan trọng.

I.3 Ghi nhật ký truy vấn / thống kê

Một trong những lợi ích chính của AGH là dữ liệu thống kê và truy vấn chi tiết, tuy nhiên đối với nhiều Router, việc lưu giữ dữ liệu này trong thời gian dài có thể gây ra sự cố (xem Yêu cầu về bộ nhớ ). Nếu bạn đang sử dụng bộ lưu trữ tmpfs (RAM) mặc định, bạn nên đặt khoảng thời gian lưu giữ ngắn hơn hoặc tắt hoàn toàn tính năng ghi nhật ký. Nếu bạn muốn có thời gian lưu giữ lâu hơn cho dữ liệu truy vấn / thống kê, hãy cân nhắc việc di chuyển thư mục lưu trữ ra bên ngoài bộ nhớ của Router.

II. Cài đặt AGH

Kể từ phiên bản OpenWRT 21.02, gói cài đặt AdGuardHome chính thức đã có thể được cài đặt thông qua opkg.

Gói opkg cho phiên bản OpenWRT 21.02 cũng đã được xác nhận là có thể chạy trên phiên bản 19.07, nhưng sẽ yêu cầu chuyển file ipk thông qua SSH hoặc SCP và cài đặt với opkg theo cách thủ công do không có trong kho ứng dụng của phiên bản 19.07.

Các gói phụ thuộc bắt buộc (ca-bundle) sẽ được tự động giải quyết và cài đặt khi sử dụng gói chính thức. (Sẽ phải cài bằng tay trên phiên bản OpenWRT 19.07)

  • Đăng nhập SSH vào Router rồi chạy lệnh sau để cài đặt AGH
1
2
opkg update
opkg install adguardhome

Gói OpenWRT chính thức sử dụng các đường dẫn và thư mục theo mặc định như sau:

  • Ứng dụng AdGuardHome sẽ được cài đặt vào /usr/bin/AdGuardHome.
  • File cấu hình chính adguardhome.yaml được đặt tại /etc/adguardhome.yaml.
  • Thư mục làm việc mặc định sẽ là /var/adguardhome (Mặc định thì /var là một symlink trỏ tới /tmp (RAM)).
  • Có thể thay đổi thư mục làm việc bằng cách chỉnh sửa file /etc/config/adguardhome
  • Một init.d script sẽ được thêm vào thư mục /etc/init.d/ (/etc/init.d/adguardhome).

Thư mục làm việc mặc định sẽ nằm ở thư mục /tmp có nghĩa là nhật ký truy vấn và số liệu thống kê sẽ bị mất khi khởi động lại. Để tránh điều này, bạn nên định cấu hình đường dẫn lưu trữ đến các thư mục như /opt hoặc /mnt với bộ nhớ ngoài và cập nhật thư mục làm việc tương ứng trong file /etc/config/adguardhome.

  • Để AdGuard Home tự động khởi động khi khởi động và khởi động dịch vụ hãy chạy lệnh sau:
1
2
service adguardhome enable
service adguardhome start

III. Cấu hình AGH và dnsmasq

III.1 Cấu hình thông qua SSH

Sau khi cài đặt gói opkg, hãy chạy các lệnh sau thông qua SSH để thiết lập AGH làm trình phân giải DNS chính. Những hướng dẫn này giả sử bạn đang sử dụng dnsmasq. Điều này sẽ hạ cấp dnsmasq xuống một trình phân giải DNS nội bộ.

Trong bài này mình sẽ set dnsmasq sang port 54. Các bạn có thể thay thế tùy thích nhưng hãy tránh những port đặc thù và đã được quy ước (vd như http là 80, https là 443 ...). Muốn xem các dịch vụ gì đã được gán với port nào thì vào đây: https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers .

Đăng nhập SSH rồi chạy script sau:
# Lấy địa chỉ IPv4 và IPv6 hiện tại của router và lưu chúng vào các biến để sử dụng trong quá trình chạy script. NET_ADDR=$(/sbin/ip -o -4 addr list br-lan | awk 'NR==1{ split($4, ip_addr, "/"); print ip_addr[1] }') NET_ADDR6=$(/sbin/ip -o -6 addr list br-lan scope global | awk 'NR==1{ split($4, ip_addr, "/"); print ip_addr[1] }') echo "Router IPv4 : ""${NET_ADDR}" echo "Router IPv6 : ""${NET_ADDR6}" # 1. Bật dnsmasq để phân giải các PTR requests. # 2. Giảm dung lượng cache của dnsmasq vì nó chỉ được dùng để lấy thông tin PTR/rDNS. # 3. Tắt rebind protection. Domain bị chặn sẽ phản hồi về ip là 0.0.0.0 có thể làm dnsmasq hiểu nhầm đó là một cuộc tấn công và ghi vào nhật ký hệ thống, đó là lý do nên tắt Rebind Protection đi. # 4. Chuyển port dnsmasq sang port 54. # 5. Đặt IPv4 DNS advertised bằng option 6 của DHCP Server # 6. Đặt IPv6 DNS advertised uci set dhcp.@dnsmasq[0].noresolv="0" uci set dhcp.@dnsmasq[0].cachesize="1000" uci set dhcp.@dnsmasq[0].rebind_protection='0' uci set dhcp.@dnsmasq[0].port="54" uci -q delete dhcp.@dnsmasq[0].server uci add_list dhcp.@dnsmasq[0].server="${NET_ADDR}" # Xóa các cấu hình củ để cài đặt cấu hình mới. uci -q delete dhcp.lan.dhcp_option uci -q delete dhcp.lan.dns # DHCP option 6: which DNS to include in the IP configuration for name resolution (DHCP DNS) uci add_list dhcp.lan.dhcp_option='6,'"${NET_ADDR}" # DHCP option 3: default router or last resort gateway for this interface (DHCP Gateway) uci add_list dhcp.lan.dhcp_option='3,'"${NET_ADDR}" # Set IPv6 Announced DNS for OUTPUT in $(ip -o -6 addr list br-lan scope global | awk '{ split($4, ip_addr, "/"); print ip_addr[1] }');do;echo "Adding $OUTPUT to IPV6 DNS" && uci add_list dhcp.lan.dns=$OUTPUT;done uci commit dhcp # Khởi động lại dnsmasq để cấu hình có hiệu lực /etc/init.d/dnsmasq restart

III.2 Cấu hình AGH trên giao diện web

Thiết lập gốc ban đầu thì AGH sẽ được truy cập thông qua port TCP 3000.

  1. Truy cập vào http://192.168.1.1:3000/ (Nếu IP Router của các bạn không phải là 192.168.1.1, hãy thay đổi cho phù hợp)
  2. Tiến hành thiết lập theo hướng dẫn (Có thể giữ nguyên hoặc thay đổi Port WEB Admin tùy ý).
  3. Giữ mặc định DNS port là 53.
  4. Đặt Username và Admin Password.

Vậy là xong các thiết lập cơ bản và các bạn đã có thể sử dụng AdguardHome ngay rồi.

IV. Thiết lập nâng cao và thủ thuật sử dụng AGH

IV.1 Reverse DNS (rDNS)

Reverse DNS giúp AGH hiển thị hostname của clients giúp dễ dàng xác định clients và truy cập vào clients bằng tên miền nội bộ (pnghia-pc.lan, ...) (sử dụng dnsmasq như đã nên bên trên).

  • Từ AdGuard Home web Admin, Vào SettingsDNS settings
  • Kéo xuống mục “Private reverse DNS servers
  • Thêm vào dòng 192.168.1.1:54 (Thay đổi 192.168.1.1 tùy vào IP Router của bạn)
  • Tick vào hai tùy chọn “Use private reverse DNS resolvers” và “Enable reverse resolving of client's IP addresses”. Nhấn Apply.

IV.2 Ngăn AGH gửi request tên miền nội bộ lên upstream server (.lan, .local, ...)

  • Rule này sử dụng để khi các bạn sử dụng tên miền nội bộ để truy cập vào các clients trong mạng LAN, AGH sẽ hiểu rằng đó là domain nội bộ và sẽ không gử request tới các upstream DNS server.
  • ví dụ: Bạn setup local domain cho OpenWRT là .lan. Clients là 1 PC có tên là pnghia-pc, khi PC này kết nối tới OpenWRT thì DHCP sẽ cấp IP và gán cho PC đó 1 Hostname tên là pnghia-pc đồng thời sẽ gán 1 tên miền nội bộ cho PC này có tên là pnghia-pc.lan. Khi người dùng truy cập vào pnghia-pc.lan thì AGH sẽ sử dụng rDNS thông qua dnsmasq để lấy IP của PC đó rồi trả về IP như 1 domain thông thường.

Trên giao diện Admin, vào SettingsDNS Settings > Mục Upstream Servers dán 2 dòng sau vào:

1
2
[/lan/]127.0.0.1:54
[//]127.0.0.1:54

*trong đó lan là tên miền nội bộ, thay đổi nó nếu bạn sử dụng domain khác

IV.3 Ngăn chặn clients sử dụng DNS được fix cứng (Hard-coded DNS).

  • Một số thiết bị có thể sẽ bypass DHCP DNS bằng cách set cứng vào hệ thống của nó 1 server DNS khác (vd: Chromecast...).
  • Để ngăn chặn việc này, ta có thể sử dụng tường lửa để chuyển hướng mọi request DNS về local server (AGH)

IV.3.1 Phiên bản OpenWRT sử dụng IPTables (firewall3)

Thêm 2 dòng sau vào iptables rules tại NetworkFirewall → Tab Custom Rules hoặc thêm trực tiếp vào /etc/firewall.user
iptables -t nat -A PREROUTING -i br-lan -p tcp --dport 53 -j DNAT --to 192.168.1.1:53 iptables -t nat -A PREROUTING -i br-lan -p udp --dport 53 -j DNAT --to 192.168.1.1:53

Cách khác: Bạn cũng có thế thêm thủ công rule fw3 vào file /etc/config/firewall

1
2
3
4
5
6
7
8
config redirect 'adguardhome_dns_53'
        option src 'lan'
        option proto 'tcp udp'
        option src_dport '53'
        option target 'DNAT'
        option name 'Adguard Home'
        option dest 'lan'
        option dest_port '53'

IV.3.2 Phiên bản OpenWRT sử dụng NFT Tables (firewall4)

Đăng nhập SSH và chạy lệnh sau:
nft add rule nat pre udp dport 53 ip saddr 192.168.1.0/24 dnat 192.168.1.1:53

IV.4 Tăng cache và bật Optimistic caching tối ưu tốc độ.

  • Optimistic caching hiểu nôm na là AGH sẽ gửi phản hồi DNS cho Domain từ cache của nó thay vì gửi request lên Uptream server và chờ phản hồi từ Server. Khi bật nó lên, AGH sẽ cache lại mọi truy vấn DNS và sử dụng nó cho lần truy vấn tiếp theo. - Phản hồi từ cache đồng nghĩa với việc cho dù TTL của domain đã hết nhưng AGH vẫn sẽ trả về entries cũ của domain đó đã lưu trong cache, AGH cũng sẽ cố gắng làm mới TTL của các domain đã cache. - Sử dụng trong gia đình hoặc thường xuyên truy cập vào một domain nào đó thì nên bật lên để tối ưu tốc độ phản hồi DNS.

  • Từ Giao diện Admin, Vào Settings -> DNS Settings -> kéo cuống mục DNS cache configuration - Mục cache size, các bạn tăng mức cache lên (tùy bộ nhớ Router mà set cho phù hợp). đơn bị tính bằng bytes. vd: 10 MB = 10204 kB = 10485760 Bytes - Tick vào Optimistic caching. Nhấn Save

  • Kể từ lúc bật Optimistic caching lên, sẽ mất 1 khoảng thời gian để AGH cache lại các request và Average processing time sẽ giảm dần.

Bài viết được tham khảo tại openwrt . Cộng với một số kinh nghiệm thiết lập AGH và sử dụng nhiều năm nay, hy vong sẽ giúp ích cho các bạn. Mọi thắc mắc vui lòng liên hệ trực tiếp.

Chúc các bạn thành công


Ads bottom post
0 Bình luận

Góp Ý / Bình Luận / Đánh giá