VPC内インスタンスの名前解決は下記の順に行います。
/etc/hosts
見る/etc/resolv.conf
に書かれたDNSサーバに問い合わせる
/etc/resolv.conf
は下記のように設定します。
options single-request-reopen
search example.internal
nameserver 127.0.0.1
nameserver 自前のDNSの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
}
今のところこれで正常に動作しているようです。
Written with StackEdit.
0 件のコメント:
コメントを投稿