自動化された研究アーティファクト — 上流プロジェクトではありません。
このリポジトリは、ラヴァル大学の修士論文のために、公開されているGitHub Actionsワークフローの脆弱性を再現することを目的として、自動化ハーネスによって構築された使い捨てラボです。これは
serverless-dns/serverless-dnsのコミットb0b1a1538aeb1991b5bc13dfe4e18e686913b12e(2025-04-26)の逐語的なスナップショットであり、そのプロジェクト自身のライセンスの下で再配布されています。そのライセンスファイルはこのスナップショットに変更なしで含まれています。上流プロジェクトは関与しておらず、決して標的にはなりません。ここで研究されている脆弱性はすでに公開されています。このリポジトリ内のすべてのシークレットと変数はランダムに生成されたダミー値であり、実際の認証情報は存在しません。アクションの参照とランナーイメージは、2025-04-26に解決されたものに固定されています。スナップショットに加えられたすべての変更については、ハーネス出力の
pinning.mdを参照してください。質問や異議がある場合: [email protected]
serverless-dns は、Pi-Hole風のコンテンツブロッキング機能を持つ、サーバーレスでスタブ型のDNS-over-HTTPS (DoH) およびDNS-over-TLS (DoT) リゾルバーです。Cloudflare Workers、Deno Deploy、Fastly Compute@Edge、Fly.io ですぐに動作します。これらのサービスの無料枠はすべて、月間10〜20台のデバイス分のDNSトラフィックをカバーするのに十分なはずです。
RethinkDNSは、以下のエンドポイントで本番環境において serverless-dns を実行しています:
| クラウドプラットフォーム | サーバー所在地 | プロトコル | ドメイン | 使用方法 |
|---|---|---|---|---|
| ⛅ Cloudflare Workers | 280以上 (ping) | DoH | sky.rethinkdns.com | 設定 |
| 🦕 Deno Deploy | 30以上 (ping) | DoH | 非公開ベータ | |
| ⏱️ Fastly Compute@Edge | 80以上 (ping) | DoH | 非公開ベータ | |
| 🪂 Fly.io | 30以上 (ping) | DoHおよびDoT | max.rethinkdns.com | 設定 |
サーバー側の処理時間は0ミリ秒(ms)から2ms(中央値)で、エンドツーエンドのレイテンシー(地域やネットワークによって異なります)は10msから30ms(中央値)です。
Fly.io上の Rethink DNS リゾルバーは、FOSS United によってスポンサーされています。
Cloudflare Workersは、serverless-dns をセットアップするのに最も簡単なプラットフォームです:
ステップバイステップの手順については、以下を参照してください:
| プラットフォーム | 難易度 | ランタイム | ドキュメント |
|---|---|---|---|
| ⛅ Cloudflare | 簡単 | v8 Isolates | Cloudflare Workersでのホスティング |
| 🦕 Deno.com | 普通 | Deno Isolates | Deno.comでのホスティング |
| ⏱️ Fastly Compute@Edge | 簡単 | Fastly JS | Fastly Compute@Edgeでのホスティング |
| 🪂 Fly.io | 難しい | Node MicroVM | Fly.ioでのホスティング |
ブロックリストを設定するには、ブラウザから https://<my-domain>.tld/configure にアクセスしてください(RethinkDNSの_設定_ページと同様のものが読み込まれるはずです)。
ヘルプやサポートが必要な場合は、お気軽にissueを開くか、パッチを送信してください。
コード:
# 作業ディレクトリに移動
cd /my/work/dir
# このリポジトリをクローン
git clone https://github.com/serverless-dns/serverless-dns.git
# serverless-dnsに移動
cd ./serverless-dns
Node:
# 必要に応じてnvm経由でnode v22+をインストール
# https://github.com/nvm-sh/nvm#installing-and-updating
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
nvm install --lts
# 依存関係をダウンロード
npm i
# (任意) 依存関係を更新
npm update
# node上でserverless-dnsを実行
./run n
# clinicjs.orgプロファイラーを実行
./run n [cpu|fn|mem]
Deno:
# deno.land v2+をインストール
# https://github.com/denoland/deno/#install
curl -fsSL https://deno.land/install.sh | sh
# deno上でserverless-dnsを実行
./run d
Fastly:
# 必要に応じてnvm経由でnode v22+をインストール
# Fastly CLIをインストール
# https://developer.fastly.com/learning/tools/cli
# Fastly Compute@Edge上でserverless-dnsを実行
./run f
Wrangler:
# Cloudflare Workers (cli) 別名Wranglerをインストール
# https://developers.cloudflare.com/workers/cli-wrangler/install-update
npm i wrangler --save-dev
# Cloudflare Workers (cli) 上でserverless-dnsを実行
# 最初にWranglerをセットアップしてください:
# https://developers.cloudflare.com/workers/cli-wrangler/authentication
./run w
# Chrome DevToolsでwranglerをプロファイリング
# blog.cloudflare.com/profiling-your-workers-with-wrangler
このリポジトリへのコミットは、Google JavaScriptスタイルガイドを強制します(参照: .eslintrc.cjs)。
.js ファイルに対してリンター(eslint)とフォーマッター(prettier)を実行するgit pre-commit フックがあります。このフックをバイパスするには git commit --no-verify を使用してください。
プルリクエストもコードスタイル違反がないかチェックされ、可能な場合は自動的に修正されます。
デフォルトを調整する必要がある場合は、env.js を設定してください。
Cloudflare Workersの場合は、代わりに wrangler.toml で環境変数を設定してください。
Fastly Compute@Edgeの場合は、代わりに fastly.toml で環境変数を設定してください。
src/server-[node|workers|deno] <-> doh.js <-> plugin.jsplugin.js フロー: user-op.js -> cache-resolver.js -> cc.js -> resolver.jsserverless-dnsは、DoHとDoTの両方で英数字ベアラートークンによる認証をサポートしています。トークンについては、msg-key(シークレット)を、hex(hmac-sha256(msg-key|domain.tld), msg) の出力に追加し、ACCESS_KEYS 環境変数にcsv形式で設定します。注: msg は現在 sdns-public-auth-info に固定されています。
msg-key をブロックスタンプの末尾に配置します。例:
1:1:4AIggAABEGAgAA:<msg-key> (ここで 1 はバージョン、1:4AIggAABEGAgAA
はブロックスタンプ、<msg-key> は認証シークレット、: は区切り文字です)。msg-key をブロックスタンプを含むSNI(ドメイン名)の末尾に配置します:
1-4abcbaaaaeigaiaa-<msg-key> (ここで 1 はバージョン、4abcbaaaaeigaiaa
はブロックスタンプ、<msg-key> は認証シークレット、- は区切り文字です)。DoTでも認証を使用する場合は、サブドメインは合計63文字までしか使用できないため、msg-key を短く(8〜24文字)してください。
フォークのアクセスキーは、max.rethinkdns.com から次のように生成できます:
msgkey="ShortAlphanumericSecret"
domain="my-serverless-dns-domain.tld"
curl 'https://max.rethinkdns.com/genaccesskey?key='"$msgkey"'&dom='"$domain"
# 出力
# {"accesskey":["my-serverless-dns-domain.tld|deadbeefd3adb33fa2bb33fd3eadf084beef3b152beefdead49bbb2b33fdead83d3adbeefdeadb33f"],"context":"sdns-public-auth-info"}
serverless-dnsは、Cloudflare Logpush を介してログをアップロードするように設定できます。