私はLubuntu 17.04を使用していますが、新しいネットワークに接続すると、NetworkManagerサービス(サブシステム?)はいくつかの設定作業を行います。その1つは、/etc/resolv.conf
ファイルを次のように(再)設定することです。
# Generated by NetworkManager
search some-local-domain-here
nameserver 127.0.1.1
少なくともそれがDHCPを使用するときに得ることです。 localhostを受け取るインスタンスがありますdnsmasq
(詳細は以下を参照)。
これで、一部のネットワークでは非常に一貫してこの名前を解決できなくなりますが、その行をnameserver
DHCPリース()から/var/lib/NetworkManager/dhclient-blah-blah.wlan0.lease
取得した実際のネームサーバーアドレスに置き換えると、検証は正常に機能します。
質問:
- この問題の原因は何ですか?
- NetworkManagerで設定されたdnsmasqが実際に名前解決要求をDHCP提供のDNSサーバーに転送するにはどうすればよいですか? (参考にしてください。時々すでに行われています - この質問が発生していない場合)
追加情報:
ローカルDNSサーバーはインスタンスであり、dnsmasq
コマンドラインは次のとおりです。
/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --clear-on-reload --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
構成ディレクトリには、次/etc/NetworkManager/dnsmasq.d
の内容のファイルがあります。
# Tell any system-wide dnsmasq instance to make sure to bind to interfaces
# instead of listening on 0.0.0.0
# WARNING: changes to this file will get lost if network-manager is removed.
bind-interfaces
答え1
ほとんどの最新のDebian関連のディストリビューションは、このツールを直接編集するのではなく、設定/sbin/resolvconf
に使用する傾向があります。/etc/resolv.conf
このツールは、各インターフェイスで受信したDNSサーバー情報を追跡し、ファイルで指定された順序に従ってDNSサーバー設定の優先順位を指定します/etc/resolvconf/interface-order
。
これにより、Wi-Fi をオンにしたときに DNS サーバーを設定したセット、ネットワークケーブルを接続するときに別のセット、VPN 接続を開始したときに 3 番目のセットを取得できます。構成を混同せずに - 厳しく逆順です。また、この場合、dnsmasq
実際の制御のために戦う2つの異なるメカニズム(NetworkManagerなど)があります/etc/resolv.conf
。
しかし、resolvconf
オプションのパッケージです。/sbin/resolvconf
システムに存在しない場合は、/etc/resolv.conf
NetworkManagerの直接制御を受けることができます。ただし、dnsmasq
パッケージ内のほとんどのスクリプトは存在すると仮定して作成されたようです/sbin/resolvconf
。したがって、スクリプトがないと、すべての状況を適切に処理できない可能性があるフォールバックに依存します。または同様の方法でインストールを試み、インストールapt-get install resolvconf
後にDNS設定がどのように機能するかを確認できます。
このパッケージがインストールされていない場合、resolvconf
NetworkManagerはすべての操作を独自に実行するようです。この場合、トラブルシューティングを行うには、NetworkManagerのソースコードを読み、実際に使用するDNS設定を決定する方法を理解する必要があります。resolvconf
あまり不透明です。
(L)Ubuntu Zesty(17.04)から起動した後、dnsmasq
起動スクリプトは次のコマンドを実行します(resolvconf
パッケージがインストールされていると仮定)。
echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.dnsmasq
これは/sbin/resolvconf
、インターフェイスで新しいDNSネームサーバーを使用できlo
、実際のネームサーバーが更新されることを示します/etc/resolv.conf
。
/etc/resolv.conf
このアップデートが発生した場合/sbin/resolvconf
に実行されるタスクの1つは、その時点で既知のすべての非ローカルDNSサーバーのリストを取得してそのサーバーにプッシュする必要があること/etc/resolvconf/update.d
です。これは明らかに使用する必要があるDNSサーバーのリストです。/etc/resolvconf/update.d/dnsmasq
resolvconf
/run/dnsmasq/resolv.conf
dnsmasq
1秒ごとにdnsmasq
変更時間を確認し、設定を/run/dnsmasq/resolv.conf
更新する必要があります。
ただし、dnsmasqコマンドラインは、デフォルト設定を一部変更した可能性があることを示します。 dnsmasqオプションを...--no-resolv
に置き換える--resolv-file=/run/dnsmasq/resolv.conf
か、NetworkManagerまたはresolv.conf関連のカスタム設定がデフォルトのように見えるため、削除することもできます。設定設定は、適切な方法でNetworkManagerと統合するようにdnsmasq
設計されています。resolvconf
このツールを使用している場合は、resolvconf
さまざまなソースから提供されているディレクトリにDNSサーバー設定を見つけることができます/run/resolvconf/interface/
。各ファイルの内容は実際のファイルと似ています/etc/resolv.conf
。ファイル名は、特定のネットワークインターフェイスの静的設定、DHCP設定、一般的なNetworkManager、ローカルDNSサーバーの起動スクリプトなど、DNSサーバー情報のソースを参照します。
以前は、コマンドラインがインストールされdnsmasq
ている場合は起動時に実行されると述べました。/sbin/resolvconf
この操作を一時的にキャンセルするには(dnsmasq
ローカルをバイパスしたときにDNSが正常に動作するかどうかをテストするために)、次のコマンドを使用します。
resolvconf -d lo.dnsmasq
これにより、最も優先順位の高いアクティブネットワークインターフェイスのDNS設定が実際になります/etc/resolv.conf
。
dnsmasq
起動スクリプトがアクティブなDNS設定を「nameserver 127.0.0.1」行に置き換えることを停止したい場合は、(トラブルシューティングやその他の理由で)これを追加すると効果がありますDNSMASQ_EXCEPT=lo
。/etc/default/dnsmasq
resolvconf
ただし、ネームサーバーラインの値は127.0.1.1なので、NetworkManagerによって直接作成された可能性があり、範囲外の場合はそれを修正する方法がわかりません。