PowerDNS のキャッシュサーバーに Systemd-resolved
PowerDNS を権威サーバーに見立てて Unbound でキャッシュ、さらにはソレを Systemd-resolve に参照させるという状況でした。
その時ふと思いました。
「Systemd-resolved」をキャッシュサーバーにすれば「unbound」いらなくね?
そこで今回は「Systemd-resolved」DNS キャッシュサーバー化計画を進めてみようと思います。
そもそも Systemd-resolve って何?
Systemd-resolve は Fedora では Workstation エディションで実装されている DNS キャッシュサーバーです。
もっとも、Workstation エディションでのみ実装されている事からも分かる通り、GUI を使用した環境での DNS 関連の統合やキャッシュサーバーとして利用する事を前提としています。
要するに「個人使用」を目的としたモノであり、公開サーバーとしての利用は考えられいません。
例えば成りすましを防ぐ DNSSEC (サーバー証明書)が利用出来無い事(外部に問い合わせる時にのみ使用)や、ACL すら存在しません。
まあそう言ういみでは DNS キャッシュサーバーに仕様とするのは正気の沙汰ではありません。
しかしながら、公開するのはローカル環境だけであれば問題ありません。
(結局、出来ませんでした…orz)
その他の挙動についてはコチラ。
Systemd-resolved が使用しているポートやアドレス
Systemd-resolve が使用しているデーモンが Systemd-resolved で、使用しているポートやアドレスは次の通り。
ポート番号「10053」でオープンしているのが PowerDNS、「53」でオープンしているのが Systemd-resolved となる。
ここで注意しなければならないのは、「127.0.0.53」でオープンしているモノ。
「127.0.0.1」~「127.255.255.254」はすべて「localhost」のループバックアドレスであり、ポート番号は重複はできない。また、全てを表す「0.0.0.0」も使用不可である。
ここで分かる事は、Systemd-resolved は IPv4 でしかオープンしていない事である。
また、PowerDNS が「192.168.3.4」(ローカルアドレス)でオープンしているのは、外部マシンからの参照用である。(後述)
Systemd-resolved の設定
「/etc/systemd/resolved.conf」を編集し以下の様に変更を行った。
[Resolve] DNSStubListener=yes DNS=127.0.0.1:10053 [::1]:10053 FallbackDNS=8.8.8.8 8.8.4.4 |
- Stubリスナーの有効化
Systemd-resolved が有効なままで、PowerDNS へアクセスさせる。(DNSStubListener) - DNS に PowerDNS を指定
ポート番号「10053」(DNS) - フォールバックとして Google を指定(PowerDNS で見つからなかった場合の対処)
「8.8.8.8」「8.8.4.4」(FallbackDNS)
Systemd-resolved の再起動
# systemctl restart systemd-resolved |
確認
# systemd-resolve –status |
# systemd-resolve www.magic-object.com |
問題ない様だ。
※ 「dig」と「systemd-resolve」での問い合わせでは結果が異なる事があるが、正しいのは「systemd-resolve」。「dig」では正しい値が出るにも関わらずブラウザアクセスで失敗するケースが見られた。
ポート開放と外部からのアクセス
ココで FirewallD でのポート開放を行って外部からアクセスしてみた。
結果は惨敗、ACL が存在しないにも関わらず、Systemd-resolved はローカルホストからのアクセス以外は受け付けていない様だ。
仕方がないのでポート番号「10053」を開放。(前述の「192.168.3.4」でオープンしたモノの対処)
外部からのアクセスも問題なく出来た。(勿論、ポート 10053 番に対する問い合わせ)
外部マシンからアクセスでの注意点
- Systemd-resolved は個人向けの DNS サーバーなのでアクセスにはポート番号「53」ではアクセス出来無い。
- インターフェースに対しての DNS 設定ではポート番号を変更出来なかった。(GUI)
- Systemd-resolved の設定で、ローカルアドレスのポート番号「10053」で指定した。
「/etc/systemd/resolved.conf」を編集し以下の様に変更を行った。
[Resolve] DNSStubListener=yes DNS=192.168.3.4:10053 FallbackDNS=8.8.8.8 8.8.4.4 |
再起動
# systemctl restart systemd-resolved |
結論
Systemd-resolved は個人用の DNS キャッシュサーバーとして利用する分には問題ないが、公開サーバーとして利用するには無理がある。(当然か…)