DHCP で配られる以外の DNS サーバを登録する
諸般の事情で常時稼働のサーバに登録しておく DNS サーバを DHCP で配る以外にも登録しておきたかった。
ところが情報がなかなか見つからない。
しばらく寝かせておいたけど、解決できたので、めもめも。
環境
常時稼働させているサーバがある。定期的に外に接続してなんやかんやを する。
実はこのサーバには、物理的に 2 つの出口がある。 また、その 1 つは時々使えなくなる。
色々と伏せて書くとこんな感じ。
で、通常はデフォルトゲートウェイから出ていくので問題は無いのだが、
DNS だけ、他方の口から引いているため(/etc/resolv.conf
に従って)、
そっちが使えなくなると外部接続しなくなり、目的の作業が失敗してしまう。
デフォルトゲートウェイを A 、もう一つを B とすると、 通信自体は A 経由でできる状態なのに B 経由で DNS を問い合わせするために IP アドレスが取得できず、通信そのものが失敗するって状況。
原因
DNS をどこから引くかは /etc/resolv.conf
にある nameserver
エントリ
を参照する。このエントリは 3 つまで有効。
対象サーバの /etc/resolv.conf
を見ると B サーバから配られた
エントリ 1 つだけだった。
ここに手動で A 側の nameserver
エントリを追加してもいつの間にか1
消えてしまう。
色々調べたけど、上手くヒットする情報が見つからない。基本的な情報が多すぎて、 こういうオプション情報が埋もれている感じ。
ただ、/etc/resolv.conf
を書き換えるサービスが色々あるので、
その調停が問題になる事があるって事は分かった。
やりたいこと
通常は B 側の DNS 引きが動いているので問題は無い。 問題は、B 側が居なくなったとき。
おそらく、B 側へ DNS を引きに行って失敗するだろう。今までだと
他の nameserver
エントリが無いので、そこで失敗が確定してしまう。
実際には A 側へ引きに行くこともできるので、B 側で失敗したら A 側で再度
引ける様に /etc/resolv.conf
に nameserver
エントリが
もう 1 つあれば良い。
順序として次になる様、記述としては下に来る様にする。
何なら更なる予備として google (8.8.8.8) のエントリを入れても良いかもしれない。 エントリが 3 個まで有効なのだから、もう 1 つ記述できる。
検索
どうやら、ディストリビューション毎に事情が違うらしいので、Debian を 検索ワードに含めてやり直した。
最初に Debian の Wiki を見つけた。
/etc/resolv.conf
を書き換えさせないために
/etc/dhcp/dhclient.conf
に supersede domain-name-servers
を
指定する例がある。
ただ、このページの日本語ページは無かった。
supersede
と言うワードを追加して検索し
man ページ
に行き着いた。やっぱり日本語は良いなぁ
URL の通り、wheezy って事で資料としては古いけど、この辺りはあまり変わって いないはず。
で、やってみたら append
で行けた。
修正内容
/etc/dhcp/dhclient.conf
に以下を追加する
append domain-name-servers 127.0.0.1;
これで /etc/resolv.conf
が、以前の DHCP で取得した内容に加えて
nameserver 127.0.0.1
という行を持つようになった。
これで B 側へ引きに行って失敗したら append
で指定したサーバへ引きに
行く(はず)だ。
注:上記の 127.0.0.1 は例で実際には別の記述だ。8.8.8.8 でも 1.1.1.1 でも 良い。まぁ、推奨は自分のプロバイダだったはず。
その他の指定
append
以外にも default
/supersede
/prepend
が
指定できる。
書式はどれも同じ。
以下は実際には試していないものも含むので、予想を含むのだが、
こんな感じになるのだろう。nameserver
行は 3 つまで有効で、
上からトライするのだから。
他(domain-name や domain-search など)は不明。
default
DHCP から設定が取得できなければこちらを使う
/etc/resolv.conf
中には指定した nameserver
行か DHCP から取得した行の一方が記述される(予想)
supersede
DHCP から取得した設定を使わない
/etc/resolv.conf
中には指定した nameserver
行以外の記述がなくなる
prepend
DHCP から取得した設定より優先する。
/etc/resolv.conf
中で、指定した nameserver
行がより上になる
append
DHCP から取得した設定のバックアップとして機能する
/etc/resolv.conf
中で、指定した nameserver
行がより下になる
-
もちろん、次の DHCP の更新時だ ↩