web-dev-qa-db-ja.com

NetworkManagerでdnsmasqを使用する

NetworkManagerがdnsmasqでうまく機能しないことはよく知られています(参照: here )。私は長い ここでの議論 をすくい取りましたが、状況に対処するための推奨される方法が何かはまだわかりません。

私がしたいことは、dnsmasqを使用してローカルネットワークにDNSとDHCPを提供することだけです。この場合、推奨される方法は何ですか?

bug が修正されたと主張されていても、問題はUbuntu 14.04でも残っているようです。

回避策として、次の理由により、人々はNM奴隷dnsmasq-baseを無効にしています。

NMでスレーブ化されたdnsmasqは、ハードコードされたオプション(C)を使用して、非常に制限された機能を提供します。

  • EthX(--listen-address=127.0.0.1)をリッスンしません。そのため、ローカルネットワークPCのDNSサーバーとしてサーバーを使用することはできません。つまり、LANにはまったく役に立ちません。
  • リクエストはキャッシュしません(--cache-size=0)。キャッシングなし==> DNSクエリのスピードアップなし。多くの同時ユーザーがいるため、これもLANにとって非常に重要です。
  • 最後に、dnsmasqのDHCPおよびTFTP機能も必要であるため、NM + dnsmasqに実際のDNSサーバーが含まれている場合でも、別のdnsmasqを実行する必要があります。

しかし、それでも問題が解決しないかどうか、また修正によって問題がどのように解決されるかはわかりません。さらに、彼らが何をし、どのように彼らが問題を解決するために何をしたかを正確に明確にするものはありません。つまり、ソリューション部分が 長い議論 にありません。誰かが空白を埋めてくれますか?つまり、

Ubuntuから提供されたdnsmasqは、上記の理由により、サーバー側では機能しません。また、クライアント側では、 "これらのUbuntuラップトップにインストールされているdnsmasqは私のDNSサーバーからLAN DNSクエリを実行できません"。なぜなら、 "( Ubuntuラップトップ ')NetworkManagerにより、奇妙な127.0.1.1ネームサーバー設定が発生します "(参照: LANまたはローカルホームネットワークのDNSソリューション

DNSとDHCP(およびTFTP)をサーバーとクライアントの両方のローカルネットワークに提供するために、dnsmasqをNetworkManagerとスムーズに連携させるにはどうすればよいですか?

TL'dr

答えを求めている人のために。以下のすべての回答のうち、最も単純な解決策は@bradのサーバー側です(クライアント側にはまだ適切な回答はありません)。

この問題の唯一の解決策は、NMドライブのdnsmasq ...を無効にし、「標準」のdnsmasqをインストールして、標準の/etc/dnsmasq.conf構成ファイルを使用して構成することです。

15
xpt

私もあなたの問題を抱えています。

原則として、 wiki.archlinux の後、キャッシュを有効にするには、単純に/etc/NetworkManager/dnsmasq.d/cacheを含むファイルを作成するだけで十分です。

$ cat /etc/NetworkManager/dnsmasq.d/cache 
cache-size=1000

私はこれを試しましたが、NM=再起動後、まだキャッシュがありません:

# ps ax | grep dns
11724 ?        S      0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

引用されたconfファイルは常に空であることに注意してください。この手順を使用してオプションを構成することはできません。

全体として、14.04のNMスレーブのdnsmask(dnsmasq-baseパッケージによって提供される)は完全にロックされているため、キャッシングを有効にしたり、その他(dhcp、tftp)を有効にしたりすることはできません。

これが正しい場合、あなたが言うように、問題の唯一の解決策は、行をコメント化してNM-drive dnsmasqを無効にすることです

dns=dnsmasq

ファイル/etc/NetworkManager/NetworkManager.confに「標準」dnsmasqをインストールし、標準の/etc/dnsmasq.conf構成ファイルを使用して構成します。

3
brad

/etc/NetworkManager/dnsmasq.d/*.confに設定することで、設定を上書きできます。構成ファイルの設定は、コマンドラインフラグよりも優先されます。これらは、NetworkManagerがdnsmasqを開始するときに適用されます。 Sudo service network-manager restartを実行して再申請してください。 (疑問がある場合:ブラッドの答えはps ax | grep dns--conf-dir引数を示すという事実を逃しました)

例えば:

echo cache-size=1000 |Sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

覚えていますが、NetworkManagerはキャッシュポイズニングの懸念があるため、デフォルトでdnsmasqキャッシングを無効にします。すべてのユーザーが信頼されているマシンの場合、これは問題ではない可能性があります。

NetworkManagerはresolvconfと統合されておらず、resolvconfパッケージがインストールされている場合、127.0.1.1にあるNMのサーバーはローカルで使用されません。 resolvconfはubuntu-minimalおよび標準のDebianインストールの一部です。 NetworkManagerは、より統合された、スクリプトベースではない方法でその機能を再実装します。

NetworkManagerは、グローバルdnsmasqインスタンス(セカンダリループバックIPへのバインドとbind-interfacesから/etc/dnsmasq.d/network-managerの設定)に干渉しないことを確認します。グローバルdnsmasqインスタンスをインストールしてNMのインスタンスを保持する場合は、/etc/resolv.confを再確認して、ホストがデフォルトで使用するインスタンスを確認してください。

上記のようにNetworkManagerのdnsmasqインスタンスをカスタマイズできますが、パブリックインターフェースにバインドするDNSサーバーが必要な場合は、dnsmasqパッケージをインストールする必要があります(NetworkManagerはdnsmasq-baseのみを使用します。グローバルインスタンス)と設定を/etc/dnsmasq.d/*.confに配置します。 NetworkManagerのスレーブインスタンスは、ループバックインターフェースにバインドすることのみを目的としており、そのスコープを超えて構成すると、破壊されるリスクがあります。


要約すると、ローカルDNSキャッシングだけを必要とする人のために:

Sudo apt-get remove dnsmasq resolvconf dhcpcd5 rdnssd
echo cache-size=1000 |Sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

単純なLANでは、NetworkManagerの接続共有で十分です。しかし、TFTPなどを使用したカスタム構成のLANの場合:

Sudo apt-get install resolvconf dnsmasq
echo 192.168.0.50,192.168.0.150,12h |Sudo tee -a /etc/dnsmasq.d/lan.conf
echo enable-tftp |Sudo tee -a /etc/dnsmasq.d/lan.conf
Sudo service dnsmasq restart
6
Tobu

私のソリューションはNetwork Managerを壊し、物事を行うためのすべてのシンプルな方法を維持する可能性があります。 NMがdnsmasqを処理する方法が壊れているので、以下の方法でオーバーライドします。

この問題の回避策は、単に次のことを行うことでした。

Sudo apt install dnsmasq
cp /etc/dnsmasq.conf ~/

~/dnsmasq.confファイルをユーザーディレクトリに保存します。

Sudo rm -v /etc/dnsmasq.conf
Sudo cp -v ~/dnsmasq.conf /etc/
Sudo chattr +i /etc/dnsmasq.conf
Sudo systemctl restart dnsmasq.service

簡単なbashエイリアスを作成し、それを〜/ .bash_aliasesファイルの下部に配置して、dnsmasq.confファイルを簡単に編集できるようにしました。エイリアスは次のとおりです。

alias="Sudo chattr -i /etc/dnsmasq.conf && Sudo nano -w /etc/dnsmasq.conf && Sudo chattr +i /etc/dnsmasq.conf && Sudo systemctl restart dnsmasq.service"

もちろん、エイリアスの2番目のSudoコマンドには、好みに合わせて任意のエディターを選択できますが、私は皆のためにnanoを使用しました。ファイルを保存し、コマンドターミナルのタブ/ウィンドウを閉じて再度開きます。これにより、新しく開いたターミナルタブ/ウィンドウでエイリアスを使用できるようになります。

ユーザーアカウントからeddmcを実行するだけで、昇格されたコマンドを実行するためのパスワードが要求されます。

常にchattr +i ファイル。これは、Network Managerが独自の構成で上書きしないようにするためです。

有線イーサネット接続では問題はありません。ワイヤレスのラップトップのdnsキャッシングにdnsmasqを使用しているので、アクセスポイントに接続した後、dnsmasq.serviceを手動で再起動する必要があることがわかりました。 Network Managerは接続時のサービスの再起動などのタスクを実行できると思いますが、まだ詳しくは調べていません。

0
jpyper

特定のMACを特定のIPアドレスに割り当てたいので、安定させるために、デフォルトのNetwork Manager/dnsmasqをできる限り使用します。

https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c には、設定を無視するための--conf-fileの使用に関するコメントがありますが、後でファイルに

/* dnsmasq exits if the conf dir is not present */
    if (g_file_test (CONFDIR, G_FILE_TEST_IS_DIR))
        nm_cmd_line_add_string (cmd, "--conf-dir=" CONFDIR);

Ubuntu 16.04 LTSで、Wi-Fiホットスポットを設定して別の接続を共有した後、ps auxgww | grep dnsmasqは、各dnsmasqプロセスの最後のコマンドライン引数が次のとおりであることを示しています。

--conf-dir=/etc/NetworkManager/dnsmasq-shared.d

したがって、Network Managerによって開始されるdnsmasqのすべての呼び出しの間で共有される構成ファイルをそのディレクトリーに作成することが可能です。

/etc/NetworkManager/dnsmasq-shared.d/Hueを作成しました

dhcp-Host=0c:4d:e9:a0:ce:cf,192.168.1.221

実行中ですが再起動しました

Sudo service network-manager restart

うまくいったでしょう。

これにより、デバイスが適切なIPアドレスを取得するようになりました。

はい、これは間違っています。これは、NetworkManagerによるdnsmasqのすべての呼び出しがこの宣言を取得することを意味しますが、この場合、問題のネットワークにMACが表示される場合にのみ問題になるため、問題はありません。ネットワークが192.168.1ではない場合、問題が発生します。

これは、/-usr/sbin/dnsmasqを https://Gist.github.com/magnetikonline/623615 で提案されているスクリプトで置き換えるよりも堅牢です。

正しい解決策は、dnsmasq構成ファイルを適切に使用するためにdnsmasqを呼び出す方法を変更することです。 Network Managerを「そのまま動作させる」という欲求は理解していますが、ツールをばかばかしくするということは、ばか者だけがそれらを使用できることを意味します。

0

ここと反対の主張にもかかわらず、NetworkManagerは、すべてのdmsmasq構成ファイルを無視します-独自のディレクトリにあるものも含めて/etc/NetworkManager/dnsmasq-shared.d。証明はNetworkManagerのソースコードにあります...関連するコメントは次のとおりです。

/ * dnsmasqはデフォルトの設定ファイルの場所から読み取る可能性があり、その場所が有効な設定ファイルである場合、ここでのオプションと組み合わせて望ましくない副作用を引き起こします。偽のIPアドレスをゲートウェイとして送信するようなものです。そのため、構成ファイルをまったく使用しないようにdnsmasqに指示します。 * /

ここ は関連するソースコードへのリンクです(行139〜144)。

0
bsalnick