クライアント側の名前解決を設定する
各インスタンスのリゾルバを設定する
/etc/hosts
見る/etc/resolv.conf
に書かれたDNSサーバに問い合わせる
/etc/resolv.conf
は下記のように設定します。
options single-request-reopen search example.internal nameserver 127.0.0.1 nameserver 自前のBINDのIP nameserver AWSの用意したDNSのIP
ローカルにdnsmasqをいれてDNSキャッシュする
127.0.0.1が何かというと、dnsmasqというDNSサーバで、各インスタンスのローカルで起動させておきます。毎回DNSサーバに問い合わせしないようにDNSキャッシュ機能をするためです。dnsmasqにキャッシュがない場合は/etc/resolv.conf
に書かかれたIPにフォワードしてくれます。
dnsmasqの導入は$sudo yum install dnsmasq
ですんなり入ります。
ネガティブキャッシュ(名前解決できなかったということをキャッシュする)はしないようにします。
- /etc/dnsmasq.conf
# If you want to disable negative caching, uncomment this. no-negcache
キャッシュを全クリアしたい場合は$sudo /etc/init.d/dnsmasq force-reload
します。
インスタンス起動時に/etc/resolv.confが初期化されてしまう
最初/etc/resolv.conf
に上記の内容を直接ベタ書きしていたのですが、インスタンス再起動時に/etc/resolv.conf
が初期化?されてしまい、AWSの用意したDNSサーバのIPのみに書き換わっていたりしました。
DHCPクライアントなので/etc/resolv.conf
も設定されるのでしょう。
調べてたところ/etc/dhcp/dhclient-enter-hooks
のファイルを用意していると、DHCP更新時の/etc/resolv.conf
の書き換え処理を上書きできるようです。
make_resolv_conf() { rscf=`mktemp /tmp/XXXXXX`; echo 'options single-request-reopen' > $rscf echo 'search example.internal' > $rscf echo 'nameserver 127.0.0.1' >> $rscf echo 'nameserver 172.31.4.75' >> $rscf echo 'nameserver 172.31.0.2' >> $rscf change_resolv_conf $rscf rm -f $rscf }
今のところこれで正常に動作しているようです。