0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【自宅DNS】OCI + AdGuard Home + WireGuard + Unboundで広告ブロック

0
Posted at

はじめに

今までAdGuardのパブリックDNSを使っていましたが、OCIのインスタンスにVPNを構築したし、せっかくならフィルターも増やしたいので、OCIにAdGuard Homeを追加しちゃおうと思い立ちました。

構成

外部からアクセスする場合と、自宅NWからアクセスする場合で少し違います。

AdGuard(OCI)は、自身の用途やセキュリティの関係上、VPN経由でしかアクセスできないようにしています。

構築手順

OCI(AdGuard Home)

① AdGuard Homeのインストール

公式が提供してくれてるコマンドでインストールします。

wget --no-verbose -O - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v

② AdGuard Homeの起動

インストールできたら、サービスとして登録されているはずなので、systemctlで起動&有効化します。

sudo systemctl enable --now AdGuardHome.service

③ 初期設定

1.ブラウザでhttp://[AdGuard HomeのIPアドレス]:8000にアクセスします。

アクセスすると、ウェルカム画面が表示されます。

1_welcome.png

2.インターフェースの設定をします。

基本的に変更せずそのまま進めちゃって大丈夫ですが、80番ポートが埋まっている場合は他のポート番号に変更してください。

2_if.png

3.ユーザー登録をします。

ここで管理画面にアクセスするためのユーザーとログイン時のパスワードを設定します。

3_login.png

4.設定完了です。

初期設定はこれで完了なので、この後は管理画面から諸々設定していきます。

4_Congratulations.png

④ アップストリームDNSの設定

情報がないドメインを再問い合わせするDNS(アップストリームDNS)を指定します。

5_upstream.png

CloudflareとGoogleのパブリックDNSを追加しました。
quad9は元から入ってたもので、調べてみて問題なさそうだったので、そのままです。

今回の構成では、IPv6 DNSを設定すると名前解決に失敗する場合があります。
(IPv6経路が無いため)

⑤ DNSフィルタを追加

基本的には、以下のサイトからフィルタを採用しました。

280blockerのフィルタについて
280blockerのフィルタは、他のフィルタのようにURLで指定しても、エラーが発生して導入することができません。
403エラーだからOCIからの通信が弾かれてるのかな?

そのため、フィルタを直接DLして、保存したファイルを直接指定しました。
指定できるディレクトリは、AdGuard Home側で設定されています。

【指定可能なパス】
AdGuard HomeをインストールしたディレクトリにあるAdGuardHome.yamlsafe_fs_patternsに記載されています。

自宅サーバ(Unbound)

① Unboundのインストール

RHEL系では、以下のコマンドでインストールできます。
Debian系でもaptでインストールできるかと思います。

sudo dnf install unbound

② 設定ファイル(Unbound)の追記

Unboundのconfファイルの追記・修正をします。
該当箇所と記載内容は以下の通りです。

/etc/unbound/unbound.conf
server:
    interface: 0.0.0.0
    access-control: 127.0.0.0/8 allow
    access-control: 192.168.11.0/24 allow
    access-control: 10.50.0.0/24 allow

 (中略)

forward-zone:
        name: "."
        forward-addr: 10.50.0.1
  • interface:すべてのインターフェイスでリクエストを受け付ける
  • access-control:ローカルNWとVPN経由からのリクエストを受け付ける
  • forward-zone:すべてのリクエストを10.50.0.1(VPN上でのOCIのアドレス)に転送します

③ 設定ファイル(OS側の名前解決)の書き換え

デフォルトでどこのDNSサーバに問い合わせるかの設定が入っているので、自分自身に問い合わせるよう変更します。

/etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.11.1
nameserver 2404:xxxx:xxxx:xxxx::1
nameserver 2404:xxxx:xxxx:xxxx::2

 

/etc/resolv.conf
# Not Generated by NetworkManager
nameserver 127.0.0.1
nameserver ::1

何も対策をしないと、NetworkManagerが中身を勝手に変更してしまうことがあります。
なので、以下のコマンドでファイルを変更不可にします。

chattr +i /etc/resolv.conf

最後にDNSサーバ宛ての通信を通すため、53番ポートを開けます。

firewall-cmd --add-port=53/udp --permanent
firewall-cmd --add-port=53/tcp --permanent
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload

あとは、PCやスマホなどの設定から、使用するDNSを OCI or 自宅サーバ に指定して、Webサイトを問題なく開くことができれば構築完了です。

あとがき

記事を書きつつ、我ながら変な構成だなとは思いました。
しかし、今回、僕は以下の要件を満たすために、この構成を採用しています。

  • 外部からは、VPN(WireGuard)のconfで指定したDNSサーバを使用
  • 自宅からは、ルータで自宅サーバをDNSに指定

DNSサーバへの通信の過程で、確実にWireGuard上のネットワークを通るようにできたため、WireGuard上のネットワークにいるOCIをDNSサーバとして使えました。
少し特殊な構成ですが、この記事がここまで読んでくださった方の役に立てば嬉しいです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?