サイトロゴ まいの雑記帳
NextDNSで広告とばいばいする

NextDNSで広告とばいばいする

投稿した日
2025/05/03
読了まで
8.83分で読み終われます (5,298文字)

NextDNSで広告とばいばいする

はじめに

私の家では、広告を排除することはまったく意識していないのですが、bindを用いた独自のDNSキャッシュサーバーを使っていると、なぜか特定のドメインからの応答が遮断される環境を構築しています。

現代において、GAFAMやMagnificent7といった巨大企業に、わたしたちの情報がある程度提供されてしまうのは、もはや避けられない現実なのかもしれませんし、その事実自体を今さら争うつもりはありません。
しかし、それでもなお、「どの主体に、どの程度の情報を、どのような形で提供するのか」という選択の余地は、利用者側に残されているべきだと考えます。
そして願わくば、どのような情報を受け入れ、あるいは拒否するのか、その選択肢もまた、わたしたちの手元にあるべきではないでしょうか。

昨今、特に懸念を覚えるのは、わたしたちが日常的に利用するPCやスマートフォン、あるいはIoTデバイスが、利用者の認識しないところで、様々な外部ドメインと通信を行っているという事実です。
所謂トラッカーやテレメトリと呼ばれるものがそれに該当します。

情報を何らかの形で提供すること自体は、現代のサービスを利用する上で避けられない側面もあるかもしれません。しかし、その情報の出入りが不透明であるという状況は、決して好ましいものではないとわたしは感じています。

先日、ありがたいことに友人のまくらくら🔗からNextDNSを奢ってもらえることになり、試してみました。
近年巧妙化していると言われるCNAME Cloakingなどといった手法にも対応しているらしく、技術的な関心も惹かれました。

設定

今回のNextDNSの設定は、自宅ネットワークの基幹となっているIX3110に対して行いました。
Tailscaleの機能でDNS設定を上書きすることも可能ですが、PCやスマホだけでなく、ネットワークに接続されている全てのIoTデバイスを配下に置きたかったため、ルータ自体に設定を施すことにしました。

設定内容は、概ね以下の通りです。

  1. proxy-dns server設定を、これまで利用していた自前のbindサーバーのIPアドレスから、NextDNSから指定されたIPアドレスに変更。
  2. わたしの利用しているインターネット回線は動的IPアドレスであるため、現在のIPアドレスをNextDNS側に継続的に通知するためのDDNS設定を追加。

詳細なコマンドや手順については、NextDNSの公式サイトに用意されているセットアップガイドが非常に参考になりました。

以下は実際に投入しているconfigです。

hostname rt-001.ngs.nr1q.me
timezone +09 00
!
logging buffered 131072
logging subsystem all warn
logging timestamp datetime
!
no syslog ip enable
!
username mq1 password plain ************** administrator
!
access-list mflt-list permit src any dest any type ipv6
access-list mflt-list permit src any dest any type ip
!
!
ip ufs-cache max-entries 20000
ip ufs-cache enable
ip route default GigaEthernet0.1
ip dhcp enable
ip access-list web-http-acl permit ip src any dest 192.168.0.0/24
!
!
ipv6 ufs-cache max-entries 10000
ipv6 ufs-cache enable
ipv6 dhcp enable
ipv6 access-list block-list deny ip src any dest any
ipv6 access-list dhcpv6-list permit udp src any sport any dest any dport eq 546
ipv6 access-list dhcpv6-list permit udp src any sport any dest any dport eq 547
ipv6 access-list icmpv6-list permit icmp src any dest any
ipv6 access-list permit-list permit ip src any dest any
ipv6 access-list dynamic dflt-list access permit-list
!
!
!
!
bridge irb enable
!
!
!
dns host rt-001.ngs.nr1q.me ip 192.168.0.1
!
proxy-dns ip enable
proxy-dns ip request both
!
proxy-dns ip query-response 20
proxy-dns ip query-retries 3
proxy-dns ip query-interval 2
!
proxy-dns server 2a07:a8c0::bd:49d7 priority 90
proxy-dns server 2a07:a8c1::bd:49d7 priority 80
proxy-dns server 45.90.28.174 priority 60
proxy-dns server 45.90.30.174 priority 50
proxy-dns server 1.1.1.1 priority 20
proxy-dns interface GigaEthernet0.0 priority 11
proxy-dns interface GigaEthernet0.1 priority 10
!
!
ssh-server ip enable
!
http-server username mq1
http-server ip access-list web-http-acl
http-server ip enable
!
!
!
!
ddns enable
ddns profile nextdns-ddns
  url https://link-ip.nextdns.io/bd49d7/***********
  transport ip
  source-interface GigaEthernet0.1
  update-interval 1
!
!
!
!
ppp profile ppp-v4
  authentication myname user@domain
  authentication password user@domain password
!
ip dhcp profile dhcpv4
  assignable-range 192.168.0.2 192.168.0.254
  default-gateway 192.168.0.1
  dns-server 192.168.0.1
  domain-name ngs.nr1q.me
  lease-time 7200
!
ipv6 dhcp client-profile dhcpv6-cl
  information-request
  option-request dns-servers
  ia-pd subscriber GigaEthernet1.0
!
ipv6 dhcp server-profile dhcpv6-sv
  dns-server dhcp
!
device GigaEthernet0
!
device GigaEthernet1
!
device GigaEthernet2
!
device GigaEthernet3
!
interface GigaEthernet0.0
  filter mflt-list 1 in
  no ip address
  ipv6 enable
  ipv6 address autoconfig receive-default
  ipv6 dhcp client dhcpv6-cl
  ipv6 tcp adjust-mss auto
  ipv6 nd ra enable
  ipv6 filter dhcpv6-list 1 in
  ipv6 filter icmpv6-list 2 in
  ipv6 filter block-list 100 in
  ipv6 filter dhcpv6-list 1 out
  ipv6 filter icmpv6-list 2 out
  ipv6 filter dflt-list 100 out
  bridge-group 1
  no shutdown
!
interface GigaEthernet1.0
  description LAN
  filter mflt-list 1 in
  ip address 192.168.0.1/24
  ip dhcp binding dhcpv4
  ipv6 enable
  ipv6 dhcp server dhcpv6-sv
  ipv6 nd ra enable
  ipv6 nd ra other-config-flag
  ipv6 nd proxy GigaEthernet1.0
  no shutdown
!
interface GigaEthernet2.0
  bridge-group 1
  no shutdown
!
interface GigaEthernet3.0
  bridge-group 1
  no shutdown
!
interface GigaEthernet0.1
  encapsulation pppoe
  auto-connect
  ppp binding ppp-v4
  ip address ipcp
  ip tcp adjust-mss auto
  ip napt enable
  no shutdown
!
!

一点、補足ですが、IXシリーズのルーターは、現時点ではDNS over TLS (DoT)に対応していません。
そのため、NextDNS側で提供されている、デバイスごとのクエリ分析といった詳細な機能は利用できないという制約があります。

最後に、NextDNSの管理画面上で、利用するブロックリストを選択して設定は完了です。
私は以下のような構成にしました。

設定完了後、動作確認のためにuserlocation.googleapis.comへdigを実行しました。

結果は、意図した通り、NextDNSによってブロックされていることが確認できます。
わたしの設定ではブロック時に特定のページへ誘導するオプションを有効にしているため、103.170.232.254が応答として返されましたが、通常は0.0.0.0が返されるようです。
(103.170.232.254がNextDNSの保有するIPであることはwhoisで確認済みです。)

実際につかってみて

運用を開始してから約1週間半が経過した時点で、NextDNSのダッシュボードで統計情報を確認してみました。

その結果、総DNSクエリ数が1,091,869件であったのに対し、ブロックされたクエリ数は209,022件にのぼっていました。
これは、全クエリのおよそ19%に相当します。

この数字は、わたしが日常的にインターネットを利用する中で、意識しないうちに発生していた通信の約2割が、広告配信やトラッキングといった目的のものであった可能性を示唆しています。
私は、固定回線を利用しているため、通信量自体が問題になるわけではありませんが、これまで不可視であった不要なあるいは望まない通信がこれほどの割合を占めていたという事実が可視化されたことで、インターネットという空間における情報の流れについて、改めて考えさせられることになりました。

思った以上にいい感じだったのですが、誤爆ブロックもかなりあったで、ログを見て自力で調整できる方にとってはかなりいいのではないかと思います。
私はたぶん使い続けるでしょう。

追記

はてブやipinfo、ニコニコがそのままでは見られなかったので以下のFQDNを明示的に許可しました。

  • *.b.hatena.ne.jp
  • *.ipinfo.io
  • *.nicovideo.jp

ブログの更新をお知らせ

RSSで購読すると新しい記事の投稿を知ることができます。