openresolv + dnsmasqを使用してネットワーク管理者にドメイン固有のネームサーバーを設定する方法

openresolv + dnsmasqを使用してネットワーク管理者にドメイン固有のネームサーバーを設定する方法

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

# 名前が変更されました

同時に2つのネットワークに接続する場合:

# 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検証は機能しません。

これに触発されて記事、私が設定しました公開分析(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サーバーはそれを処理します)。

手動設定後、verifyconf -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」と考えているため、Googleは役に立ちません)

答え1

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

この機能を有効にするには:

  • resolvconf / openresolv dnsmasq構成が以前に有効になっている場合は、それを無効にして、実行中のdnsmasqインスタンスがないことを確認してください。
  • dnsmasqがインストールされていることを確認してください
  • に追加してください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

答え2

Gary van der Merweの回答に従ってください。

/etc/NetworkManager/NetworkManager.conf

追加する必要があります

[main]
dns=dnsmasq

ファイルとして。だけでなく

dns=dnsmasq

これは、ファイルのすべての設定が1つのセクションの下にある必要があり、私のディストリビューションのNetworkManagerパッケージのmanjaro(archlinux)バージョンが設定ファイルを埋めないためです。 (私は彼が提案した行が彼と他の人に効果があったので、これが実際にGaryのディストリビューションの場合であると仮定します。)

さらに、すべてのdnsmasq構成はこの構成ファイルに入力する必要があります。

/etc/NetworkManager/dnsmasq.d/

目次。コンピュータの他のディレクトリにすることもできます。 NetworkManagerがdnsmasqデーモンを起動するために使用する行を見て、どのディレクトリが使用されたかを調べました。を実行すると、この行が表示されますps aux|grep dnsmasq。このコマンドを実行する前に、NetworkManagerの設定を変更してサービスを再起動するのを待つ必要があります。

答え3

/etc/resolv.confOpenresolvを使用する代わりにNetworkManagerがオーバーライドされているようです。 ~によるとFS#24635、NetworkManagerはopenreslovをサポートしますが、ビルドでは最初はアクティブになりません。どのバージョンのArch Linuxを実行していますか?ネットワーク管理者パッケージのバージョンは何ですか?

関連情報