numa:584⭐のポータブル DNS リゾルバ、ローカル開発ドメインとプライバシー保護を一本化
開発中に localhost のポート番号を覚えるのにうんざりしていませんか?カフェや空港の公共 WiFi で DNS クエリがのぞき見されることを心配していますか?今日紹介する numa は、Rust でゼロから書かれたポータブルな DNS リゾルバで、約 8MB の単一バイナリでこれらの問題を解決します。
プロジェクト概要
| 属性 | 内容 |
|---|---|
| GitHub | razvandimescu/numa |
| Stars | 584 |
| 言語 | Rust |
| 特徴 | 単一バイナリ、ローカルドメイン、広告ブロック、ODoH/DNS-over-TLS |
| 最終更新 | 今日 |
解決する問題
開発者のローカルドメインの悩み
従来のローカル開発フローでは以下が必要でした:
localhost:3000、localhost:5173、localhost: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-hole | 56k+ | ❌ | ✅ | ❌ | ❌ | ❌(デバイス必要) |
| AdGuard Home | 33k+ | ❌ | ✅ | ❌ | ❌ | ❌(デバイス必要) |
| Unbound | 長い歴史 | ❌ | ❌ | ✅ | ✅ | ❌(サーバー) |
| numa | 584 | ✅ | ✅ | ✅ | ✅ | ✅(単一バイナリ) |
numa のユニークな点はポータビリティです——約 8MB の単一バイナリで、macOS、Linux、Windows をサポートし、クラウドアカウントや Raspberry Pi は不要です。
使用シーン
ローカル開発
- 各プロジェクトに見栄えの良いドメインを割り当て(
frontend.numa、api.numa、admin.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 |