VyOS 1.4 で DNS blocking をやってみる

VyOS 1.1.7 から 1.4 に移行して、DNS 周りが dnsmasq -> PowerDNS に切り替わった影響で、こちらにあるように追加 hosts ファイルにブロックしたいホストを並べてブロックする手が使えなくなりました。

別の手を探したところ、公式フォーラムの以下のポストがありました。
forum.vyos.io

DNS 解決時に lua スクリプトで hook することで同じような DNS blocking ができるとのことです。


公式フォーラムにある方法の通り3つのスクリプトファイル、pdns-adblock-script.lua, pdns-adblock-blocklist.lua, adblock を置いてやればほぼいけるのですが、VyOS 1.4-epa2 では PowerDNS 設定ファイル recursor.conf のディレクトリが異なっていますので /config/scripts/commit/post-hooks.d/adblock スクリプトに修正が必要です。

adblock スクリプトで、

echo "lua-dns-script=/config/scripts/pdns-adblock-script.lua" | sudo tee -a /run/powerdns/recursor.conf

となっている後半の sudo 部のパスを以下のように修正してやっててください。

echo "lua-dns-script=/config/scripts/pdns-adblock-script.lua" | sudo tee -a /run/pdns-recursor/recursor.conf


また、block したいホストは pdns-adblock-blocklist.lua に配列の形で書き並べるので、お好みで変更しましょう。
自分はこちらの 広告除去用ホストファイル を元に置換したり手修正いれたりして作成しました。

最後に設定モードで commit すると adblock スクリプトが実行され、 block 動作が有効になります(commit する変更がない場合は adblock スクリプトを直接実行しても OK です)。

これで block 対象のドメインDNS 参照が走った際にはドメイン不在扱いになり、無事 block できるようになります。


一点運用上の注意点があって、adblock スクリプトの記述を見れば分かるように、設定を commit するたびに /run/pdns-recursor/recursor.conf の末尾に lua-dns-script=/config/scripts/pdns-adblock-script.lua が追記されていきます。
ファイル容量が増えていくだけで動作上の問題は無いのですが、時々掃除した方がいいかもしれません。


それではよい VyOS ライフを。