NetworkManagerでdnsmasqを使用する


15

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

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

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

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

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を実行する必要があります。

しかし、それらがまだ当てはまるかどうか、および/または修正によって問題がどのように解決されたかはわかりません。さらに、彼らが何をしたのか、彼らが問題を解決するためにどのようにしたのかを明確に明確にしたものはありません。すなわち、ソリューションの部分は長い議論から欠落しています。誰かが空欄に記入できますか?すなわち、

dnsmasqUbuntuのでアウトオブボックスの提供上記の理由により、サーバー側では、機能していません。そしてまた、クライアント側では、「これらのUbuntuのラップトップにインストールdnsmasqのは、私のDNSサーバからLANのDNSクエリを実行することはできません」ので、「(Ubuntuのラップトップは、)NetworkManagerは奇妙な127.0.1.1ネームサーバの設定を持っているためにそれらを引き起こしています」( ref:LANまたはローカルホームネットワーク用のDNSソリューション

DNSとDHCP(およびTFTP)をサーバーとクライアント側の両方でローカルネットワークに提供するために、dnsmasqをNetworkManagerとスムーズに動作させる方法は?

TL'dr

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

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


2
Google社員のみ(私のような):ubuntuの新しいバージョンでは、NetworkManager内のdnsmasq-coreはやや使いやすいです。こちらをご覧ください:askubuntu.com/questions/233195/…–
A.

回答:


3

あなたの問題もあります。

原則として、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ドライブのdnsmasqを無効にすることだと思います

dns=dnsmasq

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


スーパーユーザーbradへようこそ!ご協力いただきありがとうございます!
xpt 14

1
で実行しているので、実際にこれは、キャッシュを有効にし--conf-dir=/etc/NetworkManager/dnsmasq.dcache-size作成したファイルで指定が使用されています。あなたは使用して違いを見ることができますdig
sirfz

6

に設定することで設定を上書きすることができます/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、およびNMのサーバーと統合されません127.0.1.1はと、resolvconfパッケージがインストールされている場合、ローカルで使用されません。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

ありがとう。あなたの「要約で」コマンドが何より完全に説明する必要がありますが、つまりあなたが現在それらを持っている場合、命令はまた、4つのパッケージを削除する より多くのリンクとの議論 reddit.com/r/Ubuntu/comments/2j0va4/...
nealmcb

@nealmcbに非常に同意します、Tobu、「ローカルDNSキャッシングだけが必要な人のためになぜパッケージを削除する必要があるの説明してくださいdnsmasq。次のechoコマンドは何のためですか?dnsmasqがなくなるので。
xpt

@xpt Tobuはを削除することを提案してdnsmasqいますがdnsmasq-base、NMが原因でまだインストールされているはずです。
タリスKalfigkopoulos

0

特定の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でない場合、問題が発生します。

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

適切な解決策は、dnsmasq構成ファイルを適切に使用するためにdnsmasqの起動方法を変更することです。Network Managerを「正常に動作させたい」という願望を理解していますが、ツールをバカにしないようにすると、バカだけがそれらを使用できるようになります。


クリストファーの答えをありがとう、しかし、私は本当に従うことはできません... 「私は特定のMACを特定のIPアドレスに割り当て、安定性のためにしたかった」 ... 「ps auxgww | grep dnsmasqは最後のコマンドライン引数それぞれのdnsmasqプロセスの」 ... 『私が作成し... 働いているだろう ... 『はい、これは間違っている』 ...すなわち、私は本当に思考のあなたの列車を追跡することはできません、ここであなたが言おうとしていることを理解するために。
xpt

0

私のソリューションは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

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

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

関連するソースコードへのリンクを次に示します(139〜144行目)。


2
可能であれば、読者がこれを検証して関連するコードを読むことができるように、ソースコードを指すリンクが役立ちます。
ジェームズ

1
そのため、明示的な構成ファイルを指定することはできません。--conf-fileは/ dev / nullにハードコードされています。ただし、NetworkManagerを介してdnsmasqを起動するために使用される完全なコマンドラインを見ると、conf-dirが使用されていることがわかります。 '/ usr / sbin / dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file = / var / run / NetworkManager / dnsmasq.pid --listen-address = 127.0.0.1 --cache-size = 400 --clear-on-reload --conf-file = / dev / null --proxy-dnssec --enable-dbus = org.freedesktop.NetworkManager.dnsmasq --conf-dir = / etc / NetworkManager / dnsmasq.d '、つまり指定されたディレクトリ内のすべてのファイルが読み取られることを意味します。
ハーディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.