本記事ではBitcoinのDNSシードと呼ばれるBitcoin Coreにハードコードされた特別なサーバーについて説明します。

以前、Bitcoinとトラストについて記事を書きました。

Bitcoinとトラストを考える:トラストレスという理想の行方
Bitcoinにおける「トラスト」とは何かについて、その概念を整理しながら考察します。 初期のBitcoinが掲げていた、フルノード運用やセルフカストディを重視する姿勢がどのような背景から生まれ、どのように変化してきたのかについても振り返ります。

Bitcoinの設計においてあらゆるトラストを排除する工夫がとられていますが、それでも排除できなかったのがDNSシードの存在です。

DNSシードとは何なのか、どのような懸念があり、DNSシードにおけるトラストを最小化するために取られている方法を紹介します。

DNSシードとは?

BitcoinのDNSシード(DNS seed)とは、端的にいうとBitcoinフルノードの同期開始時にブロックデータを取得するために、最初にピアとして接続するノードの候補を返すシステムです。

Bitcoin Coreなどの実装にDNSシードのドメイン名がハードコードされており、ドメインを解決しDNSシードに接続することで、DNSシードがピアノードの候補となるノード情報のリストを送ってくれます。

💡
「シードノード(Seed Node)」と表現されることがありますが、少しミスリーディングな表現です。DNSシードはノードとは異なった実装であり、通常のBitcoinノードが有するようなブロック配信機能は持っていません。

Bitcoinノードの初回起動時に、ブロックチェーンデータを同期するブートストラップが必要になります。Bitcoinノードはピアとなる他のノードと接続することでブートストラップを開始します。しかし、初回起動時にピアとなるノードを知らない場合、誰とも接続ができず、Bitcoinネットワークに参加することができません。そのため、Bitcoinの実装にハードコードされたBitcoinコミュニティによって安定運用されていると判断されたいくつかの**DNS シードに問い合わせを行うことで、**最初のピアとなるノード情報を取得できます。

BitcoinのDNSシードと同様の仕組みは、Ethereum, Monero, Solanaなど他の多くのブロックチェーンでも採用されています。

Bitcoin Core(v30)においてハードコードされたDNSシードのドメイン名:

vSeeds.emplace_back("seed.bitcoin.sipa.be."); // Pieter Wuille
vSeeds.emplace_back("dnsseed.bluematt.me."); // Matt Corallo
vSeeds.emplace_back("seed.bitcoin.jonasschnelli.ch."); // Jonas Schnelli
vSeeds.emplace_back("seed.btc.petertodd.net."); // Peter Todd,
vSeeds.emplace_back("seed.bitcoin.sprovoost.nl."); // Sjors Provoost
vSeeds.emplace_back("dnsseed.emzy.de."); // Stephan Oeste
vSeeds.emplace_back("seed.bitcoin.wiz.biz."); // Jason Maurice
vSeeds.emplace_back("seed.mainnet.achownodes.xyz."); // Ava Chow

DNS シード誕生の歴史的経緯

Bitcoinの開発初期の頃(2008~11年)は、IRC(Internet Relay Chat)と呼ばれるインターネット初期のチャットプロトコルを用いたピアの発見をしていました。この方法では、Bitcoin CoreにハードコードされたIRCサーバーのIPアドレスに問い合わせることで、ピアの候補ノードが取得できました。サーバーへ問い合わせを行うという点では、DNSシードと比較してもより中央集権的でトラストを必要とする方法でした。また、この方法は不安定であったため、より堅牢な代替案として検討されたのがDNSシードでした。

DNSシードが導入されたのはBitcoin Core v0.3.2からですが、その頃からDNSシードはトラストを必要とする方法として批判がされ、より分散化した方法が検討されていました。

(例: Christian DeckerによるBitTorrent trackersを用いた方法の提案):

Re: [Bitcoin-development] Bootstrapping via BitTorrent trackers - Christian Decker

Bitcoin Core v0.4におけるハードコードされたIRCサーバーのIPアドレス:

bitcoin/src/irc.cpp at c7eb151ad0ed441d6fd598551059a9bbfb09e99e · bitcoin/bitcoin
Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub.

DNSシードポリシー

Bitcoinコアメンバーによる厳格なポリシーが決められており、明文化されています。

bitcoin/doc/dnsseed-policy.md at master · bitcoin/bitcoin
Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub.

ポリシーに記載されている8つの項目を要約し、以下に記述します。

  1. DNSシードのオペレーターはインフラ/ セキュリティを適切に管理し、その運用権を他者に譲渡や売買をしてはいけない
  2. DNSシードが返すピアは公平に選択されなければならない。
  3. ランダム化させ、特定ノードだけを有意に優先するような結果を返してはいけない。
  4. DNSのTTLは 1 分未満には設定してはいけない。
  5. DNSクエリのログ記録は最低限のものだけを短期間のみ保管し、他者に公開してはいけない。
  6. DNSシードからの結果に偏りがあると観測された場合、その結果を自由に公表できる
  7. 事業者は運営方法の詳細を公開文書化することが推奨される。
  8. 問い合わせのために運営者のメールアドレスを公開する必要がある。

上記のポリシー違反の場合、議論の上、DNSシードから削除されます。また、ポリシー資料でも言及されているDNSシードのリファレンス実装として「Bitcoin Seeder」があります。

Bitcoin Seeder

Bitcoin SeederはBitcoinネットワークのクローラーとしての機能を有し、ネットワーク内のノードの可用性を定期的にチェックします。可用性が十分にあると判断された安定したノードのリストを保持します。ドメイン名とIPアドレスを紐付けるDNSサーバとしての機能も有し、Bitcoinノードから問い合わせがあった場合、安定したノードをいくつかランダムに選んで返します。

GitHub - sipa/bitcoin-seeder
Contribute to sipa/bitcoin-seeder development by creating an account on GitHub.

DNSシードは誰でも運用することができ、安定性と信頼性が評価された場合、Bitcoinコアの実装に自身が運用するDNSシード情報が組み込まれる可能性もあります。(そう簡単ではありませんが)

DNSシードとトラストの問題

DNSシードはBitcoinにおけるトラストの対象となるという見方がされ、批判の対象となることがあります。批判の原因を考察してみます。

DNSシードは中央と呼ぶほどの特権的な機能までは有していないものの、特定の運営主体が管理しているものであるため、もしDNSシードの大半が攻撃や検閲の対象になってしまった場合、Bitcoin全体における安全性に影響が出ます。

例えば、DNSシードが悪意のある攻撃者によって乗っ取られてしまったとします。乗っ取られたDNSシードは、新規参加ノードに対し不安定で偏ったピア情報だけを教えてことで同期を妨害したり、他のノード情報を監視収集する不誠実なノードと接続させることが可能です。または、新規参加ノードを攻撃者のノードで囲い込み、ネットワークから孤立させるエクリプス攻撃(Eclipse Attack)を誘発することも可能になります。

Bitcoinにおいても、他のノードの情報を全く知らないBitcoinネットワークでは、新規参加者はDNSシードをトラストするしかなくなります。そもそもDNSという権威的かつ階層的な構造を持つシステムを、Bitcoinの同期の起点として利用するという点においてもナンセンスではあります。

また、DNSシードの管理者がドメイン名の更新を怠った場合、DNSシードの解決ができなくなり、最悪の場合ドメイン名を第三者に再取得されることで攻撃の要因ともなり得ます。

DNSシードへのトラスト最小化の4つの工夫

上述した通りDNSシードへのトラストは発生するものの、トラストを最小化する工夫が取られています。その工夫を以下に挙げます。

1. DNSシードの多様性

ハードコードされたDNSシードは複数あり、運営主体やその運用ルールも様々です。また、Bitcoin Coreは複数のDNSシードに問い合わせするため、エクリプス攻撃を成功させるためには大半のシードノードを乗っ取る必要があります。

2. DNSシード以外のオプションも選択可

DNSシードを使ったブートストラップを行うか否かは選択可能であり、DNSシードを使わないブートストラップ方法もあります。DNSシードを使わない場合、自身で最初のピアとなるノードのIPアドレスを設定し、ブートストラップを開始します。DNSシードを利用するというのは個人の判断に委ねられています。後述するまとめで言及しますが私はこの工夫が最も重要だと考えています。

3. DNSシードとの接続の最小化

DNSシードは最初から恒常的に使う設計にはなっておらず、最初のブートストラップ時に接続し、最初のピアノード候補の情報を取得した後は、DNSシードを利用することはありません。以降は、ピアとなったノードからさらなるピア情報を取得します。

4. ノード情報のみの提供

DNSシードから得られる情報はピア候補ノード情報のみです。DNSシードからブロックなどのデータは受け取りません。上述したエクリプス攻撃等が図られていない場合、資金を奪われるなど被害は受けません。

ニュース: DNSシードの一つが削除

本記事が公開と同時期である2025年12月8日にDNSシードの一つが削除されるという変更がBitcoin Coreにマージされました。

chainparams: remove dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us by SatsAndSports · Pull Request #33723 · bitcoin/bitcoin
The DNS seed dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us. is not returning a representative sample of bitcoin nodes. It currently returns nothing later than 28.1.0, breaching the policy. This PR re…

本件に関する詳細は別の記事にします。

本記事では概要だけを述べますが、あるDNSシードが28.1.0以降のバージョンに対応したノードをピア情報として返さず、偏りが生まれることにより上記で述べた 「1. 公平でランダムにノードを選ぶ」のポリシーに違反していると判断され、Bitcoin CoreにハードコードされたDNSシードが削除されました。

ポリシー違反動作を報告したのはただのBitcoinコミュニティメンバーであり、報告を受けて協議の上、削除が決定されたというプロセスからノード運営と実装の独立性がうかがえ、民主的な意思決定がなされていると捉えられます。

まとめ:DNSシードのトラストを考える

本記事ではBitcoin Coreにハードコードされた特別なドメイン名の正体であるDNSシードの概要とその誕生における歴史的経緯、運用ポリシーについて解説しました。

以前に書いたBitcoinとトラストについての記事では、BitcoinのLayer 1においてはトラストは最小化されていると書きました。しかし、ブートストラップにおいては何らかのトラストが発生することは事実です。ただ、上記のトラスト最小化の仕組みを知った上でもトラストできないという方はBitcoinを選ばなくてもいいんだと思います。

筆者はトラスト最小化の工夫における「2. DNSシード以外のオプションも選択可」が非常に重要な機能だと考えています。

筆者が考えるブートストラップの理想のあり方は、DNSシードを利用せず、「この人のことなら信頼できる」という個人の判断基準のもと、リアルな人間関係を信頼の起点とし、信頼できる人のノードを最初のピアに選ぶという方法です。この方法では、Bitcoinコアなどの主体が特定の誰かに対するトラストを強要することはありません。この方法の実現には、より多くの人がBitcoinのノードを運用している状況が望ましいです。なので、隣人を守るためにあなたがノードを運用しましょう!

今後の記事ではそれぞれのDNSシードの特性や運用状況などに関しても記事を公開する予定です。