おことわり:マチアプをやったわけではありません
ある夜、いつもの通り大学時代の腐れ縁同級生と電話をしていると、奴は突然にやってきた。

そう、マチアプの広告である。昨今のインターネットには品性下劣な広告が溢れかえっており、LINEにおいてもそれは例外ではない。なかでも、マチアプの広告ほど私をイラつかせるものはない。大写しされた人物の顔(現代においてはおそらく生成AIなのだろうが)に、あたかもトークをしているかのような欺瞞的な表現。これがスマートフォンの画面の凡そ8割を占めるのだから非常に不愉快なことこのうえない。
かくなる上は、この広告をなんとしてでも取り除かなければならない。こうして筆者の、2週間にわたる戦いの火蓋が切って落とされたのだった。
前提
・トラッキングは無効にしている
・LINEとYahooのアカウント連携はしていないので、広告中の<i>を押しても非表示にはできない
・何故か右側に本来表示される3点リーダーが表示されないので、「この広告を非表示」というオプションを選ぶことができない
集合知
まず、インターネット業界に詳しい友人に当たった。その結果いただけた第一の提案は、「年齢をとにかく上げる」こと。マチアプの広告はおそらく20代〜30代男性に向けてリーチしているので、その条件を外せばよいのではないか、とのことであった。そこで早速、生年を1916年とした。御年108歳である。1916年といえば第一次世界大戦真っ只中である。
この戦略は功を奏し、見事に広告の内容が入れ替わった。出てきた広告がグーネットで、暗に「高齢者は免許を返納して車を売れ」と言わんばかりの内容で笑ってしまった。
第2次戦争
ところがそれから1週間程度たったある日。再び奴が姿を現したのである。考えてみれば108歳なんて国内最高齢クラスで、そのレベルの人間がLINEを使っていることなどあり得ないのかもしれない。あるいは、マチアプ運営会社の畜生共が、108歳の人間にもマチアプを売り込もうとしているのかもしれない。そこで再びインターネット業界に詳しい友人に聞いたところ、まずは
「あえてトラッキングを許可して、そのうえでオプトアウトをしまくるとよい」
との回答を得た。しかしながら、トラッキングを許可する設定としても、なおオプトアウトボタンが表示されなかったので、この戦略を取ることはできなかった。そこで得た次の策が
「許せる広告に関連したワードを検索し、それに興味があると誤認させるとよい」
とのことであった。特に、不動産関係の広告は長期にわたって表示されやすく、効果が期待できるとのことだった。そこで以下のように、ニュース検索をしまくってみた。

この戦略も一見功を奏し、工務店や不動産関連の広告が多く出てくるようになった。しかし、マチアプの広告を完全に叩き潰すことはできなかった。そこで私は、広告を根本から根絶すべく、次なる手を打つことにした。
自宅DNSを導入して、広告サーバーとの通信を遮断する
DNSとは何か。本ブログを読むような方はご存知だろうが、平たく言えばインターネットの道案内である。普段我々が目にする「www.example.com」のようなアドレスは、本来のインターネット上のアドレスではない。実際は、数字の羅列1「192.0.2.1」のようなものなのである。では、何故我々がインターネットにアクセスできているのだろうか。それは、「”www.example.com”の本当の数字を教えて」と、特定のサーバーに問い合わせ、「それは”192.0.2.1″ですよ」などと答えをもらうことによって、本来必要な数字の羅列を入手しているからである。これを「名前解決」などと言ったりする。
では、これがなぜ広告の根絶に関連するか。先の説明と関連づけて考えてみよう。本来ならば、広告のサーバーの名前が問い合わせられれば、その広告のサバーのサーバーのIPアドレスが答えられて、それによって広告が配信されるわけだ。
ところが、広告のサーバーの名前が問い合わせられた時に、インターネットにアクセスできない嘘のIPアドレス2を答えてあげるようなDNSがあれば、広告との通信は不可能になる。
よって、そのようなDNSを用意してあげれば手元で広告を見ないで済む、といったところである。
でも、個人でDNSを作るなんて大変なのではないか。
その心配は無用である。同じようなことを考える人は世の中にたくさんいるので、この原理を使った自宅にインストールするDNSサーバー「Adguard Home」なるものが世の中には存在する。そしてご丁寧に、こちらは公式でDocker Imageが提供されている(参考文献1)。したがって、これを導入すればよいのだ。幸いにも、自宅にはこのブログを動かすためのサーバー(と言ってもMac miniだが)があり、Docker Desktopが稼働しているので、そちらにAdguard Homeをインストールすることとした。
導入事例も世の中を漁るといくつか転がっており、基本的に参考文献2の通りにインストールすればよい。とても簡単である。細かな設定を含め2時間もあれば済んだ。
ただし、以下の点は参考文献2と異なっているので、docker-compose.ymlを改変した。
・volumeのマウント先は、Macのホーム配下に適当なディレクトリを作り、そちらに書き換える。参考文献に記載のあるコンテナ内の3ディレクトリを保存できるようにしておけばよい。
・80番ポートはWordpressに占拠されているので別のポートを動かす。
・”AdGuardHome.yaml”は先に作るとエラーで起動しなくなる。そこで設定用のGUIからtofukko filterの追加や上流DNSサーバーの追加をする。
また、Mac miniがWi-FiとEthernetの双方でルーターに接続していると、DNSクエリの受信と送信のアドレスが別になってしまうので名前解決に失敗することがわかった。Adguard HomeのGUI上はうまくいっているので、原因の切り分けに時間がかかってしまった。
Adguard Homeが稼働するようになったら、ルーターの設定を変える。具体的には、アクセスポイントモードで動いていたものをルーターモードに変更し、DNSサーバーとしてMac miniのIPアドレスを指定するように設定を変更する。また、DHCP固定機能を使い、MacのMACアドレス(激寒)を指定してあげることでMac miniのIPを固定し、DNSサーバーとして永続的に使えるようにする。ルーターモードにすると、筆者の居住環境ではいわゆる二重ルーター状態になり速度低下等が心配であるが今のところは弊害は出ていない。
さて、ここまでやってきたわけだが、なおもマチアプの広告は消えなかった。しかし私にはもうDNSでブロックするという強大な技がある。LINEのタブを切り替えた時のDNSクエリを監視し、カットアンドトライでブロックしていけばよいのである。途中トークや通話が送受信できなくなる事象が発生するも、紆余曲折の末、以下をブロックすればとりあえず幸せになれることが判明した。
lan.line.me
a.line.me
yuki-cdn.line-apps.com
a-jp.line.me.akadns.net
ly.my.sentry.io
edge12.g.yimg.jp
uts-front.line-apps.com
obs.line-scdn.net
stream-production.avcdn.net
時折トーク受信が重くなったりする弊害はあるものの、ひとまずこれでほとんどの場合は広告を見ずに済むようになった。まれに広告が出るが、その場合はLINEアプリを再起動すればよい。どうも広告サーバーはこれ以外にも複数あるようなのだが、その全てをブロックするとトークや通話も不能になってしまったので、これ以上の対処は難しいかもしれない。また副作用でMacからLINEにログインができなくなったが、それについても気にしないこととする。
今後のために:パケットキャプチャの環境を整える
とはいえ、今後いつ広告配信の仕様が変わるか分からない。その際に、Adguard Homeのクエリ監視だけでは対応が難しくなるであろう。そこで今回、iPhoneの通信のパケットをキャプチャする環境も併せて整えた。
パケットキャプチャをする場合の通信経路は以下である:
外界ーMac miniー(Wi-Fi共有)ーiPhone
至って単純。Mac mini上で、インターネット共有をオンにし、共有する接続経路をEthernetとする。次を使用する共有先のデバイスにWi-Fiを指定し、AP名やパスワードなどをセットする。これでMac miniが無線LANルーターとして機能するようになった。そのうえでこのMac miniにWiresharkをインストールし、NIC「bridge***」を監視すればよいというわけだ。
この際、Wi-Fiを再びONにする必要があるのだが、何故かWi-Fi側が優先してローカルIPを掻っ攫っていってしまうので、EthernetのIPアドレス、ルーター、DNSサーバーを手動で設定してあげる必要がある。特に、DNSサーバーの手動設定を忘れると、ブログ運営用のWireguardが繋がらなくなるので気をつけなければならない。
まとめ
自宅サーバーにAdguard Homeをインストールすることで快適インターネットライフを送ろう!
次なる戦争へ:外出時でも自宅DNSを
さて、これで自宅の中にいる限りは広告を見ずに済むようになった。ところが問題は外出時である。外出時でも自宅と同じ環境を用意するにはどうすればよいか。VPNである。幸い、ブログ公開用にVPN環境を用意しているので、それをちょちょいといじってやれば、どこにいても自宅DNSを使えるのではないかと考えている。今後はこのあたりにも挑戦したい。
2025.3.7追記: macOS Sequoiaへのアップデートにあたって
アップデート完了後、インターネット共有を先にONにしてると、mDNSResponderがポート53を占拠しているので、Ports are not availableとなりadguardが立ち上がらない。このような場合は一旦インターネット共有を切る必要があり、そのうえでadguardを立ち上げる必要がある。この場合にインターネット共有とプライベートDNSが両立するかはわからない(なんとなく、両立しなさそうな挙動を見せている)。
参考文献
[1] https://hub.docker.com/r/adguard/adguardhome
[2] https://zenn.dev/scirexs/articles/a74aa07d149a11
・
コメントを残す