はじめに
今どき,広告ブロックのソフトウェアはいろいろありますが,あえて自分で作ります。DNSレベルでのブロックなので,ブラウザに限らずいろいろなアプリでの広告ブロックが可能です。
前準備
まず,24時間起動できるデバイスを用意します。ラズパイがおすすめです。ラズパイ3でも十分です。
次にIPv4アドレスを固定するのですが,最近ではルーターでの固定が推奨されているので,ルーターが対応している場合は好きなIPv4アドレスで固定してください。
unboundのインストール
DNSキャッシュサーバであるunboundをつかうのでインストールします
sudo apt update && sudo apt install unbound
unboundの設定
unboundの設定ファイルは/etc/unbound/にあります。
topファイルであるunbound.confはいじらずに,unbound.conf.d/に設定ファイルを作ります。
まずは通常の設定項目ファイルを作ります。
server:
verbosity: 0
port: 53
interface: IPアドレス(v4) # 固定したIPv4アドレス
interface: 127.0.0.1
interface: ::1
interface: IPアドレス(v6) # IPv6アドレス
# 応答するIPアドレスを入力してください
# 以下はすべて許可する場合
access-control: ::0/0 allow
access-control: 0.0.0.0/0 allow
#ローカルでドメインを運用したいしたい場合は設定してください
#local-data: "exmaple.com. 60 IN A 192.168.1.1"
forward-zone:
name: "."
forward-addr: 8.8.8.8 #ISPのDNSやルーターのDNSでも大丈夫です。
次に広告ブロックリストを作ります。いろいろなブロックリストがありますが今回は
(https://servercan.net/blog/2023/07/unbound%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%9Fdns%E3%82%B5%E3%83%BC%E3%83%90%E3%81%A7%E8%87%AA%E5%AE%85lan%E4%B8%B8%E3%81%94%E3%81%A8%E5%BA%83%E5%91%8A%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF/)
を参考に広告ブロックリストを作りました。
以下を実行します
touch adblock.conf
echo "server:" > adblock.conf
curl -s https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | \
grep ^0.0.0.0 - | \
sed 's/ #.*$//;
s/^0.0.0.0 \(.*\)/local-zone: "\1" refuse/' | \
sudo tee -a adblock.conf > /dev/null
いろいろあるので調べてみてください
sudo unbound-checkconf
を実行し,エラーがないことを確認してください
起動
53番ポートを開放し,起動します。
ufw
sudo ufw allow 53
firewalld
firewall-cmd ----permanent --add-port=53/udp --zone=public
firewall-cmd --reload
でポート開放
sudo systemctl enable unbound
sudo systemctl start unbound
で起動します。エラーが起きる場合,最初から入っているリゾルバが動いてるかもしれないので、止めてください。
クライアントの設定
スマホやPCのDNSサーバーを作ったDNSサーバのIPアドレスに設定してください。
IPv4アドレスだけ指定しても動くこともありますが、IPv6での名前解決を試みることが多いのでIPv6のアドレスも指定してください。
Androidの場合IPv4のDNSサーバーしか指定できず,DHCP-v6などでIPv6のDNSサーバが配られているとそれを変えることはできないので,配布をするのをやめるか自宅内VPNなどをして無理やりIPv6で名前解決できないようにしてください。
おわりに
某ニュースサイトや某ゲーム攻略サイトなどで広告が消えてれば完璧です。
インターネットに接続していないと開けないアプリでも広告をブロックできます。
ただし,YouTubeの動画挿入型や,旧Twitterの広告はブロックできないのでプレミアムなどに入りましょう。
ルーターでこの作ったDNSサーバーをIPアドレスを配布すれば,クライアントの設定なく,広告ブロックできます。