systemd-resolvedを使用してシステムでグローバルDNSサーバーのオーバーライドを設定するための推奨される方法は何ですか?

systemd-resolvedを使用してシステムでグローバルDNSサーバーのオーバーライドを設定するための推奨される方法は何ですか?

新しいGNU / Linuxシステム(Ubuntu 18.04 LTS)が手動で設定された単一のDNSサーバーを使用したいと思います。みんなDNSクエリ。過去には、単にファイルをecho "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf破損し、/etc/resolv.confシステム全体のDNSサーバーのIPアドレスを継続的に設定することができました。

この(および多くの最新のGNU / Linuxディストリビューション)は/etc/resolv.confユーティリティで管理されていますresolvconf(8)。 Ubuntu 18.04では、ファイルには次の行が含まれています。

nameserver 127.0.0.53

sudo ss --listening --numeric --processesローカルシステムと見なすことができます。systemd-resolvedDNSスタブレゾルバーこの IP アドレスにバインドされ、ポートから着信53DNS 要求をリッスンします。したがって、ファイルnameserverの上の行は、D-Busまたはglibc APIを/etc/resolv.conf使用していないすべてのsystemd-resolvedアプリケーションをsystemd-resolved「正常な」DNS要求を介してこのサービスに接続します。

それはすべて素晴らしいですが、これが意味するのは、もはや/etc/resolv.confネームサーバーを変更するためにファイルに継続的な変更を書き込むことができないということです。

読んだ後たくさん 手動 ページそしてブログ投稿/etc/systemd/resolve.confたとえば、次の行を含むファイルを編集して、「グローバル」DNSネームサーバーのIPアドレスを設定できることを学びました。

DNS=1.1.1.1 9.9.9.9

このように変更して呼び出して実行すると、sudo systemctl restart systemd-resolvedグローバルセクションにsystemd-resolve --status新しいネームサーバー(および)が表示されます1.1.1.19.9.9.9しかし、Wiresharkパケットキャプチャにより、私のシステムはDHCPを介して設定できる「リンクごとの」DNSサーバー(たとえば192.168.1.1)にDNSクエリを送信し続けていることが確認されました。

/etc/systemd/resolve.conf追加の実験により、私のファイルに次の行を追加しました。

Domains=~.

これは正常にsystemd-resolved表示されているようです。いつもグローバルネームサーバー(DNS=オプションで設定)を使用し、いいえを確認しても、DHCPが提供するネームサーバーに問い合わせますsystemd-resolve --status

最後に、私の質問は次のとおりです。VPN などが提供する DNS 情報を無視して発生する明らかな影響に加えて、これは私のシステムにどのような潜在的な影響を与えますか?そしてもっと重要なのは、systemd-resolvedGUIを介して各NetworkManager管理接続を単純に編集するよりも完全なUbuntu 18.04を使用するなど、システムで動的に構成されたネームサーバー設定(DHCPが提供する設定など)を完全にオーバーライドするための推奨方法はありますか?特に、私はいいえ参加したいすべてのWi-FiネットワークのDNS設定を編集したいです。みんな自動的に接続いつもDNS解決用に静的に構成されたネームサーバーを使用します。これを行うための「最も良い」方法は何ですか、その理由は何ですか?

ありがとうございます。

ベストアンサー1

推奨される方法はないと思いますが、ここにいくつかのオプションがあります。

免責事項:これらのすべてはUbuntu 20.04システムでテストされており、他のバージョンでは若干の違いがある可能性があります。

手動/etc/resolv.conf管理

  1. 自分で作るresolv.conf

    echo 'nameserver 8.8.8.8' | sudo tee /etc/resolv-manual.conf
    
  2. systemdで識別されたシンボリックリンクを削除し、自分のファイルにリンクします。

    sudo rm /etc/resolv.conf
    sudo ln -s /etc/resolv-manual.conf /etc/resolv.conf
    
  3. クエリを実行して、DNS設定が機能していることを確認します。dig google.com

シンボリックリンクを使用することが重要ですresolv.conf。そうしないと、NetworkManagerが上書きされます。

resolvectl status接続用のDHCP提供のDNSサーバーは引き続き表示され、確認済みのdbusインターフェースを介して実行されたクエリは引き続き使用できます。

グローバル DNS 確認を強制

あなたはすでにこれを持っています:

  1. 作る/etc/systemd/resolved.conf.d/dns_servers.conf
    sudo mkdir -p /etc/systemd/resolved.conf.d
    cat <<EOF | sudo tee /etc/systemd/resolved.conf.d/dns_servers.conf
    [Resolve]
    DNS=192.168.35.1 fd7b:d0bd:7a6e::1
    Domains=~.
    EOF
    
  2. ソリューションを再起動してください。sudo systemctl restart systemd-resolved
  3. 確認resolvectl status

接続のためにISPによって提供されたDNSサーバーは引き続き表示されますが、これは出力にリストされているDNS Domain:ドメインにのみ当てはまりますresolvectl status

これらのDNSサーバーを完全に削除するには:

  1. NetworkManagerに確認のためにDNSサーバーを設定しないように指示します。
    cat <<EOF | sudo tee /etc/NetworkManager/conf.d/dns.conf
    [main]
    dns=none
    systemd-resolved=false
    
  2. ネットワーク管理者を再読み込みします。sudo systemctl reload NetworkManager.service
  3. 解決済みはインターフェイスの最後のDNSを覚えているため、手動で上書きされます。sudo systemd-resolve --interface=wlp3s0 --set-dns 8.8.8.8

おすすめ記事