広告ブロックのすすめ　OCI＋Tailscale+AdGuardHomeで、無料でプライベートにどこでも広告ブロック

## はじめに
みなさん、広告ブロックは使っていますでしょうか。
最近は、Braveなどのブラウザで簡単に広告ブロックできるようになりました。しかし、スマホで全てのアプリを広告ブロックしようとすると、DNSアプリなどが必要になってきますし、公共のサービスでは情報漏洩の心配もあります。そこで、クラウド・VPN・広告ブロックサーバーアプリを駆使して、無料で自分だけの、どこでも使える広告ブロックのシステムを作ってみました。

## 仕組み
### 広告ブロックの原理
広告ブロックの主流な方法は、DNS (Doamin Name Server) という仕組みを利用しています。私達がネットを利用するとき、DNSでURLからIPアドレスに変換されています。このDNSを自分で用意して、広告のURLをIPアドレスに変換しない設定をすることで、広告をブロックすることができます。

通常のサイト
![dns-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532859/e2f53b62-fcd6-2a6a-198d-7ac65830986d.png)

広告をブロックするサイト
![dns-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532859/55e57c79-9682-9d4f-5880-ec1bfb42532f.png)


しかし、初心者がDNSサーバーを一般に公開してしまうと、サーバーが攻撃を受けたり、DDoS攻撃に利用されて他者に危害を与えてしまったりと、セキュリティ上よくありません。

![dns-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532859/d5670efc-f949-e69e-e269-9387638e0e2e.png)


### 今回の仕組み
そこで今回使う方法がTailscaleです。Tailscaleを使うと、複数の端末同士でメッシュ構造のVPN (Virtual Private Network)を、簡単に作ることができます。つまり、ネットさえあればどこからでも、登録したアカウントの中の端末に、互いにアクセスすることが出来るということです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532859/679c387b-c14e-87c1-c6f8-ef9240b91f3d.png)
(Tailscaleサイトより)

さらに、Tailscaleには、利用するDNSを指定する設定があります。これらを利用することで、自分のDNSに、どこからでも安全にアクセスして、広告ブロックができるという仕組みになります。

![dns-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532859/e2a9a578-34cc-dd00-d701-48d971d7641c.png)


(Tailscaleのサイトのドキュメントには、今回の方法のRaspberryPi・Pi-hole版が紹介されています。

https://tailscale.com/kb/1114/pi-hole

また、こちらのlitomaさんの記事が、同様の環境を自宅サーバーで構築しているものになります。

https://text.yusukesakai.com/entry/20231112/1699716129

参考にしてください。)

また、広告をブロックするDNSとして、今回はAdGuardHome (https://github.com/AdguardTeam/AdGuardHome) を利用します。これは、有名なAdGuardの、自分でサーバーを用意するものです。体感ですが、日本語サイトに多い広告ドメインにも広く対応している気がします。

### 注意点
DNSの単純な仕組みを利用して広告ブロックをしているので、すべての広告がブロックできるわけではありません。
YouTubeの動画広告は非対応です。

## 方法
### OCIでサーバーの用意
クラウドサーバーとしては、無料で利用できるOCIを使います。自宅にサーバーを用意するのでもいいですが、保守管理や電気代の点から、クラウドの無料枠を利用するのがおすすめです。私は、OCI (Oracle Cloud Infrastructure) で、armのインスタンスを利用しています。かつて、armのインスタンスは争奪戦となっていましたが、現在はカードの登録を行えば、armインスタンスも簡単に確保できるようです。
OCIの開設やインスタンスの設定は、こちらを参考にしてください。私はOracle Linuxを使用しています。ちなみに、現在リージョンは東京と大阪を選ぶことができますが、これからOCIに登録する方は、使用する場所から近いところを選ぶのが、遅延が少なくなってよいと思います。

https://qiita.com/sjchorcl/items/20f6741cc2090a1824c2

(SJ ChoさんのQiita記事)

なお、OCIでTailscaleを利用するためには、セキュリティルールの設定が必要です。

https://tailscale.com/kb/1149/cloud-oracle

ingress rule を stateless で、0.0.0.0/0 UDP 41641 に対して設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532859/5eee6623-5cbc-baeb-18f7-c73d109837fa.png)

 
### Tailscaleのサーバーへのインストール
サーバーへは、
`curl -fsSL https://tailscale.com/install.sh | sh`
で簡単にインストールすることができます。

`tailscale up --accept-dns=false`
で、tailscaleをDNSの利用なしで起動して、表示されるリンクを開き、Tailscaleに使用したいアカウントでログインすれば、デバイスの登録が完了します。
（サーバー自体はサーバー自身のDNSを使用しない設定にするのがよいかと思います。）


### Tailscaleの各端末へのインストール
普段使っているPCやスマホなどの端末は、こちらからクライアントをダウンロードしてください。

https://tailscale.com/download
　
こちらもインストール後、サーバーをTailscaleに登録したアカウントでログインすれば、端末の登録が完了します。

無事登録が完了していれば、TailscaleのAdmin Console (https://login.tailscale.com/admin/machines) から各端末が確認できると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532859/4c357375-12c4-a4dc-44c9-efe0acc78354.png)
(Tailscale ドキュメントより　Admin Console の例)

ただし、このままの状態では、6か月でTailscaleの登録が切れてしまいます。なので、右側の・・・のボタンから、Disable key expiry ですべての端末の期限を無効化しておいてください。

### AdGuardHomeのインストールと初期設定
AdGuardHomeのインストールは、
`curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v`
で出来ます。

https://adguard-dns.io/kb/ja/adguard-home/getting-started/#first-time

インストールが完了したら、サーバーのアドレスに対してポート80でアクセスすれば、初期設定の画面が出てきます。ここまでTailscaleのセットアップが出来ていれば、Admin Console (https://login.tailscale.com/admin/machines) に表示されている、サーバーのアドレス(例：100.101.102.103) へ、登録しているスマホなどの端末からアクセスが出来るはずです。

広告ブロックの設定するためのアカウントを登録し、デフォルトで表示されているままに設定すれば、問題なくDNSが使用可能になると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532859/539bbe3e-4139-c53a-206f-5a31a1ac2e8d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532859/0aefb2f3-4e33-957f-940b-79e2457b64fe.png)
(AdGuard DNS ドキュメントより)


### TailscaleのDNSの設定
そして、最後にDNSの設定を行います。
TailscaleのAdmin Console の DNS (https://login.tailscale.com/admin/dns) を開いて、DNSのアドレスを入力、Override local DNSをオンにすれば完了です！
![configure-dns.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532859/abcd2b30-6873-f6f7-f8ba-5d8369a41fca.gif)
(Tailscale ドキュメント より)
これで、Tailscale端末からは、AdGuardHomeをDNSとして利用するようになり、広告がブロックされます！
Yahooニュースなどのサイトで広告がブロックされているか、確かめてみてください。
もちろん、広告をブロックしたくないときは、各端末のTailscaleをオフにするだけで元通りになります。

## 家族や友人に共有
Tailscaleでは、端末を、家族や友人など他人に共有して、アクセスできるようにすることができます。
自分のアカウントでAdmin Console を開きサーバーの・・・から Share を選択してリンクを作成します。共有する相手にそのリンクを開いてもらい、その人のアカウントでログインして登録します。共有する人もすべての端末についてTailscaleを登録してもらい、上記と同様にDNSの設定をしてもらえば、広告ブロックができるようになります！

## 最後に
無料でサーバーマシンを借りることができて、セキュアにアクセスすることができて、とてもいい時代だなと感じています。OCIやTailscaleを活用すれば、出来ることの幅がかなり広がると思います。ありがたいサービスを利用して、よい生活を送っていきましょう！