web-dev-qa-db-ja.com

systemd-resolvedを使用したDNS over TLS

systemd-resolved経由でDNS over TLSを有効にしようとしました。 /etc/systemd/resolved.confを次のように変更しました:

[Resolve]
DNS=1.1.1.1
#FallbackDNS=
Domains=~.
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
DNSOverTLS=opportunistic
#Cache=yes
#DNSStubListener=yes

ネットワークを監視して(tcpdumpで)、結果の動作が意図したものであったかどうかを確認しているときに、ターゲットサーバーとのTLSセッションが確立されているようです。ただし、サーバーは接続を閉じます。 1.1.1.1、8.8.8.8などでも同じ結果が得られます。

これを修正する方法に関するアイデアはありますか?

PS:systemd-resolvedは、従来のDNSで並列解決を実行します(上記の「ドメイン」の設定にもかかわらず)。しかし、この投稿に対する私の主な質問は、TLSの何が問題になっているのかということです。

6
Fernando Gont

Ubuntu 18.04のDNS-over-TLS

私の経験に基づくと、Ubuntu 18.04以降(U19など)では上記の方法では機能しません。

Ubuntu 18+はNetworkManagerと並行してNetplanを使用しているため、物事は大幅に変更されました。疎。

snapはさらに変更をもたらす可能性があります。追加のresolve.confファイルを確立します。ただし、以下は実際に機能しました(/ w良好なパフォーマンス)。

Netplanの詳細については、 こちら をご覧ください。

成功した​​DNS-over-TLSの機能(works4me):

1./ etc/systemd/resolved.confでのみ、DNSOverTLS =を

DNSOverTLS=opportunistic

他のオプションはありません(ここの説明を参照: DNS over TLS

  1. 対応するDNSサーバーを使用します。私はDigitalcourageサーバーを好みます

46.182.19.48それぞれ。 2a02:2970:1002 :: 18

どうして?プライバシー!

  1. これは、GUIを介してNetwork-Managerで行う必要があります!

IPv4設定/ DNSサーバーとv6の下の接続のGUIフィールドにDNSサーバーアドレスをそれぞれ入力します。

エントリは/etc/resolv.confには表示されません!!どちらが正しい。代わりに、ネームサーバー127.0.0.53が表示されます

これは新しいUbuntuです。趣味の管理者には適していません。

  1. 推奨されませんが、可能です代替

適切なDNSサーバーの設定は、通常の形式で/etc/resolv.confで直接行うことができます。127.0.0.53などを削除します。

問題:UbuntuのNetwork-Managerによって上書きされる!

対処法:真のルート(!)chattrファイル/etc/resolv.conf

chattr +i /etc/resolv.conf

これはブルートフォースであり、解決による自動DNSキャッシングを無効にする場合があります。

Arch documentation へのクレジット

ただし、正常に動作します;-)が、真のルートとして手動で保守する必要があります

ヒント:

resolv.confをリンクにすることをお勧めします。これは、解決によって適切に機能するために必要です。 Sudo-rootが古いファイルを移動すると、

Sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf

私はこの方法は好きではありませんが、本質的に適切に機能しています。

次に再起動します。またはネットワークを再起動します。

確認方法

  1. いくつかの基本的なチェック:

Systemd-resolvedによって実際に使用されているDNSを確認します。

resolvectl status

DNSがresolvectlで解決するかどうかを確認します。

resolvectl query archlinux.org 

(いくつかの例を試してください)

実際に使用されているDNSを確認し、VPNのリークを確認します。

https://dnsleaktest.com/

。 2. Wiresharkを起動し、「ポート53」をフィルタリングして、Webトラフィックを作成します。

これにより、ポート53の接続が表示されなくなります。次に、ポート853をフィルタリングします。

重要:すべてのトラフィックがポート853を使用し、トラフィックが53を使用しない場合は、正常に実行されました!

Wiresharkの例 here

#備考:ずんぐりした。 stubbyはUbuntuにうまく統合されていませんが、NetworkManagerを使用しても機能します。正常に実行するためのマニュアルが1つあります。 Ubuntu LinuxでDNS-over-TLSを使用する方法 問題:パフォーマンスが少し面倒でした。何かがおかしいので原因はわかりませんでした。

/etc/systemd/resolved.confでDNSSEC = yesを有効にできるようになりました。

重要:

このソリューションはプライバシーを大幅に改善します。

しかし、個人の完全性がデータのプライバシーとセキュリティに依存している場合は十分ではありません!!解決された説明の警告を参照してください。日和見モードを使用するだけでは不十分です。次に、Tails Linuxに気をつけてください。世界中のすべての政治犯への悲しい挨拶。

4
opinion_no9

最近、ホームネットワークにDNS over TLSを実装しました(AsusWRT-Merlin搭載ルーターを使用)。 Linuxワークステーションとサーバー(クラウド内-誰か他のコンピューターのことです)にDoTを実装してホームネットワークの外にDoTを実装する方法を模索しているときに、DNSプライバシープロジェクトで推奨されているsystemd-resolvedを見つけました。

@ opinion-no9 はUbuntu 18.04固有のソリューション(LTSに同梱されているsystemdバージョンによって制限されます)を提供しましたが、より一般的で上流に近いソリューションを共有したいと思います。

背景-systemdでのDNS over TLSサポートのタイムライン

  • 236 DNSSECによるRFC 8080のサポート(ed25519キーと署名)
  • 239 systemd-resolvedopportunistic DNS-over-TLSをサポートするようになりました、デフォルトでOff
  • 243 systemd-resolvedが新しいstrict DNS-over-TLSモードのサポートを取得

Oh NO!Ubuntu 18.04 LTSはsystemd 237を出荷します...

一般的なLinuxシステムでDNS Over TLS(DoT)を使用する

したがって、比較的上流に近いカーネル、systemd、glibc、ツールチェーン、GNU utilsなど)を備えた一般的なLinuxディストリビューションの場合

  1. /etc/systemd/resolved.confを編集
[Resolve]
DNS=1.1.1.1 1.0.0.1 8.8.8.8
#FallbackDNS=1.1.1.1 9.9.9.10 8.8.8.8 2606:4700:4700::1111 2620:fe::10 2001:4860:4860::8888
#Domains=
#LLMNR=yes
#MulticastDNS=yes
#DNSSEC=allow-downgrade
#DNSOverTLS=opportunistic
DNSSEC=yes
DNSOverTLS=yes
#Cache=yes
#DNSStubListener=yes
#ReadEtcHosts=yes
  1. systemd-resolvedが有効であると想定し、サービスを再起動します
systemctl restart systemd-resolved
  1. ローカルスタブリゾルバを使用する

systemd-resolvedは、ローカルループバックインターフェイスのIPアドレス127.0.0.53にローカルDNSスタブリスナーを提供するため、DNS over TLS対応のスタブリゾルバーを使用するには、何らかの方法で/etc/resolv.confを管理し、127.0.0.53がネームサーバーとして使用されていることを確認する必要があります。

注:systemdは、従来のLinuxプログラムとの互換性のために/run/systemd/resolve/stub-resolv.confを維持しています。このファイルにシンボリックリンクするだけです;-)

ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

注:Arch Linuxの場合、openresolvconfsystemd-resolvconfに置き換える必要があります。

できました。

検証

DNSクエリを生成し、TCPポート853経由で指定された上流DNSサーバーへの接続を確認します。次の例では、Cloudflareの1.1.1.1を明示的に使用しました。

root@netbook:/etc# uname -a
Linux netbook 5.4.5-Arch1-1 #1 SMP PREEMPT Wed, 18 Dec 2019 19:48:51 +0000 x86_64 GNU/Linux

root@netbook:~#  kdig -d github.com
;; DEBUG: Querying for owner(github.com.), class(1), type(1), server(127.0.0.53), port(53), protocol(UDP)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 55366
;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; github.com.                  IN      A

;; ANSWER SECTION:
github.com.             58      IN      A       13.236.229.21

;; Received 44 B
;; Time 2019-12-21 22:55:13 AEDT
;; From 127.0.0.53@53(UDP) in 58.0 ms

root@netbook:~# ss -tuna | grep :853
tcp   ESTAB  0       0        192.168.1.150:50504         1.1.1.1:853
tcp   ESTAB  0       0        192.168.1.150:50506         1.1.1.1:853

または、シンプルでラフになりたい場合は、tcpdumpを使用します;-)

tcpdump -tttt -nn -XX -vv -i <interface> dst 1.1.1.1 and port 853

結論

最後に重要なことですが、これはLinuxホストでDNS over TLSを有効にするための一般的なガイドであり、ディストリビューションやデスクトップ環境に固有のものではありません(NetworkManagerや代替案に触れたことさえないため、;-)。さまざまなディストリビューションやさまざまなDE/WMで調整が必要になる場合があります。

参照

1
Terry Wang