networkmanagerにopenresolv + dnsmasqでドメイン固有のネームサーバーを設定する方法


11

同時に複数のネットワークに接続することがよくあります。これらの各ネットワークは、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の解決は機能しません。

この記事に触発されて、私は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」と考えるためです)


2
Google "resolvconf"で、引用符で検索します。Googleでは、必ず適切な名前を引用符で囲んでください。
Gilles「SO-邪悪なことをやめなさい」

回答:


14

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

本当にいい、ありがとう!非常に簡単で簡単な解決策ですが、残念ながらあまり知られていません
akostadinov

これは、ローカル接続を1つまたは2つのVPNと組み合わせるときに機能するようです。2つのローカル接続では機能しないようです。現在、イーサネット経由でオフィスネットワークに接続していますが、残念ながらアップストリームのインターネット接続が失敗しました。また、機能しているインターネットにUSBイーサネット(私の電話)で接続しています。NetworkManagerでドメイン名をオフィスのDNSサーバーに適用できません。
Oskar Berggren 2014

@OskarBerggren:オフィスのイーサネットの[IPv4]タブで、[この接続をネットワーク上のリソースにのみ使用する]にチェックマークを付けます。
Gary van der Merwe、2014

@GaryvanderMerweそれはまさに私が試したもので、書くのを忘れていました。関連するバグ/機能のリクエストがあるようです:bugzilla.gnome.org/show_bug.cgi
Oskar Berggren

FYI使用するためのオプションがありませんuboundので、また、DNSSECが働いている、参照fedoraproject.org/wiki/Networking/NameResolution/DNSSEC
akostadinov

0

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


networkmanager 0.9.4.0-6 NetworkManagerがresolveconfを呼び出しており、/ etc / resolev.confに書き込みを行っていません。問題は、NetworkManagerがDNS情報をマージし、それをresolveconfに、個別のインターフェースの情報としてではなく、1つのインターフェースとして渡すことです。
Gary van der Merwe

0

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の設定を変更してサービスを再起動するまで、これを実行するのを待つ必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.