CentOS7 resolv.confの設定

スポンサーリンク

CentOS7のネットワーク周りの設定はNetworkManagerが司っており、手動でDNS関係のresolv.confを編集しても再起動すると元に戻ってしまうということになります。

普段は一度設定してしまえばあまり触ることのないresolv.confですが、プライマリDNSがこけたときのセカンダリへ切り替わる際のタイムアウトの値などを考慮する機会があったのでメモ書きとして残します。

まず直接resolv.confをviなどで編集可能なようにNetworkManagerに設定変更を実施します。以下のファイルを編集します。

# vi /etc/NetworkManager/NetworkManager.conf
[main]
dns=none ← 追記

そしてNetworkManagerを再起動します。

# systemctl restart NetworkManager

これで直接resolv.confが編集可能となります。

resolv.confに指定可能なDNSサーバは最大3つまでです。また、option項目としてtimeoutとattemptsを設定可能です。それぞれの意味は下記のようになります。

項目 意味
timeout 「レゾルバが他のネームサーバで問い合わせをリトライする前に、リモートネームサーバからの応答を待つ時間」を設定する。単位は秒で、デフォルトは RES_TIMEOUTである(現状では5秒、<resolv.h>を参照)
attempts 「レゾルバが諦めて呼び出し元のアプリケーションにエラーを返すまでに、ネームサーバに問い合わせを行う回数」を設定する。デフォルトは RES_DFLRETRY 回である (現状では 2回、<resolv.h> を参照)

timeoutに関しては指定したDNSが丸ごと死んだのかポートだけ空いていないのかによって挙動が異なります。大抵の場合、DNSのポートだけ死ぬということはまずなく、丸ごと死亡の場合がほとんどで理論的にセカンダリまでの切り替わり時間はデフォルトで以下の計算式になります。

5秒(timeout) × 2回(attempts) = 10秒

以下のコマンドで試して確認してみました。

# time ping www.yahoo.co.jp -c1
PING edge.g.yimg.jp (182.22.24.124) 56(84) bytes of data.
64 bytes from 182.22.24.124 (182.22.24.124): icmp_seq=1 ttl=56 time=11.9 ms

--- edge.g.yimg.jp ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 11.980/11.980/11.980/0.000 ms

real 0m10.038s
user 0m0.000s
sys 0m0.005s

理論値通りの結果が出ています。このtimeoutとattemptsを変更することが可能です。resolv.confに次のように設定します。

# vi /etc/resolv.conf
nameserver xx.xx.xx.xx
nameserver yy.yy.yy.yy
options timeout:3 attempts:1

この状態で再度実行すると以下の結果となりました。

# time ping www.yahoo.co.jp -c1
PING edge.g.yimg.jp (182.22.24.124) 56(84) bytes of data.
64 bytes from 182.22.24.124 (182.22.24.124): icmp_seq=1 ttl=56 time=11.9 ms

--- edge.g.yimg.jp ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 11.980/11.980/11.980/0.000 ms

real 0m6.048s
user 0m0.000s
sys 0m0.005s

てっきり3秒×1回=3秒になるのかなと思ったのですが6秒でした。attemptsを2にしても結果は6秒だったのでひょっとしたらattemptsの最小値は2なのかもしれません。このあたりご存知の方がおられたらぜひ教えてください。

またresolv.confのnameserverは記載した順番に引きにいくのですが、これをランダムに引きにいくようにして分散させることができます。これもoptionsで指定可能で以下のように記載します。

# vi /etc/resolv.conf
nameserver xx.xx.xx.xx
nameserver yy.yy.yy.yy
options timeout:3 attempts:1 
options rotate

これらのオプションはDNSサーバが死んだときのことを考えると設定しておいたほうが安全だと言えそうです。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする