web-dev-qa-db-ja.com

openresolv + dnsmasqを使用してnetworkmanagerでドメイン固有のネームサーバーを構成する方法

同時に複数のネットワークに接続することがよくあります。これらの各ネットワークは、dhcpを介してネームサーバー構成を提供します。例えば。ネットワーク1:(eth0):

domain company1.corp #
nameserver 192.168.0.253
nameserver 192.168.0.254

ネットワーク2(tun0):

domain company2.corp #
nameserver 10.102.204.51
nameserver 10.102.208.51

#名前が変更されました

両方のネットワークに同時に接続した場合:

# resolv.conf from NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

最初のネームサーバーはcompany1.corpの名前しか認識しないため、service.company2.corpの解決は機能しません。

これに触発されて article を設定しました openresolv (resolvconfの実装)を設定して、Arch Linuxインストールでローカルのdnsmasqサービスを構成します。

Resolvconfを使用してネームサーバーを手動で構成する場合:

# resolvconf -d NetworkManager
# echo "domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
" | resolvconf -a eth0
# echo "domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51
" | resolvconf -a tun0

次に、company1.corpとcompany2.corpの両方から名前を解決できます(ローカルのdnsmasqサーバーがこれを処理します)。

手動構成の後、resolveconf -lは2つの構成を個別に表示することに注意してください。

~ # resolvconf -l
# resolv.conf from tun0
domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51

# resolv.conf from eth0
domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254

ただし、ネットワークマネージャーが構成を行う場合、ネットワークマネージャーが/etc/resolve.confに書き込みを行っている場合のように、2つの構成は分離されません。

~ # resolvconf -l
# resolv.conf from NetworkManager
# Generated by NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

私の質問は、ネットワークマネージャーにresolveconfを正しく呼び出させて、各インターフェイスのネームサーバーを個別に登録する方法を教えてください。 (残念ながら、グーグルで検索しても役に立たないのは、Googleが「resolveconf」==「resolve.conf」と考えるためです)

11

NetworkManagerには、組み込みのローカルdnsmasqサーバーを管理する機能があります。これを行うためにresolvconf/openresolvを使用する必要はありません。

これを有効にするには:

  • Resolvconf/openresolv dnsmasq構成が以前に有効になっていた場合は、それを無効にし、実行中のdnsmasqのインスタンスがないことを確認します。
  • Dnsmasqがインストールされていることを確認します
  • 追加 dns=dnsmasqから/etc/NetworkManager/NetworkManager.conf
  • NetworkManagerを再起動します

これを完了すると、NetworkManagerがdnsmasqプロセスを開始したことがわかります。

$ pgrep dnsmasq -fl
1697 /usr/bin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/nm-dns-dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=400 --proxy-dnssec

/etc/resolve.confはローカルのdnsmasqインスタンスを指している必要があります。

$ cat /etc/resolv.conf
# Generated by NetworkManager
domain company1.corp
search company1.corp
nameserver 127.0.0.1

dnsmasqが使用しているサーバーを確認できます。

# cat /var/run/nm-dns-dnsmasq.conf 
server=/company2.corp/10.102.208.51
server=/10.in-addr.arpa/10.102.208.51
server=192.168.1.244
server=192.168.1.239
14

Gary van der Merweが答えたようにしてください。

/etc/NetworkManager/NetworkManager.conf

追加しなければならなかった

[main]
dns=dnsmasq

ファイルに。だけでなく

dns=dnsmasq

これは、そのファイルのすべての設定がセクションの下にある必要があるためです。また、私のディストリビューションのmanjaro(archlinux)バージョンのNetworkManagerパッケージには、構成ファイルが設定されていません。 (私は彼の提案されたラインが彼のために働いたので、ゲイリーのディストリビューションが他の人のために働いていると思います)

別のメモ、dnsmasq構成は、この中の構成ファイルに入れる必要があります

/etc/NetworkManager/dnsmasq.d/

ディレクトリ。マシン上の別のディレクトリである可能性があります。 NetworkManagerがdnsmasqデーモンを起動するために使用する行を見て、使用されているディレクトリを知りました。 ps aux|grep dnsmasqを実行すると、この行を確認できます。 NetworkManagerの設定を変更してサービスを再起動するまで、これを実行するのを待つ必要があります。

0
SultanLegend

NetworkManagerが単に/etc/resolv.confを上書きし、openresolvを使用していないようです。 FS#24635 によると、NetworkManagerはopenreslovをサポートしていますが、最初はビルドで有効化されていませんでした。実行しているArch Linuxのバージョンとnetworkmanagerパッケージのバージョンは何ですか?

0
mgorven