
新しい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-resolved
DNSスタブレゾルバーこの IP アドレスにバインドされ、ポートから着信53
DNS 要求をリッスンします。したがって、ファイル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.1
。9.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-resolved
GUIを介して各NetworkManager管理接続を単純に編集するよりも完全なUbuntu 18.04を使用するなど、システムで動的に構成されたネームサーバー設定(DHCPが提供する設定など)を完全にオーバーライドするための推奨方法はありますか?特に、私はいいえ参加したいすべてのWi-FiネットワークのDNS設定を編集したいです。みんな自動的に接続いつもDNS解決用に静的に構成されたネームサーバーを使用します。これを行うための「最も良い」方法は何ですか、その理由は何ですか?
ありがとうございます。
答え1
推奨される方法はないと思いますが、ここにいくつかのオプションがあります。
免責事項:これらのすべてはUbuntu 20.04システムでテストされており、他のバージョンでは若干の違いがある可能性があります。
手動/etc/resolv.conf
管理
自分で作る
resolv.conf
:echo 'nameserver 8.8.8.8' | sudo tee /etc/resolv-manual.conf
systemdで識別されたシンボリックリンクを削除し、自分のファイルにリンクします。
sudo rm /etc/resolv.conf sudo ln -s /etc/resolv-manual.conf /etc/resolv.conf
クエリを実行して、DNS設定が機能していることを確認します。
dig google.com
シンボリックリンクを使用することが重要ですresolv.conf
。そうしないと、NetworkManagerが上書きされます。
resolvectl status
接続用のDHCP提供のDNSサーバーは引き続き表示され、確認済みのdbusインターフェースを介して実行されたクエリは引き続き使用できます。
グローバル DNS 確認を強制
あなたはすでにこれを持っています:
- 作る
/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
- ソリューションを再起動してください。
sudo systemctl restart systemd-resolved
- 確認
resolvectl status
接続のためにISPによって提供されたDNSサーバーは引き続き表示されますが、これは出力にリストされているDNS Domain:
ドメインにのみ当てはまりますresolvectl status
。
これらのDNSサーバーを完全に削除するには:
- NetworkManagerに確認のためにDNSサーバーを設定しないように指示します。
cat <<EOF | sudo tee /etc/NetworkManager/conf.d/dns.conf [main] dns=none systemd-resolved=false
- ネットワーク管理者を再読み込みします。
sudo systemctl reload NetworkManager.service
- 解決済みはインターフェイスの最後のDNSを覚えているため、手動で上書きされます。
sudo systemd-resolve --interface=wlp3s0 --set-dns 8.8.8.8
答え2
ネームサーバー管理が容易だった時代が恋しいです。修正するだけです/etc/resolv.conf
。これは実際にはまだうまくいきますが、Ubuntuのようなディストリビューションは/etc/resolv.conf
私が作成したすべての設定を置き換えるシンボリックリンクとサービスを追加します。
systemd-resolve
Ubuntuを使用すると、VPN設定が「現在のDNSサーバー」を設定しないという問題が発生しましたnm
。私はこれをバイパスするために使用します。
sudo systemd-resolve --interface=ppp0 --set-dns=172.19.40.11
答え3
Ubuntuなので、NetworkManagerを使用しているとします。
最初の質問です。非大域 DNS が必要な場合でなければ、よく知られていて信頼性の高い DNS プロバイダーでグローバル DNS を設定するのに問題はないと思います。ここで行った変更は簡単に元に戻すことができます。
/etc/resolv.conf
に見られるように、systemd-resolvedはおそらく以前に多くのシステムで優先順位を得た可能性があります/etc/nsswitch.conf
。resolve
dns
DNS=
検証デーモンは設定されたアドレスを使用します/etc/systemd/resolved.conf
が、インターフェイス用に学習されたサーバーも使用します。平行にサーバーDNS=
オプションとして。一般に、パブリックDNS要求は失敗したり、同様の有用な結果を返すので、これは問題ではありません。
systemd-resolvedが新しいDNSサーバーを学習するのを防ぐ方法があるかどうかはわかりませんが、NetworkManagerがそれをインストールできないようにする方法があります。
~からhttps://wiki.archlinux.org/index.php/NetworkManager#Unmanagement_/etc/resolv.conf:
で/etc/NetworkManager/conf.d/dns.conf
以下を追加または変更します。
[main]
dns=none
systemd-resolved=false
さまざまなサービスが再起動された後、systemd-resolvedにはプライマリDNSサーバーが必要です。NetworkManagerはDNS設定を無視する必要があります。試してみてください。