同時に複数のネットワークに接続することがよくあります。これらの各ネットワークは、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」と考えるためです)
NetworkManagerには、組み込みのローカルdnsmasqサーバーを管理する機能があります。これを行うためにresolvconf/openresolvを使用する必要はありません。
これを有効にするには:
dns=dnsmasq
から/etc/NetworkManager/NetworkManager.conf
。これを完了すると、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
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の設定を変更してサービスを再起動するまで、これを実行するのを待つ必要があります。
NetworkManagerが単に/etc/resolv.conf
を上書きし、openresolvを使用していないようです。 FS#24635 によると、NetworkManagerはopenreslovをサポートしていますが、最初はビルドで有効化されていませんでした。実行しているArch Linuxのバージョンとnetworkmanagerパッケージのバージョンは何ですか?