0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

dhclientとunboundを連携してみた

Last updated at Posted at 2016-01-13

自宅ルータが調子が悪くなり潮時かと思い立ち、ZRouterでビルドしたFreeBSDベースのルータに交換する事にした。

構成はこんな感じです。

MYFIREWALL.png

プロバイダーからDHCPでIPアドレスが渡されて、その時にDNSのアドレスも取得できるので、以下のような構成で対応してみた。

rcのスクリプトでunboundを起動する。とりあえず設定はGoogleのpublicサーバを参照するようにしておく。(あんまり意味ないけど)

/var/unbound/unbound.conf

server:
        interface: 0.0.0.0
        access-control: 10.0.1.0/24 allow
        do-ip6: no
        username: "nobody"

remote-control:
        control-enable: yes

forward-zone:
        name: "."
        forward-addr: 8.8.8.8

以下の/etc/dhclient-exit-hooksを用意してrcスクリプトでdhclientをINTERNET側のインターフェースを指定して起動する。

# !/bin/sh

if [ -n "$new_domain_name_servers" ]; then

cp /etc/unbound.conf.tmp /var/unbound/unbound.conf.tmp

# TS=`date "+%Y-%m-%d %H:%M:%S"`
for namesvr in $new_domain_name_servers
do
  echo "	forward-addr: $namesvr" >> /var/unbound/unbound.conf.tmp
#  echo "${TS} $namesvr" >> /tmp/dhcp_debug.log
done

if [ -e /var/unbound/unbound.conf ]; then

TMD=`md5 /var/unbound/unbound.conf.tmp | awk '{print $4}'`
OMD=`md5 /var/unbound/unbound.conf | awk '{print $4}'`

if [ "${TMD}" = "${OMD}" ]; then
UPDATE="no"
else
UPDATE="yes"
fi

else
UPDATE="yes"
fi

if [ "${UPDATE}" = "yes" ];then

mv /var/unbound/unbound.conf.tmp /var/unbound/unbound.conf
/usr/sbin/local-unbound-control reload

fi
fi

unbound.conf.tmpは上のunbound.confからforward-addrを抜いたファイル。

local-unbound-controlは鍵がないと使えません。ネットで調べると鍵はlocal-unbound-setupで作れるという情報があったのですが、12.1ではできなかったの自前スクリプトで作りました。

これでDHCPで渡されたDNSサーバをunboundに渡す事ができます。

更新されてない場合はunboundを再起動しないようにしました。これは再起動するとunboundの統計情報がリセットされてしまためにそうしました。

new_domain_name_serversが複数あり、順番をランダムにして送ってくる場合はうまく動かないですが、我が家のISPは毎回同じ順番で返してくれているようなので、大丈夫なようです。

DDNSを使っている場合は登録用の処理をこのスクリプトの中に入れます。

dnsmasqを内側のDHCP Serverだけで使っているのは以前のなごりです。ネットで調べたところdnsmasqとunboundを連携する方法もありましたが、シンプルにDNSはunboundだけにしてみました。Flashが8Mのルータで設定しましたがとりあえず6Mくらいには収まっています。unboundはライブラリをいくつか必要としていてちょっと大きかったです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?