NetworkManagerによって設定されたdnsmasqは要求を転送できません。

NetworkManagerによって設定されたdnsmasqは要求を転送できません。

私はLubuntu 17.04を使用していますが、新しいネットワークに接続すると、NetworkManagerサービス(サブシステム?)はいくつかの設定作業を行います。その1つは、/etc/resolv.confファイルを次のように(再)設定することです。

# Generated by NetworkManager
search some-local-domain-here
nameserver 127.0.1.1

少なくともそれがDHCPを使用するときに得ることです。 localhostを受け取るインスタンスがありますdnsmasq(詳細は以下を参照)。

これで、一部のネットワークでは非常に一貫してこの名前を解決できなくなりますが、その行をnameserverDHCPリース()から/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.confNetworkManagerの直接制御を受けることができます。ただし、dnsmasqパッケージ内のほとんどのスクリプトは存在すると仮定して作成されたようです/sbin/resolvconf。したがって、スクリプトがないと、すべての状況を適切に処理できない可能性があるフォールバックに依存します。または同様の方法でインストールを試み、インストールapt-get install resolvconf後にDNS設定がどのように機能するかを確認できます。

このパッケージがインストールされていない場合、resolvconfNetworkManagerはすべての操作を独自に実行するようです。この場合、トラブルシューティングを行うには、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/dnsmasqresolvconf/run/dnsmasq/resolv.confdnsmasq

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によって直接作成された可能性があり、範囲外の場合はそれを修正する方法がわかりません。

おすすめ記事