systemd-resolved
トラブルシューティングに使用しているDNSサーバーを見つける方法は?
dig
通常、に示されているDNSサーバーを使用してテストできます/etc/resolv.conf
。 (またはWindows - ipconfig /all
+ nslookup
)。ただし、resolv.confがループバックアドレスのローカルリゾルバデーモンのみを指している場合、この方法は機能しません。使用しているDNSサーバーを表示するためにsystemd-resolvedでどのような方法が使用されますか?
(unbound
私が見ることができる設定ファイルがあり dnsmasq
ますが、設定ファイルなしでサーバーを動的に追加できるかどうかはわかりません。NetworkManagerにもそのファイルがあり、インターフェイスのDNS設定を表示するようにnmcli
クエリできます。nmcli d show wlan0
)
答え1
また、トラブルシューティングにも非常に便利です。
journalctl -u systemd-resolved -f
systemd-resolved
そこで実際に何が起こっているのかを見ることができます。私の場合、systemd-resolve --status
報告されたDNSサーバーにまったくアクセスしませんでした。そのような奇妙なことをしている場合は、時には再起動することをお勧めしますsudo systemctl restart systemd-resolved
。
編集する:
より多くの情報を得るためにresolved
必要
[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
経由でoverride.conf
入力systemd-resolved
sudo systemctl edit systemd-resolved
再起動が適用されます。
sudo systemctl restart systemd-resolved
編集2:
@bmaupinと@Aminovicがコメントで指摘したように、後でこれを元に戻すことを忘れないでください。
sudo systemctl revert systemd-resolved
sudo systemctl restart systemd-resolved
答え2
使用済みresolvectl status
(systemd-resolve --status
これより前に使用された場合239)あなたの姿を見せるためにグローバルおよびリンクごとのDNS設定。
答え3
resolv.conf
書類
このマニュアルには次のように記載されています。
リゾルバは、インターネット上のドメインネームシステム(DNS)へのアクセスを提供するCライブラリの一連のルーチンです。パーサー構成ファイルには、プロセスがパーサールーチンを初めて呼び出すときに読み取る情報が含まれています。
ファイルが存在しない場合は、ローカルシステムのネームサーバーのみが照会され、検索リストにはホスト名で決定されたローカルドメイン名が含まれます。
systemd-resolved
Ubuntu 20.04にはsystemd-resolved
ローカルDNSサーバーが含まれています。systemd
/etc/resolv.conf
これは、編集に自動的に正しい設定を使用する必要があるスタブリゾルバとして機能します。
以前のバージョンでは、以下を使用して手動でシンボリックリンクする必要があります。
$ sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
デフォルトでは、systemd-resolved
ローカルDNSサーバーのリスニング127.0.0.53
ポートが設定されており、53
それを実行lsof -i @127.0.0.53:53
して確認できます。dnsmasq
同じアドレスとポートでリッスンする他のサービスがないことを確認してください。
これはループバックインターフェイスですが、ループバック127.0.0.53
インターフェイスの他のIPアドレスからポート53をリッスンする別のDNSサーバーを持つことができます127.0.0.1
。127.0.0.2
それでも問題が解決しない場合は、以下を試してください。
$ sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
このファイルには DHCP リースの DNS サーバーが含まれていますが、スタブリゾルバーのキャッシュ機能の利点はありません。
dnsmasq
そしてNetworkManager
これdnsmasq
軽量キャッシュ DNS サーバーは DNS クエリを受け入れ、小規模なローカル キャッシュから応答するか、実際の再帰 DNS サーバーに転送します。
Web開発マシンには、ローカルWebサイトをテストできる小さなDNSサービスをお勧めします。
まず、NetworkManager
現在のインターフェイスの管理を確認します(wlp0s20f3
私の場合)。
$ nmcli dev
$ nmcli dev set wlp0s20f3 managed yes
これでNetworkManager
組み込みdnsmasq
パーサーを有効にできます。
$ cat /etc/NetworkManager/NetworkManager.conf
[main]
dns=dnsmasq
NetworkManager
dnsmasq
これで、次の設定で柔軟性の利点を享受できます/etc/NetworkManager/dnsmasq.d
。
$ cat /etc/NetworkManager/dnsmasq.d/custom.conf
# Resolve all domains ending in .dev to 127.0.0.1
address=/.dev/127.0.0.1
dnsmasq
システム全体のサービス(存在する場合)を無効にし、変更を適用することを忘れないでください。
$ sudo systemctl stop dnsmasq.service && sudo systemctl disable dnsmasq.service
$ sudo systemctl restart NetworkManager.service
dnsmasq
何らかの理由で単独で実行する前に、NetworkManager
上書きを避ける必要があります/etc/resolv.conf
。
$ cat /etc/NetworkManager/NetworkManager.conf
[main]
dns=none
dnsmasq
これで、アップストリームサーバーに他の場所からインポートするように指示する必要があります/etc/resolv.conf
。
$ cat /etc/dnsmasq.conf
listen-address=127.0.0.53
resolv-file=/run/NetworkManager/resolv.conf
このファイルは DHCP リースで生成され、NetworkManager
DNS サーバーも含まれます。これでdnsmasq
ソリューションを設定します。
$ cat /etc/resolv.conf
# Use local dnsmasq resolver
nameserver 127.0.0.53
独自のローカルDNS設定を構成します。
$ cat /etc/dnsmasq.d/custom.conf
# Resolve all domains ending in .dev to 127.0.0.1
address=/.dev/127.0.0.1
新しい設定を適用します。
$ sudo systemctl stop systemd-resolved.service && sudo systemctl disable systemd-resolved.service
$ sudo systemctl restart dnsmasq.service
dnsmasq
そしてsystemd-networkd
残念ながら、DHCPサーバーによって管理されているため、DHCPサーバーから取得したDNSネームサーバーファイルを公開しないため、NetworkManager
使用は簡単ではありません。systemd-networkd
systemd-resolved
完全に使用されていないパッケージを使用しても同様ですifupdown
。
開いている:man
dhclient-script
$ man 8 dhclient-script
これつながる部分的には次のように言います。
クライアントスクリプトが起動されると、最初に後で
make_resolv_conf
ファイル/etc/resolv.conf
を生成するために使用されるシェル関数を定義します。デフォルトの動作をオーバーライドするには、Enter フックスクリプトでこの関数をオーバーライドします。
dnsmasq
したがって、まだ一緒に使用するには、DHCP設定からアップストリームサーバーを取得できるようにforを作成するようにsystemd-networkd
上書きする必要があります。make_resolv_conf
resolv-file
dnsmasq
これresolvconf
パッケージは、アクションの/etc/resolv.conf
設定に使用できるPopulationに関連するさまざまなデーモンの周りにラッパーインターフェイスを提供します。make_resolv_conf
ルーター広告メッセージのRDNSSからIPv6アップストリームサーバーをインポートする必要がある場合でも、同じ問題が発生します(参照:近隣検索プロトコル)、これも管理されるからですsystemd-resolved
。
次のコマンドを試してください。ndisc6
パック:
$ rdisc6 wlp0s20f3
IPv6 アドレスプレフィックスや DNS サーバーなど、ルーターのさまざまな情報が表示されます。何も表示されない場合は、ルータがそれをサポートしていない可能性があります。
このrdisc6
プログラムは、以下を使用してユーザ空間でICMPv6ルータ検索を実装します。NETLINK_ROUTE
RDNSSソケットのサポートはLinuxカーネル2.6.24に追加されました。以前のバージョンをサポートするには、次を使用してOSIレイヤ2デバイスドライバと対話する必要があります。SOCK_RAW
ソケット。
答え4
ここへの答えのどれも私の仕事に近づいていませんでしたsystemd-resolved
。すべての問題を解決する1つの方法systemd-resolved
は、方程式から問題を取り除くことです。
まず、これを無効にします(root):
service systemd-resolved stop
systemctl disable systemd-resolved
しかし、これだけでは十分ではありません。 Systemdはそれを再度有効にし、数分後に再起動します。したがって、systemd-resolved
サーバーから完全に削除してこれを防ぐ必要があります。
rm -f /lib/systemd/systemd-resolved
私はこれを行うsystemdの他の部分で問題が発生したことはありませんが、YMMVです。削除する代わりに名前を変更できます。
最後に、/etc/resolv.conf
一部のネームサーバーを編集して追加します。
nameserver 8.8.8.8
nameserver 8.8.4.4