はじめに
今まで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にアクセスします。
アクセスすると、ウェルカム画面が表示されます。
2.インターフェースの設定をします。
基本的に変更せずそのまま進めちゃって大丈夫ですが、80番ポートが埋まっている場合は他のポート番号に変更してください。
3.ユーザー登録をします。
ここで管理画面にアクセスするためのユーザーとログイン時のパスワードを設定します。
4.設定完了です。
初期設定はこれで完了なので、この後は管理画面から諸々設定していきます。
④ アップストリームDNSの設定
情報がないドメインを再問い合わせするDNS(アップストリームDNS)を指定します。
CloudflareとGoogleのパブリックDNSを追加しました。
quad9は元から入ってたもので、調べてみて問題なさそうだったので、そのままです。
今回の構成では、IPv6 DNSを設定すると名前解決に失敗する場合があります。
(IPv6経路が無いため)
⑤ DNSフィルタを追加
基本的には、以下のサイトからフィルタを採用しました。
280blockerのフィルタについて
280blockerのフィルタは、他のフィルタのようにURLで指定しても、エラーが発生して導入することができません。
403エラーだからOCIからの通信が弾かれてるのかな?
そのため、フィルタを直接DLして、保存したファイルを直接指定しました。
指定できるディレクトリは、AdGuard Home側で設定されています。
【指定可能なパス】
AdGuard HomeをインストールしたディレクトリにあるAdGuardHome.yamlのsafe_fs_patternsに記載されています。
自宅サーバ(Unbound)
① Unboundのインストール
RHEL系では、以下のコマンドでインストールできます。
Debian系でもaptでインストールできるかと思います。
sudo dnf install unbound
② 設定ファイル(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サーバに問い合わせるかの設定が入っているので、自分自身に問い合わせるよう変更します。
# Generated by NetworkManager
nameserver 192.168.11.1
nameserver 2404:xxxx:xxxx:xxxx::1
nameserver 2404:xxxx:xxxx:xxxx::2
↓
# 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サーバとして使えました。
少し特殊な構成ですが、この記事がここまで読んでくださった方の役に立てば嬉しいです。




