NextDNSを導入した

Table of Contents

Introduction

かねてから興味があった NextDNS が Terraform Provider と nix-darwin/nixos で設定できることを知り、せっかくなので導入してみた。

What is NextDNS?

流行のDeep Reasearchの結果は以下Gist。

https://gist.github.com/takeokunn/aa9bc9ef2c7d670b71bfd962c8a1a80e

日本人でも使っている人がちらほらいる。

作業手順

1. アカウント作成してAPI Key発行

公式サイトからメールアドレスとパスワードで登録する。 https://nextdns.io/

管理画面からMFAを設定してAPI keyを発行する。 https://my.nextdns.io/account

2. Terraform設定

ドキュメントを参考に画面上で設定できるものを宣言的に設定する。 https://registry.terraform.io/providers/carbans/nextdns/latest/docs

2.1 providerを設定

sops にAPI Tokenを保存して terraform-provider-sops 経由で入れる。

terraform {
  required_providers {
    sops = {
      source  = "carlpett/sops"
      version = "~> 0.5"
    }
    nextdns = {
      source  = "carbans/nextdns"
      version = "~> 0.2"
    }
  }
}

provider "sops" {}

data "sops_file" "secret" {
  source_file = "./secrets.yaml"
}

provider "nextdns" {
  api_key = data.sops_file.secret.data.nextdns
}

2.2 各種設定

とりあえず有効にできるものは有効にした。

resource "nextdns_profile" "main" {
  name = "Main Network"
}

resource "nextdns_security" "main" {
  profile_id                = nextdns_profile.main.id
  ai_threat_detection       = true
  crypto_jacking            = true
  csam                      = true
  ddns                      = true
  dga                       = true
  dns_rebinding             = true
  google_safe_browsing      = true
  idn_homographs            = true
  nrd                       = false
  parking                   = true
  threat_intelligence_feeds = true
  typo_squatting            = true
}

resource "nextdns_privacy" "main" {
  profile_id         = nextdns_profile.main.id
  disguised_trackers = true
  allow_affiliate    = true
}

resource "nextdns_settings" "main" {
  profile_id = nextdns_profile.main.id
  web3       = true
  logs {
    enabled   = true
    retention = "1 day"
    location  = "us"

    privacy {
      log_clients_ip = true
      log_domains    = true
    }
  }

  block_page {
    enabled = true
  }

  performance {
    ecs              = true
    cache_boost      = true
    cname_flattening = true
  }
}

3. Nix設定

3.1 nix-darwin設定

nix-darwinはserviceで提供してくれているので有効にするだけ。 https://mynixos.com/nix-darwin/options/services.nextdns

{
  services.nextdns = {
    enable = true;
    arguments = [ "-profile" "xxxx" ];
  };
}

3.2 NixOS設定

NixOS公式が提供してくれているので同様に有効するだけ。 https://search.nixos.org/options?channel=24.11&from=0&size=50&sort=relevance&type=packages&query=nextdns

4. 接続確認

あまりよくわかっていないが、以下を明示的にたたく必要があった。(要調査)

$ nix run nixpkgs#nextdns activate

管理画面で有効になっていることを確認できればよい。

ついでにAndroidも設定をした。

プライベート DNS
Android 9 以降

1. 設定 → ネットワークとインターネット → 詳細設定 → プライベート DNS に移動します。
2.「プライベート DNS プロバイダのホスト名」オプションを選択します。
3. xxxx.dns.nextdns.io を入力し、「保存」を押します。

作業結果

Webサイトへのアクセスが体感速くなったがあくまで体感。 もう少し運用してみて様子を見たい。