AdguardHome是一个去广告应用,但是它不仅仅能去广告,还能做一个局域网的DNS服务器。

安装

这个应用因为算是网络管理相关,我就安装在了OpenWrt上,在编译时只需要勾选luci-app-adguardhome即可。

然后在OpenWrt的管理页面然后下载核心(可能需要科学上网)。

去广告

  • Web管理页面默认在3000端口

  • 默认的用户名密码为adminadmin

  • 在设置 → DNS设置 → 上游DNS服务器可以填写公共DNS服务器,比如

    # 国外
    8.8.8.8
    1.1.1.1
    
    # 国内
    223.5.5.5
    114.114.114.114
    
  • 之后把设备的DNS服务器改为OpenWrt即可

默认DNS服务器

  • OpenWrt默认的DNS服务器为dnsmasq,它在监听53端口,既然我们已经安装了AdguardHome,完全可以把它作为DNS服务器,在OpenWrt输入命令

    uci set dhcp.@dnsmasq[0].port='0'
    uci commit dhcp
    /etc/init.d/dnsmasq restart
    

    可以让dnsmasq不监听53端口

  • 然后修改AdguardHome的配置文件,它的默认port为1753,可以改成53

    # vim /etc/AdGuardHome.yaml
    dns:
      bind_hosts:
        - 0.0.0.0
      port: 53
    
  • 重启AdguardHome

    /etc/init.d/AdGuardHome restart
    
  • 这样AdguardHome就变成默认DNS服务器了,默认服务器的好处就是你可以用它来监控哪个设备请求了哪些服务,否则各个设备的请求得先被dnsmasq接收,然后再转到Adguard Home,这样在Adguard Home看到的所有的请求都来自于localhost

给设备命名

  • 把Adguard Home设置为默认DNS服务器还有个好处就是可以单独命名各个设备,之前访问debian服务器还得记住它的IP地址,现在只要记住设备的域名就可以了

  • 在过滤器 → DNS重写,添加重写规则,效果如图

    DNS Rewrite

  • 然后浏览器访问http://openwrt.home就能直接访问到OpenWrt的Web Manager了

修改用户名密码

  • 其实这个用户名密码没有很重要,因为Adguard Home肯定只在内网运行(我没有把OpenWrt部署到公网),但是为了以防万一还是修改一下用户名密码,admin/admin实在是太危险了

  • 详见:Configuration · AdguardTeam/AdGuardHome Wiki · GitHub

  • 如果你有Alpine,可以在Alpine内运行

    docker run --rm alpine sh -c 'apk add --no-cache apache2-utils >/dev/null && htpasswd -B -C 10 -n -b username password'