server-memo.net

dhcpでresolv.confを更新させない方法

      2016/01/22

resolv.confが更新される

当然なのですが、IP情報をDHCPサーバから貰っちゃうと「/etc/resolve.conf」のDNSサーバ情報が勝手に更新されてしまいます。通常はそれで問題ないのですが、DNSサーバは自分で決めたものを使いたいという場合の方法です。

私の場合は、複数のNICがついたサーバで、DHCPでIP貰うNICと、固定でIP設定をしているNICが混在している場合などに設定しています。(この設定を追加するのを忘れてサービス止めたこともありました・・・)

resolv.confを更新させないためには

dhcpクライアント側のNIC設定ファイルに少し設定を追加・変更することで、「/etc/resolv.conf」のDNSサーバ情報が更新されなくなります。

今回は設定ファイルを編集する方法と、CentOS7からですが、「nmcli」コマンドを使用することでも設定を変更出来るので、その2通りの設定方法をまとめました。

NICの設定ファイルを編集する方法

設定ファイルについて

まず、NICの設定ファイルについてですが、CentOS6までとCentOS7からはファイル名が若干変わっています。

  • CentOS6までは「/etc/sysconfig/network-scripts/ifcfg-ethx」(xの部分はNICにより異なります。)
  • CentOS7からは「/etc/sysconfig/network-scripts/ifcfg-NIC名」

ちなみに私のCentOS7の環境では、こんなファイル名でした。
「/etc/sysconfig/network-scripts/ifcfg-eno33554984」

設定項目

DHCPでIP情報を貰う際に、「resolv.conf」のDNSサーバ情報を更新されない用にするには、以下の設定をNICの設定ファイルに行います。

PEERDNS=no

※PEERDNS=yesとなっている場合はPEERDNS=noに変更します。

設定反映

ネットワークサービスの再起動を行うことで設定が反映されます。
ただし、「resolv.conf」の「namaserver」の内容がすでにDHCPにより更新されている場合は、自分が使用したいDNSサーバに設定を変更してから、ネットワークサービスを再起動してください。

CentOS6までの方法
# service network restart
CentOS7からの方法
# systemctl restart network

動作確認

ネットワークサービスの再起動後「resolve.conf」を確認しDHCPによって「nameserve」の部分が更新されていないかを確認します。(可能ならば、サーバの再起動試験も行ったほうが安心だと思います。)

(おまけ)DHCPサーバからDNSサーバ情報を貰いたい場合

「PEERDNS=no」から「PEERDNS=yes」に設定を変更し、ネットワークサービスを再起動することで、DHCPからDNSサーバの情報を得ることができるようになり、「/etc/resolv.conf」が自動的に更新されるようになります。

CentOS7でnmcliコマンドを使用する方法

CentOS7でNetworkManagerの「nmcli」コマンドを使用し設定する場合は、以下のようなコマンドで設定できます。

nmcliコマンド書式

nmcli c modify [nic名] ipv4.ingore-auto-dns "yes"
nmcli c modify [nic名] ipv4.ignore-auto-dns "yes"

※2015.10.22 コマンドに間違いがありましたので修正しました。

私のCentOS7環境では、DNCPでIP情報を貰うNIC名が「eno33554984」だったので、以下のようなコマンドを実行することとなりました。

# nmcli c modify eno33554984 ipv4.ignore-auto-dns "yes"

このコマンドを実行することで、NICの設定ファイルに「PEERDNS=no」が設定されます。

設定反映

ネットワークサービスの再起動を行うことで、設定を反映させることが出来ます。
「/etc/resolve.conf」の「nameserver」がDCHPによってすでに更新されている場合は、ネットワークサービスを再起動する前に、「nameserver」使いたいDNSサーバへ変更してから、ネットワークサービスを再起動します。

# systemctl restart network

動作確認

ネットワークサービスの再起動後「resolve.conf」を確認しDHCPによって「nameserve」の部分が更新されていないかを確認します。

(おまけ)DHCPサーバからDNSサーバ情報を貰いたい場合

下記のコマンドでNICの設定ファイルに「PEERDNS=yes」が設定されるので、コマンド実行後ネットワークサービスを再起動します。

nmcliコマンド書式
# nmcli c modify [nic名] ipv4.ignore-auto-dns "no"

私の環境であれば、このように実行しました。

# nmcli c modify eno33554984 ipv4.ignore-auto-dns "no"
# systemctl restart network

以上です。

 - DHCP