Control Dのアナリティクス
おととしの 記事 以来、 DNSと して 長らく NextDNS を 使ってきた。 ドメイン単位で マルウェアや 広告を 拒むと いう 簡潔な アプローチで、 満足の いく 効果を 得ていたが、 先日Control D と いう 類似の DNSサービスに 移行した。 日本語の 記事も 少ないようなので、 移行の 理由と 使用例を 書いておく。
移行の 理由
more than DNS
NextDNSは DNSサーバの 基本に 忠実だった。 ドメインを 受け取り、 IPアドレスを 返す。 受け取り、 返す。 たまに ブロックする。 以下 同様。
一方で 邪悪な 1 広告と マルウェアの 手法は 年々巧妙に なっている。 特に、 コンテンツと 同じ ドメインから ・コンテンツと 密結合して 流れてくるような 場合には、 通常の DNSでは 太刀打ちできない。 唯一の 解決策は、 VPN等に 手を 出して、 広告の 出ない 地域2 、 あるいは 多少まとも( ディーセント ) な 広告が 出る 地域からの アクセスを 装う ことだった。
Control Dも あくまで DNSサーバであり、 その 限りでは NextDNSと 同じ 機能を もつ。 ただ、 あわせて 提供される トラフィック転送機能 、 なかでも 位置偽装機能 が こうした 場面で 役立つ。 やっている ことは VPNや プロキシと 似ていて、 世界各地の お好みの サーバ を 選んで 通信を 転送する ことで、 当該地域からの アクセスを 装うことができる。 ただしVPNとは 違い、 指定した ドメインごとに 通信が 処理される (ドメインごとに 行き先を 分けられる ・他の 通信は 影響を 受けない)、 当局の 検閲には 対抗できない 、などの 特色が ある。
要するに 「アクセス元の 地域を 様々に 変えたいが、 VPNほど 仰々しい 匿名性は 要らない」と いうのが この機能の 想定する ユースケースである。 これには 先に 述べた 広告や マルウェアへの 対処の ほか、 提供地域が 限られた 海外コンテンツ等を 利用する 場合も 含まれる。
ルールの きめ細かな 管理
特定の サービスの 関連ドメインに ついて、 その DNS応答を 一括で 処理したい、と いう 場合は しばしば ある (例: 「X / Twitterは すべて 拒否」)。 NextDNSでは、 数十種類の サービスに ついて 「拒否 (と その 時間制限)」のみを 選択できた。 他方、 Control Dでは 数百種類3 に ついて 「許可・拒否・転送」を 設定できる。 また、 自分で 作成した カスタムルールも フォルダ で 管理できる。
iOSで DNS-over-HTTP/3が 使いやすい
iOSで NextDNSを 利用する 際、 公式に サポートされている 方 法は、 直接プロファイルを ダウンロードするか、 公式アプリを 利用するかの いずれかであった。 これらは いずれも iOSの プロファイル 機能を 利用して 暗号化DNSを 設定する。 この 場合、 DNS-over-HTTPSは 利用できるが、 HTTP/3が 利用されるかは 運任せと なる (ほぼ 利用されない)。
他方、 Control Dの 場合、 プロファイルに よる 設定に 加えて 「VPNと して 動作させる」方 法が 用意されており、 確実に HTTP/3を 利用できる。
DNS-over-HTTPS/3 (VPN)
ローカルアドレス(プライベートアドレスと文書用アドレス)ばかり
この 方法は 名前こそ 「VPN」だが、 実際には ローカルで ctrld (公式の コマンドラインクライアント)を 動作させ、 そこに 接続している (つまり Windows / Mac / Linux等での 利用方 法と 同じ)。 その ため これらの 場合と 同様、 TOML形式で 設定 を 行える。 設定ファイルは コントロールパネル (Endpoints
> エンドポイント > ctrld status
)から 投入する。
ターミナルのマークをクリック
設定をデプロイ
開発が 活発
NextDNSは それなりに 成熟している、と いうか 保守的で、 新機能の 追加は あまりない。 開発の 活発さと いう 点では Control Dが 勝る。
たまたま 安かった
StackSocial にて、 サブスク5年分の 公式の バウチャー (約40ドル→クーポンで 約32ドル)が 売られていた4 。 これを 買うと、 二種類ある プラン の うち下位 (転送機能なし、 定価年間20ドル)が 有効に なるが、 じつは 年間10ドルを 追加で 払う ことで、 上位の プラン (定価年間40ドル)に 変更できる。 総計すると 5年で 約82ドル (年間約16.4ドル、 定価の 4割ほど)と なり、 NextDNS (年間20ドル)よりも 安い。
使用例
位置偽装
多国籍企業が 都合よく 国境を 跨ぐ とき、 ユーザも また 都合よく 国境を 跨ぐ。 国ごとに コンテンツや 広告の 出し分けを する サービスに 対しては、 ユーザ側も 適度に VPNや プロキシを 使うのが 礼儀である。
この とき、 広告の ない 国に 繋いで メリットを 享受するのも ひとつの 選択だが、 より 建設的なのは、 通常と 同じように 広告を 見て サービスに 貢献しつつ、 邪悪な 広告が 出る 地域は 避ける、と いう 選択である。
実の ところ、 どうせクリックしないならどの 地域の 広告を 見ても 変わりは ない (いずれに しても サービス側に 対価は 支払われる)。 広告を 見る ことに 同意したからと いって、 その 提供元も 選べないと いうわけではないのだ。
IPv6化
ところで、 Control Dの トラフィック転送機能には、 上で 述べた 位置偽装だけではなく、 純粋に ドメインの 宛先を 変える (A / AAAA / CNAMEレコードを 任意に 書き換える) 機能も 含まれる。 この機能を 活用して、 さまざまな サービスに IPv6を 利用させる 設定を しているので、 紹介する。
Twitter / Xの アセット配信 (abs.twimg.com
, pbs.twimg.com
)には、 複数社 (Akamai, Edgecast, Fastly)の CDNが ランダムに 使われる。 しかし 各社の 応答速度には ばらつきが あり、 場合に よっては IPv4しか 対応していないこともある5 。 そこで CNAMEレコードを 固定して、 高速かつIPv4 / IPv6両対応の CDNを 使うように する。
体感では、 三社の うち最も 速いのは Fastlyだった。 Fastlyの CDNは、 ドメインの 冒頭にdualstack.
を 付けると IPv4 / IPv6双方で 応答してくれる。 そこでabs.twimg.com
, pbs.twimg.com
がdualstack.twimg.twitter.map.fastly.net.
に 向かう ようCNAMEレコードを 設定する。
CDNをFastlyに強制
耐 障害性は やや 下がるが、 画像読み込みの 体験が 少し 改善する。
iOSの 通知
ある 投稿 を 見て 知った。 曰く、 iOSの 通知は 現時点では IPv4のみで 流れてくるが、 背後には IPv6対応の インフラが 存在する ため、 CNAMEレコードを いじれば IPv6で 受け取れるらしい。
iOSの通知をIPv6化する
画像のように*-courier.push.apple.com
をapac-asia-courier-vs.push-apple.com.akadns.net.
に向ければ、 当該ツイートと 同じことが 実現できる (Control Dでは ルールに ワイルドカードを 使える )。
Discord
ほとんど バグのような 現象だが、 実は Cloudflareの CDNを 使っている サイトは、 たとえIPv6を 有効化していなくても IPv6で アクセスできる ことが 知られている (参考:Redditの 投稿 )。
と いうのも、 サイトに 割り当てられる (は ずだった) CDNの IPv6アドレスは、 IPv4アドレスから 機械的に 算出できるからである。 算出した アドレスを、 ドメインの AAAAレコードと して 応答するように 設定すると、 IPv6で アクセスが 通るようになる6 。
// Run this with [Bun](https://bun.sh): `bun run index.ts <ipv4>`
const CF_IP_PREFIX = "2606:4700::" ;
const ipv4 = Bun.argv[ 2 ]?. split ( "." ). map (Number);
ipv4. some (( n ) => Number. isNaN (n) || n < 0 || n > 255 )
console. log ( "Usage: bun run index.ts <ipv4>" );
for ( let i = 0 ; i < 4 ; i ++ ) {
ipv6 += ipv4[i]. toString ( 16 ). padStart ( 2 , "0" );
IPv4に しか 対応していない Discordも、 Cloudflareの CDNを 使っている ため、 この 方法で (ほぼ) IPv6化できる。 詳細は 省くが、 いく つかの ドメインに ついて 適切な A / AAAAレコードを 設定すれば 動作するはずだ。
な お、 ログイン時にgateway.discord.gg
宛てに 飛ぶ通信、 および Cloudflareを 使っていない 一部の サブドメインに ついては IPv6を 利用できない。 これらは 除外する 必要が ある。
おわりに
おそらく YouTubeと X / Twitterの 広告が 消せる 唯一の DNSサービスである。 5年分 契約してしまったので、 しばらくは これで やっていく。