Virtualminでサーバ管理をしていて、設定変更などの確認時にRe-Check Configuration(Checking Configuration)を行うときに、頻繁に発生するエラーがこれ。
ちなみに再起動をかけたあとの一度目のRe-Check Configurationではこのエラーが必ず発生する。
サーバー会社によっても違うが、VPSを契約してVirtualminを利用しているときに起こる現象です。(自分の経験ではさくらのVPSでは未確認。conohaのVPSでは発生を確認)
以下がエラーの全文です。
1 2 3 4 |
Checking Configuration The status of your system is being checked to ensure that all enabled features are available, that the mail server is properly configured, and that quotas are active .. Your system has 991.09 MB of memory, which is at or above the Virtualmin recommended minimum of 256 MB. Virtualmin is configured to setup DNS zones, but this system is not setup to use itself as a DNS server. Either add 127.0.0.1 to the list of DNS servers, or turn off the BIND feature on the module config page. It appears that DHCP is being used to dynamically configure your network interfaces, which can cause the DNS servers to be set based on settings provided by the DHCP server. Using a static IP address is strongly recommended with Virtualmin. |
この問題を対策する。
※動作確認環境
CentOS Linux 7.9
症状と一時的な回避方法
この画面が出たらエラー表示の中の「list of DNS servers」をクリックし、「DNSクライアント」画面の「DNSサーバ」の最下段あたりに「127.0.0.1」を追加して保存ボタンをクリックすればRe-Check Configurationが行える。
※「変更を適用する」ボタンを押さないのがポイント。(押すとリセットされてしまう)
一時的な回避方法
エラーが出た際は「list of DNS servers」をクリック。
「DNSサーバ」に「127.0.0.1」と入力し「保存」ボタンをクリック。
「変更を適用する」ボタンを押さずにメニューの「Re-Check Configuration」をクリックする。
これで正常にRe-Check Configuration(Checking Configuration)が行えます。
問題点
しかし、サーバーの再起動がかかると入力した項目がリセットされてしまいもう一度「DNSクライアント」画面に127.0.0.1を入力することになる。
この対策として、
/etc/resolv.conf
の末尾に以下の一行
1 |
nameserver 127.0.0.1 |
↑これを追加すればよいという情報があるが、ここで追加したネームサーバー情報もサーバの再起動でリセットされてしまう。
/var/log/messages を確認してみたところ、NetworkManagerが /etc/resolv.conf を書き換えている可能性が濃厚。
ネットワークまわりの設定を弄れば resolv.conf のリセットが回避できそうではあるが、できれば不要なカスタマイズは加えたくない。
そんな時の簡単な対策方法を以下で紹介します。
対策方法
CentOS 6などであれば、サーバ起動時に実行される「/etc/rc.d/rc.local」にvi等で、
1 |
echo nameserver 127.0.0.1 >> /etc/resolv.conf |
↑この一行書き込んで実行させるという手もあるが、CentOS 7なので今回はsystemdを利用してサクッと自前でサービスを作ります。
今回作成する自作サービスの内容
- サービス名は「echo-ns.service」とする。
- サービス内容はNetworkManagerが /etc/resolv.conf を書き換えた後にシェルスクリプト(echo-nameserver.sh)を実行する処理とする。
- シェルスクリプト(echo-nameserver.sh)は「echo nameserver 127.0.0.1 >> /etc/resolv.conf」を実行して resolv.conf に「nameserver 127.0.0.1」の一行を追加する。
サービス作成
■まずシェルスクリプト用のディレクトリを作る
1 |
# mkdir -p /opt/echo-ns/bin |
■シェルスクリプト作成
1 |
# vi /opt/echo-ns/bin/echo-nameserver.sh |
1 2 3 4 |
#!/bin/bash sleep 15s echo nameserver 127.0.0.1 >> /etc/resolv.conf |
※echoの処理の前にsleep 15sで念のために15秒待機させています。(NetworkManagerによるresolv.conf書き換え処理よりechoの実行を確実に遅くするため。)
■実行権限付与
1 |
# chmod +x /opt/echo-ns/bin/echo-nameserver.sh |
■サービスを作る
1 |
# vi /etc/systemd/system/echo-ns.service |
1 2 3 4 5 6 7 8 9 10 11 |
[Unit] Description=echo nameserver 127.0.0.1 to resolv.conf After=NetworkManager-wait-online.service [Service] Type=simple ExecStart=/opt/echo-ns/bin/echo-nameserver.sh [Install] WantedBy=multi-user.target |
■サービスを反映
1 |
# systemctl daemon-reload |
■自動起動を設定
1 |
# systemctl enable echo-ns.service |
以上で完了です。
これで再起動しても毎回 /etc/resolv.conf に「nameserver 127.0.0.1」の一行が追加されます。
再起動の際に毎回リセットされてしまうのなら、起動時に毎回書き込めばよいという簡単な対策方法ですが、これで少し快適になりました。
systemdでの自前サービス作成は今回の件だけではなくアイデア次第で他のちょっとしたことにも色々と使えますね。
以上で解決です。