Ubuntu 20.04でDNSサーバーを永続的に変更する方法

Ubuntu 20.04でDNSを変更するのは、設定をいくつか編集してうまくいくことを期待するほど簡単ではありません。新しいDNSサーバーを設定した後でも、デフォルトのDNSサーバーがそのまま残っていることがあります。特にネットワークマネージャーがリセットされたり、他のサービスによって設定が上書きされたりすると、その傾向が顕著になります。再起動やネットワークの再起動後にDNSの変更が元に戻ってしまうことも珍しくなく、非常に煩わしい場合があります。そのため、より永続的な解決策、つまりアップデート、再起動、ネットワークの切り替え後もカスタムDNSサーバーが確実に維持されるようにしたい場合は、もう少し深く掘り下げる必要があります。

このガイドでは、システムレベルでDNSを設定し、より強固な運用を実現する、現実的で少々ハック的な方法を解説します。もちろん、システムファイルへの変更は注意を怠るとシステム障害を引き起こす可能性があるため、何をしているのかを理解しておくことは重要です。しかし、最終的には、特に現在のDNS設定が頻繁にリセットされたり、信頼性が低かったりする場合は、この方法によって時間とストレスを節約できます。

Ubuntu 20.04でDNS設定を修正する方法

Netplanを使用してDNSを永続的に設定する

Ubuntu 20.04は、ネットワーク設定の管理にデフォルトでNetplanを使用しています。ここでの秘訣は、netplanのYAMLファイルでDNS設定を直接上書きし、どのような状況でも設定が維持されるようにすることです。この方法は、古いNetworkManagerの癖に頼らず、システムレベルで制御できるため、堅牢です。

設定によっては、設定ファイルは または類似のファイルに保存されます。これを や など/etc/netplan/01-netcfg.yamlのテキストエディタで開いてください。nanovim

sudo nano /etc/netplan/01-netcfg.yaml

次のようなものが表示された場合:

network: version: 2 renderer: NetworkManager ethernets: enp3s0: dhcp4: yes

次のように、インターフェイスの下に DNS サーバーを含めるように変更します。

network: version: 2 renderer: networkd ethernets: enp3s0: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] 

基本的には、そのインターフェースでDHCP(有効になっている場合)を無効にし、DNSサーバーを直接指定します。こうすることで、DHCPアップデートやネットワークマネージャのリロードによって上書きされることはありません。

ファイルを保存し ( Ctrl + Onano で 、次にEnter、でCtrl + X終了)、次のように設定を適用します。

sudo netplan apply

enp3s0注:を実際のインターフェース名に置き換えてください。ネットワークインターフェースは で確認できますip link

すぐに動作するか、再起動すると改善する場合もあります。Linuxは確かに奇妙なので。設定によっては、そのインターフェースのDHCPを完全に無効にして、DNSを手動で指定した方がDNSの安定性が高まります。これはいわば「fire and forget(一度設定したら忘れ去る)」アプローチです。

あるいは、systemd-resolvedでDNSをオーバーライドする

もう1つのより簡単な方法は、systemd-resolvedを調整することです。これはUbuntu 20.04のデフォルトのDNSリゾルバーであり、ここで永続的なDNSサーバーを設定することもできます。

ファイルを編集します/etc/systemd/resolved.conf

sudo nano /etc/systemd/resolved.conf

次のような行をコメント解除または追加します。

[Resolve] DNS=8.8.8.8 8.8.4.4 FallbackDNS=1.1.1.1 1.0.0.1 # Might also want to set DNSStubListener=no to avoid conflicts if you're using stub listener 

保存後、サービスを再起動します。

sudo systemctl restart systemd-resolved

この方法では、システム リゾルバ レベルで DNS サーバーが更新され、再起動やネットワークのリセットを行っても保持されます。これは、GUI や DHCP に依存するよりもはるかに優れています。

動作していることを確認したい場合は、実行してsystemd-resolve --statusリストされている DNS サーバーを確認してください。

追加のヒント: /etc/hosts と /etc/resolv.conf に注意してください

DNSの問題は、 のキャッシュされた設定や競合設定が原因である場合があります/etc/resolv.conf。Ubuntu 20.04では、通常、resolv.confは にシンボリックリンクされています/run/systemd/resolve/stub-resolv.conf。DNSを上書きする場合は、リンクが優先設定を指していることを確認するか、カスタムリゾルバを使用している場合はスタブを無効にしてください。

これは次のように確認できます:

ls -l /etc/resolv.conf

シンボリック リンクが を指していてstub-resolv.conf、DNS を他の場所で管理している場合は、スタブ リスナーを無効にするか、シンボリック リンクを削除する必要があるかもしれませんが、これはより高度な領域になります。

追加のヒントとトラブルシューティング

  • DNS を微調整する際は、念のため DNS キャッシュをフラッシュすることをお勧めします。sudo systemd-resolve --flush-caches更新されない場合は、これが役立つ場合があります。
  • 設定変更後、ネットワークを再起動したり、再起動したりすると改善される場合もあります。Linux は必要以上に手間がかかるためです。
  • VPN やその他のネットワーク ツールを使用している場合は、DNS 設定が上書きされる可能性があるため、新しい DNS が実際に使用されているかどうかを再確認してください。

まとめ

netplanファイルやsystemdで解決されたconfをいじるのは少し難解に思えるかもしれませんが、一度設定してしまえば実はかなり信頼できます。再起動やネットワークのリセット後もDNSのカスタマイズが失われることはありません。少し手間はかかりますが、毎回GUIで設定し直すよりはずっと楽です。

まとめ

  • システム全体に永続的な設定が必要な場合は、/etc/netplan/*.yaml を編集して DNS を追加します。
  • または、/etc/systemd/resolved.conf を微調整し、systemd-resolved を再起動して、よりクリーンでシステム管理された修正を行う。
  • 適用する前に必ずインターフェース名を再確認し、設定が正しいことを確認してください。
  • すぐに効果が現れない場合は、DNSキャッシュをフラッシュしてネットワークを再起動してください。

これが役に立つことを祈る