dnsmasqを追加してsystemdを解決したままにする方法(18.04)


10

dnsmasqで高速DNS解決を取得し、デフォルトのsystemd-resolvedを保持したい。

これを行うためのエレガントな方法を探しています


systemd-resolvedはDNSルックアップもキャッシュすることを知っていますか?systemd-resolvedのシステムでは、dnsmasqは必要ありません。あなたは読むべきであるが、systemdに分解便利?
Aeyoun

私は知っています-しかし、非常に重要な「詳細」があります...-巨大なDNSキャッシュとしてのdnsmasq-systemd-resolvedのDNSキャッシュは非常に小さく、調整できません-巨大なキャッシュとしてDNS解決速度が大幅に向上しますのdnsmasqがリクエストでいっぱいになりました。
cmak.fr

systemd-resolvedのデフォルトの未構成のキャッシュは、実際にはdnsmasqよりも大きくなっています。
Aeyoun

実際、dnsmasqはsystemd-resolvedよりもはるかに多くのことを行います。参照gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh ...名前に少数を
ジュリアス

@Aeyoun:systemdで解決されたソースコードを読むと、4096のDNSキャッシュ制限がエントリではなくバイトであることがわかります。dnsmasqのdnsキャッシュサイズは大きく、構成可能です。
cmak.fr

回答:


10

私はdnsmasqで高速DNS解決を取得し、将来の使用のためにデフォルトのsystemd-resolved / NetworkManagerセットアップをそのまま維持したいと考えていました。はい、dnsmasqの巨大なdnsキャッシングはブラウジング速度を向上させることができます。はい、目標は18.04のデフォルトのDNS設定を維持することでした

  1. dnmasqをインストールする
  2. 構成する(アドレスとDNSサーバーをリッスンする)
  3. 手動DNSサーバーアドレス用にNetWorkManagerを構成する
  4. チェック確認

1-sudoを使用

apt-get -y install dnsmasq

2-sudoを使用

tee -a /etc/dnsmasq.conf << ENDdm
interface=lo
bind-interfaces
listen-address=127.0.0.1
# DNS server from OpenDns. Use yours...
server=208.67.222.222
server=208.67.220.220
ENDdm

systemctl restart dnsmasq
systemctl enable dnsmasq

3-USERでNetworkManagerを構成する

# Get NM first active profile name
NetManProfile=$(nmcli -t  connection show --active | cut -f 01 -d ':')
# remove, if exists, current dns servers
nmcli con mod "$NetManProfile" ipv4.dns ""
# set 'manual' dns server
nmcli con mod "$NetManProfile" ipv4.ignore-auto-dns yes
# set dnsmasq as manually set dns server
nmcli con mod "$NetManProfile" ipv4.dns 127.0.0.1
# i also disabled ip6, do what u want
nmcli con mod "$NetManProfile" ipv6.method ignore
# reconnect to take effect
nmcli connection down "$NetManProfile"
nmcli connection up "$NetManProfile"

4-確認を確認

  • systemd-resolvedはデフォルトで127.0.0.53をリッスンします
  • dnsmasqは、/ etc / dnsmasqに設定されている127.0.0.1をリッスンします
  • systemd-resolvedはNetworkManagerから127.0.0.1を取得しました
netstat -antup
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat       PID/Program name    
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1036/dnsmasq        
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      766/systemd-resolve
cat /run/systemd/resolve/resolv.conf 
nameserver 127.0.0.1

1

私は合理的な解決策を見つけようとしましたが、さまざまなアプローチがあるようです。

私は、すべてのビジネス要件を満たしながら、ディストリビューションレイアウトの範囲内に留まることを望んでいました。これは私が集めたもので、クリーンなUbuntu 18.04とKDEネオンのフレーバーで動作するようにテストしたものです。

# Install required package and reconfigure service plans (i.e. disablesystemd-resolved, enable dnsmasq
sudo apt-get install dnsmasq
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl enable dnsmasq

# These two lines should work on most environments, but .. :-) - so I kept them commented out for less experienced users
# Just add or change 'dns=dnsmasq' to your NetworkManager.conf to the section [main]
# and yes, the sed expression can be better :-)

#sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup
#sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.backup |sed -e "s/^dns=.*//"| sed -e "s/\[main\]/\[main\]\ndns=dnsmasq/" >/etc/NetworkManager/NetworkManager.conf'

# Restart NetworkManager to make the change above applied
sudo systemctl restart NetworkManager

# This removes the systemd resolv.conf link only if it has NetworkManager replacement :-)
ls /var/run/NetworkManager/resolv.conf && sudo rm /etc/resolv.conf

# And add NetworkManager's resolv.conf available for the system resolver
sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

(上記の回答との唯一の一般的な違いは、NetworkManagerがdnsmasq DNSサーバーの割り当てを自動的に処理することです。


動作しますが、apt-get --upgrade
cmak.frを使用

正直、わかりません。Ubuntu 18.04のメンテナーが何を決定するかによります。systemd-resolvedサービスを無効にして、NetworkManager.confを変更しない場合(競合の場合はデフォルトでインタラクティブに解決されます)、Ubuntu 20.04まで存続し、うまくいけば修正されるでしょう。
Venca Bスパム、

0

ご存知のように、Dockerはホストの /etc/resolv.confファイルをコンテナにコピーしますが、ローカルネームサーバーは削除します。

この問題に対する私の解決策は、systemd-resolvdNetworkManager引き続き使用することですが、dnsmasqを追加し、それを使用してDockerコンテナーのDNSクエリをsystemd-resolvdに「転送」します。

ステップバイステップガイド:

  • 作る/etc/resolv.confの「本当の」ファイルを sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • /etc/NetworkManager/conf.d/systemd-resolved-for-docker.confファイルを作成して、NetworkManagersystemd-resolvdに通知するが/etc/resolv.confには触れないように指示する [main] # NetworkManager will push the DNS configuration to systemd-resolved dns=systemd-resolved # NetworkManager won’t ever write anything to /etc/resolv.conf rc-manager=unmanaged
  • dnsmasqをインストールする sudo apt-get -y install dnsmasq
  • /etc/dnsmasq.confdnsmasqを構成し、DockerからのDNSクエリをリッスンし、systemd-resolvdネームサーバーを使用する # Use interface docker0 interface=docker0 # Explicitly specify the address to listen on listen-address=172.17.0.1 # Looks like docker0 interface is not available when dnsmasq service starts so it fails. This option makes dynamically created interfaces work in the same way as the default. bind-dynamic # Set systemd-resolved DNS server server=127.0.0.53
  • /etc/resolv.confを編集して、Dockerネットワークでsystemd-resolvdネームサーバー(127.0.0.53)とホストIP(172.17.0.1)を使用します # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • サービスを再開する sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

詳細については、私の投稿を参照してください(スペイン語)https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/


-1

Ubuntu 18.10

私見、dnsmasqを実行する場合は、dhcpから取得するのではなく、静的にIPアドレスを割り当てる必要があります。このようにして、systemd-resolvedをすべて無効にすることができます。

  1. sudo apt-get install dnsmasq

  2. sudo systemctl disable systemd-resolved

  3. sudo systemctl stop systemd-resolved

  4. 手動でIPアドレス、ゲートウェイを割り当て、DNSとしてマシンにIPアドレスを割り当てます。

  5. /etc/dnsmasq.confを構成します(本当に... RTFM-> man dnsmasq.conf)

  6. sudo systemctl enable dnsmasq

  7. リブート
  8. sudo systemctl status dnsmasq

  9. dhcpサーバー上のdhcpを、光沢のある新しいdnsmasqサーバーに向けます(..if yumpto)


私はあなたが説明したものを実装しません。NetworkManagerの将来の使用のために、デフォルトのsystemd解決済みの手を触れないで残してほしい。
cmak.fr 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.