Help us understand the problem. What is going on with this article?

127.0.0.53:53 って 誰が 使ってるの?

More than 3 years have passed since last update.

dnsdist を使って 内外の振り分けする DNS権威サーバを 構築しようとしたら ポート使ってるって エラーになった。

計画は こうだった。

1、bindから脱却する
2、DNS権威サーバに NSDを採用
3、リゾルバに unboundを採用
4、内向きと外向きで別にしたいのでdnsdistで 振り分け
5、それ以外は unboundで 解決させる

ubuntuのLTSの 16.04で dnsdist を aptで インストールしたら 1.0α だったので 17.04 にしてみた。 すると 1.1.0 になったので これで チャレンジしてみることにした。

最初の設定は ↓のような感じ

/etc/dnsdist/dnsdist.conf
newServer({address="127.0.0.1:8053", pool="auth"}) 
newServer({address="127.0.0.1:8153", pool="local"}) 
newServer({address="127.0.0.1:8253", pool="resolver"}) 
authdomains = newSuffixMatchNode() 
authdomains:add(newDNSName("example.com.")) 
allow_recursion = newNMG() 
allow_recursion:addMask("10.0.0.0/8") 
addAction(AndRule({SuffixMatchNodeRule(authdomains),NetmaskGroupRule(allow_recursion)}), PoolAction("local")) 
addAction(SuffixMatchNodeRule(authdomains), PoolAction("auth")) 
addAction(NetmaskGroupRule(allow_recursion), PoolAction("resolver")) 
addAction(AllRule(), RCodeAction(5)) 
addACL("0.0.0.0/0") 
addACL("::0/0") 
addLocal("0.0.0.0:53") 
addLocal("[::]:53")

sudo systemctl start dnsdist.service で 起動するとエラーが発生し、journalctl -xe で内容を確認した。

-- Unit dnsdist.service has begun starting up.
Jul 12 12:24:08 DNSmaster dnsdist[1868]: Configuration '/etc/dnsdist/dnsdist.conf' OK!
Jul 12 12:24:08 DNSmaster dnsdist[1868]: Configuration '/etc/dnsdist/dnsdist.conf' OK!
Jul 12 12:24:08 DNSmaster dnsdist[1881]: Added downstream server 127.0.0.1:10053
Jul 12 12:24:08 DNSmaster dnsdist[1881]: Added downstream server 127.0.0.1:20053
Jul 12 12:24:08 DNSmaster dnsdist[1881]: Fatal error: binding socket to 0.0.0.0:53: Address already in use
Jul 12 12:24:08 DNSmaster systemd[1]: dnsdist.service: Main process exited, code=exited, status=1/FAILURE
Jul 12 12:24:08 DNSmaster systemd[1]: Failed to start DNS Loadbalancer.

と bindできないという エラーになった。

netstat で しらべると

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 :::5355                 :::*                    LISTEN
udp        0      0 127.0.0.53:53           0.0.0.0:*
udp        0      0 0.0.0.0:5355            0.0.0.0:*
udp6       0      0 :::5355                 :::*

127.0.0.53 が いるじゃないか。
おもわず 「誰だよ」と こえが 出てしまった。
調べてわかったのだが、systemdの一部として 提供されている リゾルバだった。設定も /etc/systemd/resolved にあり、 停止することもできるようだ。
(参考にしたページ
https://kledgeb.blogspot.jp/2016/06/ubuntu-1610-7-dnssystemd-resolved.html
http://nao-yu-ki-pc.blogspot.jp/2017/04/systemd-resolveubuntudns.html )

その正体こそ systemd-resolved だ。 ubuntu では 16.10から すべてのリリースで採用されたので ubuntu server でも 採用されたのだった。

標準提供される リゾルバが あるんだったら 利用しないてはないので 先ほどの設定ファイルを 次のように修正した。

/etc/dnsdist/dnsdist.conf
newServer({address="127.0.0.1:8053", pool="auth"}) 
newServer({address="127.0.0.1:8153", pool="local"}) 
newServer({address="127.0.0.53:53", pool="resolver"}) 
authdomains = newSuffixMatchNode() 
authdomains:add(newDNSName("example.com.")) 
allow_recursion = newNMG() 
allow_recursion:addMask("10.0.0.0/8") 
addAction(AndRule({SuffixMatchNodeRule(authdomains),NetmaskGroupRule(allow_recursion)}), PoolAction("local")) 
addAction(SuffixMatchNodeRule(authdomains), PoolAction("auth")) 
addAction(NetmaskGroupRule(allow_recursion), PoolAction("resolver")) 
addAction(AllRule(), RCodeAction(5)) 
addACL("0.0.0.0/0") 
addLocal("10.0.0.10:53") 

さて、 この設定で うまいこと いくかな。

shooskay
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away