1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AdGuard Home+Cloudflare Tunnelで外出先から使えるDoHサーバを構築した

Last updated at Posted at 2025-01-01

必要なもの

  • 各Packageをインストールしたサーバー
    • AdGuard Home
    • Cloudflared
  • Cloudflareで管理できる状態のドメイン(Freeプラン可)

AdGuard Homeの設定

オリジン証明書の取得

Cloudflareとの通信で使用する証明書を取得する

SSl/TLS -> オリジンサーバー -> オリジン証明書 -> 証明書を作成を選択

image.png

オリジンのホスト名に*.[DOMAIN], [DOMAIN], doh.[DOMAIN]を設定する. 有効期間は適当
作成したら証明書と秘密鍵を保存しておく

ルート証明書のインストール

Cloudflare Origin CAルート証明書をインストールする. インストール後は念の為再起動

curl -OL https://developers.cloudflare.com/ssl/static/origin_ca_ecc_root.pem 
curl -OL https://developers.cloudflare.com/ssl/static/origin_ca_rsa_root.pem
sudo cp origin_ca_*.pem /etc/ssl/certs/
sudo cp origin_ca_*.pem /usr/local/share/ca-certificates/

オリジン証明書の設定

AdGuard Homeの暗号化設定を開き,証明書と秘密鍵を貼り付ける

image.png

Cloudflare Tunnelの設定

Cloudflare Tunnelを用いて自宅のAdGuard Homeを公開する

Tunnelを使うメリット

  • 固定IP不要 & IP公開不要
  • DDoS対策/WAF/Caching等便利な機能が使える

トンネルの作成

以下全てRoot

# ログイン
cloudflared tunnel login

# トンネルを追加
cloudflared tunnel create doh

# 設定ファイルを作成
touch ~/.cloudflared/config.yml
config.yml
tunnel: [UUID]
credentials-file: /root/.cloudflared/[UUID].json

ingress:
  - hostname: doh.[DOMAIN]
    path: ^/dns-query 
    service: https://[IP]
    originRequest:
      disableChunkedEncoding: false
      noTLSVerify: true
  - service: http_status:404
# DNSレコードを登録
cloudflared tunnel route dns doh doh.[DOMAIN]

サービス化

cloudflared service install

WAF設定の緩和(参考)

構成ルールでURI(https://doh.[DOMAIN]/dns-query)に対して以下の設定を適用

  • HTTPSの自動リライト: オン
  • ブラウザ整合性チェック: オフ
  • セキュリティレベル: "基本的にオフにする"

また,レート制限等も必要に応じて調整する

Cacheは無効化することをお勧めします...

テスト

DoHに対応したdnslookup (https://github.com/ameshkov/dnslookup) というツールでテストしてみる.

scoop install dnslookup
 dnslookup example.com https://doh.[DOMAIN]/dns-query
dnslookup v1.11.1
Server: https://doh.[DOMAIN]/dns-query

dnslookup result (elapsed 622.2347ms):
;; opcode: QUERY, status: NOERROR, id: 9560
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;example.com.   IN       A

;; ANSWER SECTION:
example.com.    3600    IN      A       93.184.215.14

現時点の問題点

  • 自前のDoHサーバにアクセスしていることはNW管理者にバレる
    • 最初にプレーンDNSでアドレス解決する(Bootstrap)
  • 自分以外のユーザもクエリ可能
    • これに関してはWAFの設定でどうにかするしかない
  • Cloudflareによる中間者攻撃が(理論上)可能
    • CFは暗号化を解除できるのでDNS応答の改ざん等やろうと思えばできてしまう
    • AGH-CF間/CF-Client間の暗号化は別として処理される(CFで一旦復号する)
  • 外部からアクセス可能なIPが無いので設定できるシステムが限られる
    • 現時点ではiOS(DNSecure)とChromium系ブラウザで動作確認済み
  • 直接アクセスせず別のDoHサーバ(CoreDNS等)を経由したほうが良いかもしれない
    • 何らかの脆弱性で管理画面にアクセスされる可能性もゼロではない
    • 管理画面のアクセス元制限的な設定が見当たらない...
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?