🧑‍⚕️

ミニPCでマルチサーバー構築 [AdGuard Homeコンテナ]

2024/05/22に公開


ミニPCでマルチサーバー構築シリーズのAdGuard Homeコンテナ構築の記録メモです。

シリーズ

  1. N100搭載ミニPCでマルチサーバーの構想と構築準備
  2. ミニPCでマルチサーバー構築 [OS等インストール]
  3. ミニPCでマルチサーバー構築 [Sambaコンテナ]
  4. ミニPCでマルチサーバー構築 [PostgreSQLコンテナ]
  5. ミニPCでマルチサーバー構築 [Nginxコンテナ]
  6. ミニPCでマルチサーバー構築 [Immichコンテナ]
  7. ミニPCでマルチサーバー構築 [VaultwardenコンテナとTailscale]
  8. ミニPCでマルチサーバー構築 [AdGuard Homeコンテナ] この記事
  9. ミニPCでマルチサーバー構築 [GUI環境整備]

簡単な要件

  • セルフホスト可能
  • DNSフィルタリングができる
  • DNSキャッシュが利用可能
  • DHCPは使用しない

検討事項とコンテナ化

  • 記事も多くあるので比較検討はせずAdGuard Homeに決定
    • Webサイトの記事を見てやってみるか感が出たため
  • 公式のDocker imageが存在するためそれを使用する

Docker Compose周り作成

ディレクトリ構成

$ tree .
.
├── adgrd
│   └── conf
│       └── AdGuardHome.yaml
└── compose.yaml

compose.yaml

compose.yaml
services:
  adgrd:
    image: adguard/adguardhome:latest
    restart: unless-stopped
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "853:853/tcp"
      - "8080:8080/tcp"
      - "3000:3000/tcp"
    environment:
      - TZ=Asia/Tokyo
    volumes:
      - /srv/adgrd/work:/opt/adguardhome/work
      - ./adgrd/conf:/opt/adguardhome/conf
      - /var/log/adgrd:/var/log/adgrd
    networks:
      - adgnet

networks:
  adgnet:

設定

実際の設定ファイル

  • コンテナ内の位置: /opt/adguardhome/conf/AdGuardHome.yaml
AdGuardHome.yaml
AdGuardHome.yaml
http:
  pprof:
    port: 6060
    enabled: false
  address: 0.0.0.0:8080
  session_ttl: 720h
users:
  - name: user1
    password: [password_hash]
auth_attempts: 5
block_auth_min: 15
http_proxy: ""
language: ""
theme: auto
dns:
  bind_hosts:
    - 0.0.0.0
  port: 53
  anonymize_client_ip: false
  ratelimit: 20
  ratelimit_subnet_len_ipv4: 24
  ratelimit_subnet_len_ipv6: 56
  ratelimit_whitelist: []
  refuse_any: true
  upstream_dns:
    - tls://dns.google:853
    - tls://one.one.one.one:853
    - tls://dns.quad9.net
    - https://dns10.quad9.net/dns-query
    - https://doh.opendns.com/dns-query
  upstream_dns_file: ""
  bootstrap_dns:
    - 1.1.1.1
    - 1.0.0.1
    - 2606:4700:4700::1111
    - 2606:4700:4700::1001
    - 8.8.8.8
    - 8.8.4.4
    - 2001:4860:4860::8888
    - 2001:4860:4860::8844
    - 9.9.9.10
    - 149.112.112.10
    - 2620:fe::10
    - 2620:fe::fe:10
  fallback_dns: []
  upstream_mode: parallel
  fastest_timeout: 1s
  allowed_clients: []
  disallowed_clients: []
  blocked_hosts:
    - version.bind
    - id.server
    - hostname.bind
  trusted_proxies:
    - 127.0.0.0/8
    - ::1/128
  cache_size: 4194304
  cache_ttl_min: 3600
  cache_ttl_max: 84600
  cache_optimistic: true
  bogus_nxdomain: []
  aaaa_disabled: false
  enable_dnssec: true
  edns_client_subnet:
    custom_ip: ""
    enabled: false
    use_custom: false
  max_goroutines: 300
  handle_ddr: true
  ipset: []
  ipset_file: ""
  bootstrap_prefer_ipv6: false
  upstream_timeout: 10s
  private_networks: []
  use_private_ptr_resolvers: false
  local_ptr_upstreams: []
  use_dns64: false
  dns64_prefixes: []
  serve_http3: false
  use_http3_upstreams: false
  serve_plain_dns: true
  hostsfile_enabled: true
tls:
  enabled: false
  server_name: ""
  force_https: false
  port_https: 443
  port_dns_over_tls: 853
  port_dns_over_quic: 853
  port_dnscrypt: 0
  dnscrypt_config_file: ""
  allow_unencrypted_doh: false
  certificate_chain: ""
  private_key: ""
  certificate_path: ""
  private_key_path: ""
  strict_sni_check: false
querylog:
  dir_path: ""
  ignored: []
  interval: 2160h
  size_memory: 1000
  enabled: true
  file_enabled: true
statistics:
  dir_path: ""
  ignored: []
  interval: 2160h
  enabled: true
filters:
  - enabled: true
    url: https://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt
    name: AdGuard DNS filter
    id: 1
  - enabled: false
    url: https://adguardteam.github.io/HostlistsRegistry/assets/filter_2.txt
    name: AdAway Default Blocklist
    id: 2
  - enabled: true
    url: https://raw.githubusercontent.com/tofukko/filter/master/Adblock_Plus_list.txt
    name: tofukko filter
    id: 1715188882
whitelist_filters: []
user_rules: []
dhcp:
  enabled: false
  interface_name: ""
  local_domain_name: lan
  dhcpv4:
    gateway_ip: ""
    subnet_mask: ""
    range_start: ""
    range_end: ""
    lease_duration: 86400
    icmp_timeout_msec: 1000
    options: []
  dhcpv6:
    range_start: ""
    lease_duration: 86400
    ra_slaac_only: false
    ra_allow_slaac: false
filtering:
  blocking_ipv4: ""
  blocking_ipv6: ""
  blocked_services:
    schedule:
      time_zone: UTC
    ids: []
  protection_disabled_until: null
  safe_search:
    enabled: false
    bing: true
    duckduckgo: true
    google: true
    pixabay: true
    yandex: true
    youtube: true
  blocking_mode: default
  parental_block_host: family-block.dns.adguard.com
  safebrowsing_block_host: standard-block.dns.adguard.com
  rewrites: []
  safebrowsing_cache_size: 1048576
  safesearch_cache_size: 1048576
  parental_cache_size: 1048576
  cache_time: 30
  filters_update_interval: 24
  blocked_response_ttl: 10
  filtering_enabled: true
  parental_enabled: false
  safebrowsing_enabled: false
  protection_enabled: true
clients:
  runtime_sources:
    whois: true
    arp: true
    rdns: true
    dhcp: true
    hosts: true
  persistent: []
log:
  file: /var/log/adgrd/log
  max_backups: 3
  max_size: 100
  max_age: 365
  compress: false
  local_time: true
  verbose: false
os:
  group: ""
  user: ""
  rlimit_nofile: 0
schema_version: 28

各設定値

変更点抜粋

  • upstream_dns: 有名どころのパブリックDNSを設定
  • bootstrap_dns: upstream_dnsの名前解決するDNSを指定
  • upstream_mode: 反応速度のためにparallel
  • enable_dnssec: 念のためtrue
  • cache_size: 大き目に確保するため4MiB
  • cache_optimistic: 反応速度のためにtrue
  • filters: 日本の広告に有効らしいtofukko filterを追加
    • https://raw.githubusercontent.com/tofukko/filter/master/Adblock_Plus_list.txt
  • log: 保存場所とローカル時間を指定
    • コンテナ内クエリログ保存場所は以下
      • /opt/adguardhome/work/data/querylog.json

ポート53競合解決

  • Ubuntuを使用しているためデフォルトだと競合が発生する
  • 公式の案内通りに設定することで解決

参考文献

Discussion