Linux で DNS over HTTPS を設定する方法

このガイドでは、Linux システムで DNS over HTTPS (DoH) を設定する方法を、複数の設定方法とベストプラクティスを含めて説明します。

前提条件

  • Linux オペレーティングシステム
  • 管理者(root)権限
  • 基本的なコマンドライン知識
  • 安定したネットワーク接続

systemd-resolved の使用

ステップ 1: systemd-resolved のバージョン確認

systemctl --version
systemd-resolve --version

バージョンが 247 以上であることを確認してください。これらのバージョンは DoH をサポートしています。

ステップ 2: resolved.conf の設定

/etc/systemd/resolved.conf を編集します:

[Resolve]
DNS=1.1.1.1 1.0.0.1
DNSOverTLS=yes
DNSSEC=yes
Cache=yes
DNSStubListener=yes

DoH の場合は、以下の設定を追加します:

[Resolve]
DNS=https://cloudflare-dns.com/dns-query
     https://dns.google/dns-query
DNSOverTLS=no
DNSSEC=yes
Cache=yes
DNSStubListener=yes

ステップ 3: サービスの再起動

sudo systemctl restart systemd-resolved
sudo systemctl status systemd-resolved

NetworkManager の使用

ステップ 1: NetworkManager のバージョン確認

nmcli --version

バージョンが DoH 機能をサポートしていることを確認してください。

ステップ 2: 接続の設定

nmcli を使用して DoH を設定します:

# 現在の接続を一覧表示
nmcli connection show

# 指定した接続を変更
sudo nmcli connection modify "接続名" ipv4.dns "1.1.1.1,1.0.0.1" ipv4.dns-over-tls yes
sudo nmcli connection modify "接続名" ipv6.dns "2606:4700:4700::1111,2606:4700:4700::1001" ipv6.dns-over-tls yes

ステップ 3: 変更の適用

sudo nmcli connection up "接続名"

スタンドアロンクライアントの使用

dnscrypt-proxy

  1. インストール
# Debian/Ubuntu
sudo apt install dnscrypt-proxy

# Fedora
sudo dnf install dnscrypt-proxy

# Arch Linux
sudo pacman -S dnscrypt-proxy
  1. 設定

/etc/dnscrypt-proxy/dnscrypt-proxy.toml を編集します:

server_names = ['cloudflare', 'google']
listen_addresses = ['127.0.0.1:53']
max_clients = 250
ipv4_servers = true
ipv6_servers = true
dnscrypt_servers = true
doh_servers = true
require_dnssec = true
require_nolog = true
require_nofilter = true
force_tcp = false
timeout = 2500
keepalive = 30
  1. サービスの開始
sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy
sudo systemctl status dnscrypt-proxy

Stubby

  1. インストール
# Debian/Ubuntu
sudo apt install stubby

# Fedora
sudo dnf install stubby

# Arch Linux
sudo pacman -S stubby
  1. 設定

/etc/stubby/stubby.yml を編集します:

resolution_type: GETDNS_RESOLUTION_STUB
dns_transport_list:
  - GETDNS_TRANSPORT_TLS
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
tls_query_padding_blocksize: 128
edns_client_subnet_private: 1
round_robin_upstreams: 1
idle_timeout: 10000
listen_addresses:
  - 127.0.0.1@53
  - 0::1@53
upstream_recursive_servers:
  - address_data: 1.1.1.1
    tls_auth_name: "cloudflare-dns.com"
  - address_data: 1.0.0.1
    tls_auth_name: "cloudflare-dns.com"
  1. サービスの開始
sudo systemctl enable stubby
sudo systemctl start stubby
sudo systemctl status stubby

設定の確認

方法 1: dig の使用

# DNS 解決をテスト
dig @127.0.0.1 example.com

# DNSSEC を確認
dig @127.0.0.1 example.com +dnssec

# DoH サーバーを検証
dig @127.0.0.1 whoami.cloudflare CH TXT

方法 2: resolvectl の使用

# 現在の DNS 設定を表示
resolvectl status

# DNS 解決をテスト
resolvectl query example.com

# DNSSEC を確認
resolvectl query --dnssec example.com

方法 3: オンラインテスト

  1. DNS リークテストウェブサイトにアクセス
  2. 包括的テストを実行
  3. DNS リクエストのルーティングを確認

トラブルシューティング

一般的な問題

  1. 解決エラー

    • ネットワーク接続を確認
    • 設定ファイルを確認
    • サービスのステータスを確認
    • システムログを確認
  2. パフォーマンスの問題

    • 最寄りのサーバーを選択
    • キャッシュ設定を最適化
    • 応答時間を監視
    • システムリソースを確認
  3. 互換性の問題

    • パッケージを更新
    • 依存関係を確認
    • システム要件を確認
    • 代替設定をテスト

ログ分析

  1. システムログ
# systemd-resolved のログを表示
journalctl -u systemd-resolved

# NetworkManager のログを確認
journalctl -u NetworkManager

# dnscrypt-proxy のログを表示
journalctl -u dnscrypt-proxy
  1. ネットワーク診断
# ネットワーク接続をテスト
ping 1.1.1.1

# DNS 解決を確認
nslookup example.com

# DNSSEC を検証
dig example.com +dnssec

ベストプラクティス

  1. プロバイダの選択

    • プライバシーポリシーを評価
    • サービスの可用性を確認
    • 地理的位置を考慮
    • 接続速度をテスト
  2. セキュリティの推奨事項

    • 信頼できるプロバイダを使用
    • DNSSEC を有効化
    • 定期的なシステム更新
    • ネットワーク活動を監視
  3. パフォーマンスの最適化

    • 最寄りのサーバーを選択
    • キャッシュ設定を最適化
    • パフォーマンス指標を監視
    • 定期的なメンテナンス

企業導入

システム全体の設定

  1. 設定ファイルの作成

    • systemd-resolved のセットアップ
    • NetworkManager の設定
    • クライアントソフトウェアの展開
  2. 展開戦略

    • 構成管理の使用
    • モニタリングの実装
    • メンテナンス期間の計画
  3. メンテナンス管理

    • 定期的な更新
    • パフォーマンスモニタリング
    • 問題追跡
    • バックアップ手順

次のステップ