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.mydns.jp

問題ない様だ。

※ 「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 キャッシュサーバーとして利用する分には問題ないが、公開サーバーとして利用するには無理がある。(当然か…)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です