メインコンテンツへスキップ
  1. ノート/
  2. Linux/

LinuxのDNSネットワーク管理

·1741 文字·4 分· loading · loading · · ·
ICE345
著者
ICE345
CS Student | System | Linux | OCaml

Linuxでは、/etc/resolv.conf にDNSサーバーを指定できます。このファイルは、システムが名前解決に利用するDNSリゾルバーの情報を提供します。ただし、現在のLinuxディストリビューションでは、resolv.conf がNetworkManager、systemd-resolved、dhcpcd、DHCPクライアントなどによって自動生成されていることがあります。

/etc/resolv.confを直接編集しても、ネットワーク管理サービスが再起動した時点で内容が上書きされる場合があります。継続的に設定したい場合は、実際にDNSを管理しているサービスの設定を変更してください。

1. /etc/resolv.confを一時的に変更する
#

1.1 ファイルを確認する
#

cat /etc/resolv.conf

nameserver行に、現在利用されているDNSサーバーが表示されます。

1.2 DNSサーバーを指定する
#

テキストエディターでファイルを開きます。

sudo nano /etc/resolv.conf

たとえば、次のようにnameserverを記述できます。

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844

Cloudflare DNSを使う場合は、次のようにします。

nameserver 1.1.1.1
nameserver 1.0.0.1

編集後、もう一度cat /etc/resolv.confを実行して内容を確認します。この方法は、現在のネットワーク管理サービスがファイルを再生成するまでの一時的な確認に向いています。

2. DNS設定が上書きされる理由
#

2.1 systemd-resolved
#

systemd-resolvedを利用している場合、/etc/resolv.conf/run/systemd/resolve/内のファイルへのシンボリックリンクになっていることがあります。まず、状態を確認します。

systemctl is-active systemd-resolved
resolvectl status
ls -l /etc/resolv.conf

個別の接続へDNSを設定する場合は、環境に応じてresolvectl、NetworkManager、またはデスクトップ環境のネットワーク設定を利用します。resolv.confを無理に削除したり、管理サービスを停止したりすると、名前解決そのものが失敗する可能性があるため注意してください。

2.2 NetworkManager
#

NetworkManagerがDNSを管理している場合は、接続一覧を確認します。

nmcli connection show

接続名を指定してDNSを設定する例は次のとおりです。

sudo nmcli connection modify "接続名" ipv4.dns "1.1.1.1 8.8.8.8"
sudo nmcli connection modify "接続名" ipv4.ignore-auto-dns yes
sudo nmcli connection up "接続名"

設定が反映されたか確認します。

nmcli device show | grep -E 'IP4.DNS|IP6.DNS'
resolvectl status 2>/dev/null

NetworkManagerの設定ファイルでDNSの扱いを変更する方法もありますが、ディストリビューションやバージョンによって設定方法が異なります。まずはnmcliを使う方が安全です。

2.3 DHCPクライアント
#

DHCPサーバーは、IPアドレスだけでなくDNSサーバーの情報も配布できます。そのため、DHCPクライアントが受け取ったDNS設定をresolv.confへ書き戻すことがあります。

3. ネットワークサービス別の設定例
#

3.1 dhcpcdを使う場合
#

/etc/dhcpcd.confを編集し、次のような行を追加します。

static domain_name_servers=1.1.1.1 8.8.8.8

その後、サービスを再起動します。

sudo systemctl restart dhcpcd

サービス名はディストリビューションによって異なる場合があるので、systemctl status dhcpcdで確認してください。

3.2 systemd-networkdを使う場合
#

/etc/systemd/network/に、.networkで終わる設定ファイルを作成します。たとえば20-wired.networkです。

[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=1.1.1.1

設定後、systemd-networkdを再起動します。

sudo systemctl restart systemd-networkd

4. DNS設定を確認する
#

設定が本当に機能しているかは、ファイルの内容だけでなく、名前解決を実行して確認します。

getent hosts example.com
resolvectl query example.com 2>/dev/null
dig example.com 2>/dev/null

まとめ
#

/etc/resolv.confを編集すれば、DNSサーバーを一時的に指定できます。しかし、実際の設定をNetworkManager、systemd-resolved、dhcpcd、systemd-networkdなどが管理している場合、直接編集した内容は上書きされます。持続的な設定を行うときは、まずls -l /etc/resolv.confと稼働中のネットワークサービスを確認し、そのサービスの設定を変更してください。

関連記事


评论