前言

AdGuard Home 部署的方式有很多种,一般二进制文件部署和直接编译到 OpenWrt 系统中是大家所常用的。而博主个人倾向于使用 Docker 部署,主要是考虑到其更新维护成本低、玩法多样、配置灵活。就比如对于科学上网的需求而言,需要对 DNS 进行分流,那么就可能需要使用 Docker 进行多容器部署与管理。这篇文章除了 AdGuard Home 的部署,还有一些与 Docker 相关的网络知识,认真看完这篇教程你会收获大量的知识和启发。

安装部署 AdGuard Home

Docker 部署涉及到网络模式的选择,小伙伴们可以根据自己的实际情况选择适合自己的。

Bridge 网络模式

博主个人并不推荐使用 Bridge 网络模式部署,因为要预先设定端口,考虑端口占用情况,且一旦固定后续只能通过重建容器进行更改,限制多、灵活度差。由于它是 Docker 默认的网络模式,且很多教程存在误导性质,所以还是简单说明一下部署方法,顺便科普一下 AdGuard Home 每个端口的作用。

官方提供的容器启动命令示例格式化后如下:

docker run -d \
    --name adguardhome \
    -v $PWD/adguardhome/work:/opt/adguardhome/work \
    -v $PWD/adguardhome/conf:/opt/adguardhome/conf \
    -p 53:53/tcp \
    -p 53:53/udp \
    -p 67:67/udp \
    -p 68:68/tcp \
    -p 68:68/udp \
    -p 80:80/tcp \
    -p 443:443/tcp \
    -p 853:853/tcp \
    -p 3000:3000/tcp \
    adguard/adguardhome

从示例中可以得知 AdGuard Home 所需要用到的端口,但实际情况并不是都会用到,这需要根据自身的需求来决定,以下是这些端口的作用:

  • 53:DNS 端口。即其他设备访问 AdGuard Home 进行 DNS 解析的默认端口。因为部分系统不支持自定义 DNS 端口,所以不建议自定义。部署前务必要查看是否有其它程序占用。
  • 67, 68: DHCP 端口。除非想代替你路由上的 DHCP 服务器,否则用不到。
  • 80: 管理页面默认 HTTP 端口。可忽略,在初始化页面设置管理端口为 3000 端口即可。
  • 443:HTTPS 和 DoH 端口。本地内网环境不需要。
  • 853:DoT 端口。不使用相关功能可忽略。
  • 3000:初始化设置端口。除非通过配置文件去设置,否则必须开启。

如果只是本地局域网使用一般只需要映射533000端口:

docker run -d \
    --name adguardhome \
    -v $PWD/adguardhome/work:/opt/adguardhome/work \
    -v $PWD/adguardhome/conf:/opt/adguardhome/conf \
    -p 53:53/tcp \
    -p 53:53/udp \
    -p 3000:3000/tcp \
    adguard/adguardhome

macvlan 网络模式

TIPS: 准确来说应该叫“macvlan 网络下的 bridge 模式”,因为说起来太拗口,而且 macvlan 其他模式很少使用,同时也为了和默认的 bridge 网络模式做区分,所以博主习惯将它称之为“macvlan 网络模式”。

使用 macvlan 网络模式的好处是容器相当于是一个独立的设备,可以拥有一个独立且固定的 IP 和 MAC 地址,不需要理会任何端口的状态,所有端口都可以使用默认的,兼容性更好。你甚至可以部署多个 AdGuard Home ,用作不同的用途,灵活度非常高。非常适合在本地局域网下的使用,就比如你可以部署在 NAS 上。macvlan 网络模式唯一缺点是宿主机无法与容器直接通讯(Docker 为了安全性做了隔离处理),如果宿主机想要使用可能需要进行一些特殊的设置,或者通过路由器转发的方式使用。

  • 创建 macvlan 网络(根据实际情况替换参数,并删除注释)

    docker network create \
        -d macvlan \ # 使用 macvlan 网络驱动
        --subnet=10.0.0.0/24 \ # 指定网段
        --gateway=10.0.0.1 \ # 指定网关 IP
        -o parent=eth0 \ # 指定网卡
        openwrt # 网络名称,随意,自己记得就行
    TIPS: 据博主的了解,用 Docker 使用 OpenWrt 容器的小伙伴一般都创建过 macvlan 网络,还有 unRaid 会默认创建一个 macvlan 网络。那么很大概率网段就已经被使用了,就不需要再重复创建了。执行docker network ls | grep macvlan命令可以查看已有的 macvlan 网络。
  • 启动容器(根据实际情况替换参数,并删除注释)

    docker run -d \
        --name adguardhome \
        --restart unless-stopped \
        --log-opt max-size=1m \
        --network openwrt \ # 使用之前创建的 macvlan 网络
        --ip 10.0.0.53 \ # 设置本容器的 IP
        -v $PWD/adguardhome/work:/opt/adguardhome/work \
        -v $PWD/adguardhome/conf:/opt/adguardhome/conf \
        adguard/adguardhome

Host 网络模式

Host 网络模式直接使用宿主机的网络,没有网络隔离,不需要考虑容器端口的映射,在容器启动后可以自由调整被占用的端口。适合在本机使用(localhost),或者直通外网的设备对外开放服务,就比如 VPS 、主路由。

docker run -d \
    --name adguardhome \
    --restart unless-stopped \
    --log-opt max-size=1m \
    --network host \
    -v $PWD/adguardhome/work:/opt/adguardhome/work \
    -v $PWD/adguardhome/conf:/opt/adguardhome/conf \
    adguard/adguardhome

AdGuard Home 初始化设置

使用网页浏览器访问 IP + 3000 端口即可进入到 AdGuard Home 的初始化界面,比如 IP 是10.0.0.53,那么就访问 http://10.0.0.53:3000

接着是监听接口(网卡)和端口设置,根据不同的网络模式和实际情况需要作出不同的修改:

  • Bridge 网络模式:前面提到过在不映射80端口的情况下可以改管理界面端口为3000
  • macvlan 网络模式:无需任何修改。
  • Host 网络模式:在多 IP 的 VPS 环境可能需要选择监听接口。端口方面,当提示占用时需要根据实际情况进行调整,是更改端口还是关闭相关占用端口的服务取决于你的最终使用场景。

然后是设置管理用户名和密码,后面都是直接下一步。

完事之后输入用户名和密码登录,就来到了仪表盘页面。

至此 AdGuard Home 就部署完成了。

在设备上使用 AdGuard Home DNS

最后你可以在 AdGuard Home 的设置指导页面找到相应系统的 DNS 设置方法,先不要着急在路由器上使用,建议先设置电脑或手机,通过访问一些网站来测试是否能正常解析。正常的情况下在仪表盘界面会有统计信息,在查询日志界面你会看到解析的详细记录信息。

尾巴

不要以为到这里就结束了,一切都还只是刚刚开始。有关 DNS 防污染以及去广告等优化增强设置博主将会在后面的教程中进行详细说明。

AdGuard Home 系列


本博客已开设 Telegram 频道,欢迎小伙伴们订阅关注。