開発中に localhost のポート番号を覚えるのにうんざりしていませんか?カフェや空港の公共 WiFi で DNS クエリがのぞき見されることを心配していますか?今日紹介する numa は、Rust でゼロから書かれたポータブルな DNS リゾルバで、約 8MB の単一バイナリでこれらの問題を解決します。

プロジェクト概要

属性内容
GitHubrazvandimescu/numa
Stars584
言語Rust
特徴単一バイナリ、ローカルドメイン、広告ブロック、ODoH/DNS-over-TLS
最終更新今日

解決する問題

開発者のローカルドメインの悩み

従来のローカル開発フローでは以下が必要でした:

  • localhost:3000localhost:5173localhost:8080 などのポート番号を覚える
  • HTTPS 実現のために mkcert で自己署名証明書を生成
  • nginx リバースプロキシの設定
  • /etc/hosts ファイルの編集

numa はこれらの手順をすべて不要にします。たった1つのコマンドで:

curl -X POST localhost:5380/services \
  -d '{"name":"frontend","target_port":5173}'

これで https://frontend.numa に直接アクセスでき、有効な証明書と WebSocket 透過サポートが付属します。

DNS クエリのプライバシー保護

従来の DNS クエリは平文送信されるため、ISP や公共 WiFi 運営者があなたがどのサイトを訪問しているか見ることができます。numa は以下をサポートします:

  • ODoH (Oblivious DoH):RFC 9230 準拠、どの単一エンティティも「あなたが誰か」と「何を尋ねたか」を同時に知ることは不可能
  • DNS-over-TLS:RFC 7858、暗号化されたクライアント接続
  • 再帰解決:ルートネームサーバーから直接解決し、アップストリーム DNS プロバイダーに依存しない

主な機能

1. .numa ローカル開発ドメイン

  • 自動 TLS 証明書(ローカル CA)
  • パスベースルーティング(例:app.numa/api:5001
  • WebSocket 透過、HMR(ホットモジュールリプレースメント)対応
  • /etc/hosts の編集不要

2. 広告ブロック

  • Hagezi Pro リストベースの 385K+ ドメインをブロック
  • カフェ、ホテル、空港などあらゆるネットワークで有効
  • ラップトップとともに移動し、追加設定不要

3. 3つの解決モード

モード説明
forward(デフォルト)システム DNS への透過プロキシ、キャッシュと広告ブロック付き
recursiveルートネームサーバーから直接解決、アップストリーム依存なし
auto自動検出、利用可能時は再帰、ブロック時は暗号化 DoH にフォールバック

4. DNSSEC 検証

DNSSEC 信頼チェーン検証を完全サポート:

  • RRSIG 署名検証
  • DNSKEY 検証
  • DS デリゲーション検証
  • NSEC/NSEC3 否定証明

5. LAN サービスディスカバリー

複数のマシンで numa を実行すると、mDNS で自動的に相互検出します:

Machine A (192.168.1.5)    Machine B (192.168.1.20)
┌─────────────────┐         ┌─────────────────┐
│ numa            │◄──mDNS──►│ numa            │
│ - api:8000      │ discovery │ - grafana:3000  │
└─────────────────┘         └─────────────────┘

Machine B から http://api.numa にアクセスすると、自動的に Machine A の 8000 ポートにプロキシされます。

クイックスタート

インストール

# macOS
brew install razvandimescu/tap/numa

# Linux
curl -fsSL https://raw.githubusercontent.com/razvandimescu/numa/main/install.sh | sh

# Arch Linux (AUR)
yay -S numa-git

# すべてのプラットフォーム
cargo install numa

実行

# フォアグラウンド実行(53 ポート使用に root 権限が必要)
sudo numa

# システム DNS として設定
sudo numa install

# アンインストール
sudo numa uninstall

ダッシュボード:http://numa.numa または http://localhost:5380

Docker デプロイ

# Linux(ホストネットワークモード推奨)
docker run -d --name numa --network host ghcr.io/razvandimescu/numa

# macOS/Windows Docker Desktop
docker run -d --name numa \
  -p 53:53/udp -p 53:53/tcp -p 5380:5380 \
  ghcr.io/razvandimescu/numa

類似ツール比較

ツールStarsローカルドメイン広告ブロック再帰解決DNSSECポータビリティ
Pi-hole56k+❌(デバイス必要)
AdGuard Home33k+❌(デバイス必要)
Unbound長い歴史❌(サーバー)
numa584✅(単一バイナリ)

numa のユニークな点はポータビリティです——約 8MB の単一バイナリで、macOS、Linux、Windows をサポートし、クラウドアカウントや Raspberry Pi は不要です。

使用シーン

ローカル開発

  • 各プロジェクトに見栄えの良いドメインを割り当て(frontend.numaapi.numaadmin.numa
  • 設定不要の自動 HTTPS
  • チームメンバーとローカルサービスを共有

プライバシー保護

  • 公共 WiFi ですべての DNS クエリを暗号化
  • ISP の閲覧履歴追跡を防止
  • サードパーティ DNS への依存を回避する再帰解決

広告ブロック

  • システムレベルの広告ブロック
  • ラップトップとともに移動し、あらゆるネットワークで有効
  • ブラウザ拡張機能より徹底的

注意事項

  • 新しいプロジェクトの成熟度:Pi-hole や AdGuard Home と比較して、numa は比較的新しい(2020 年末作成)
  • root 権限:53 ポートへのバインドには管理者権限が必要
  • Firefox の特別対応:Firefox は独自の証明書ストアを使用するため、ローカル CA を手動で信頼する必要があります

まとめ

numa はローカル開発ドメイン、広告ブロック、DNS プライバシー保護の 3 つの機能を単一のポータブルバイナリに統合しました。ポート番号を覚えるのにうんざりしていて、かつ DNS プライバシーを気にしているなら、numa は試す価値があります。今日 cargo install numa または brew install numa を実行すれば、明日の開発環境がより洗練されます。


属性内容
リポジトリhttps://github.com/razvandimescu/numa
ライセンスMIT
言語Rust
メンテナー@razvandimescu