参照するフルサービスリゾルバ(キャッシュDNSサーバ、再帰的DNSサーバ)を192.168.10.1
から192.168.10.2
に変更する方法をいくつか紹介します。後ろで紹介する方法ほどおすすめです。
詳細はArch Wikiを参照してください。
/etc/resolv.conf
を直接書き換える
非推奨です
$ cat /etc/resolv.conf
...
nameserver 192.168.10.1
$ vim /etc/resolv.conf
$ cat /etc/resolv.conf
...
nameserver 192.168.10.2
NetworkManager vs systemd-networkd
おそらくあなたの環境でネットワーク設定を管理しているのは、NetworkManagerまたはsystemd-networkdでしょう。
どちらかが起動してあるはずなので、確認しましょう
$ systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/NetworkManager.service.d
└─NetworkManager-ovs.conf
Active: active (running) since Mon 2021-03-29 19:27:54 JST; 41min ago
Docs: man:NetworkManager(8)
Main PID: 5115 (NetworkManager)
Tasks: 3 (limit: 19063)
Memory: 6.8M
CGroup: /system.slice/NetworkManager.service
└─5115 /usr/bin/NetworkManager --no-daemon
$ systemctl status systemd-networkd
● systemd-networkd.service - Network Service
Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; disabled; vendor preset: enabled)
Active: inactive (dead)
TriggeredBy: ● systemd-networkd.socket
Docs: man:systemd-networkd.service(8)
この例では、NetworkManagerが有効になっていました。
どちらを使っても構わないですが、ネームサーバの設定において、違いを知っておく必要があります
- NetworkManagerは
/etc/resolv.conf
を書き換えることがある - systemd-networkdは
/etc/resolv.conf
を書き換えない
systemd-networkdは/etc/resolv.conf
を書き換えないにも関わらず、どのようにしてDNSクライアントが参照するフルサービスリゾルバを変更するのか、疑問に思うかもしれません。
この疑問は次章で解決するはずです。
systemd-networkdを有効にする場合、同時にsystemd-resolvedを動かす必要があります。
NetworkManagerを有効にする場合、systemd-resolvedを使っても使わなくても良いです。systemd-resolvedを推奨される動作モードで動かしていると、NetworkManagerは/etc/resolv.conf
を書き換えません。
NetworkManager経由による変更
systemd-networkdが無効になっていて、NetworkManagerが有効になっている場合を考えます。
/etc/resolv.conf
にGenerated by NetworkManager
と記述されていたとします
$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.10.1
このとき、/etc/resolv.conf
を直接書き換えてもNetworkManagerが再起動後に上書きしてしまうことがあります。
そこで、NetworkManagerのDNS設定を変更し、再起動をすることで、/etc/resolv.conf
が変更されるようにします。
$ nmcli
eno1: connected to System eno1
...
ip4 default
inet4 192.168.10.5/24
route4 0.0.0.0/0
route4 192.168.10.0/24
DNS configuration:
servers: 192.168.10.1
domains: example.com
interface: eno1
eno1: connected to System eno1
のSystem eno1
がデバイス名となります
DNS設定を以下のように変更し、再起動します
場合によっては、DHCPによるDNSサーバ設定を無効にする必要があります
$ sudo nmcli con mod "System eno1" ipv4.ignore-auto-dns yes
$ sudo nmcli con mod "System eno1" ipv4.dns "192.168.10.2"
$ sudo systemctl restart NetworkManager
$ nmcli
eno1: connected to System eno1
...
ip4 default
inet4 192.168.10.5/24
route4 0.0.0.0/0
route4 192.168.10.0/24
DNS configuration:
servers: 192.168.10.2
domains: example.com
interface: eno1
$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.10.2
nmcliを叩くのではなく、ifcfg ファイルを使って設定する方法もあります
コマンドを実行する代わりに、設定ファイルを書いてそれを適用することは、「Infrastructure as Codeによるインフラ構築の自動化」の足がかりとなるため、より推奨されます。
詳しくはRedHatのドキュメントを参照してください
CentOSなどではNetworkManagerがデフォルトになっているので、RedHatのドキュメントが充実しています。
systemd-networkd経由による変更
NetworkManagerが無効になっていて、systemd-networkdが有効になっている場合を考えます。
詳しくはArch Wiki を参照してください。
netplanを使う
Ubuntuではnetplan がネットワーク設定に使われるようになりました。
netplanは、内部でNetworkManager
またはsystemd-networkd
の設定を生成して反映しているだけです。
設定を/etc/netplan/*.yaml
に書いて
$ sudo netplan apply
をすれば適用されます。
https://netplan.io/examples/ を設定の参考として載せておきます
rendererはnetworkd
またはNetworkManager
を指定できます
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 10.10.10.2/24
gateway4: 10.10.10.1
nameservers:
search: [mydomain, otherdomain]
addresses: [10.10.10.1, 1.1.1.1]