搭建adguardhome配合mosdns

前言

原先的方案如下

  • docker 运行 adguardhome, 在同一个docker-compose中同时运行dnscrypt
  • dnscrypt容器固定其IP地址
  • adguardhome中的dns服务器设置为dnscrypt
  • 外部使用caddy反代adguardhome, 顺带申请ssl
  • adguardhome配置使用caddy申请下来的ssl证书到加密设置中
  • 使用doh访问DNS服务

缺陷: dnscrypt由于本质还是通过tcp协议访问源头dns服务器, 偶尔(并非偶尔)会出现超时的情况, 对于稍微多频的请求, 就力不从心了.

最好的方案肯定还是运行clash, 让dns请求走通道出去进行查询

修改方案

将dnscrypt替换为easymosdns

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
services:
  adguardhome:
    image: adguard/adguardhome
    container_name: adguardhome
    restart: unless-stopped
    ports:
      - xxx:80
      - xxx:443
      - xxx:3000
    networks:
      linx_network:

    volumes:
      - ./workdir:/opt/adguardhome/work
      - ./confdir:/opt/adguardhome/conf
      - 证书目录:/opt/adguardhome/ssl    
  mosdns:
    image: irinesistiana/mosdns:v4.5.3
    container_name: mosdns
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 5533:53
    volumes:
      - ./mosdns:/etc/mosdns
    restart: always
    networks:
      linx_network:
        ipv4_address: 172.30.0.8


networks:
  linx_network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.30.0.0/24

证书目录为这样的

1
/data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/<域名>

caddy容器的映射是

1
2
volumes:
  - ./data:/data

调整为实际的路径即可

对于adguardhome的端口, 只使用DOH的情况下, 只需要映射3000 80 443端口即可.

3000端口为安装初始化时使用, 80则是未配置加密证书时临时先登录用的端口, 配置好ssl之后, 只需要一个443端口即可

caddy的docker-compose.yaml文件如下:

1
2
3
4
5
6
7
8
9
services:
  caddy:
    image: caddy
    restart: unless-stopped
    ports:
      - '443:443'
    volumes:
      - ./data:/data
      - ./Caddyfile:/etc/caddy/Caddyfile

Caddyfile文件如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
域名:443 {
  reverse_proxy https://127.0.0.1:xxx {
    header_up Host {host}
    header_up X-Real-IP {remote}
    header_up X-Forwarded-For {remote}
    header_up X-Forwarded-Port {server_port}
    header_up X-Forwarded-Proto "http"
    trusted_proxies 172.30.0.0/20
    transport http {
      tls_insecure_skip_verify
    }
  }

}

adguardhome设置如下:

  • 上游dns设置为172.30.0.8
  • 加密设置中启用加密
  • 服务器名称填写域名
  • 证书为 /opt/adguardhome/ssl/域名.crt
  • 私钥为 /opt/adguardhome/ssl/域名.key
Licensed under CC BY-NC-SA 4.0
记录平时瞎折腾遇到的各种问题, 方便查找
使用 Hugo 构建
主题 Stack 3.29.0Jimmy 设计