Linux中國

使用 DNS over TLS

現代計算機用來在互聯網種查找資源的 域名系統(DNS) 是在 35 年前設計的,沒有考慮用戶隱私。它會面臨安全風險和攻擊,例如 DNS 劫持。它還能讓 ISP 攔截查詢。

幸運的是,現在有 DNS over TLSDNSSEC 兩種技術。DNS over TLSDNSSEC 允許創建從計算機到它配置的 DNS 伺服器之間的安全且加密的端到端隧道。在 Fedora 上,部署這些技術的步驟很容易,並且所有必要的工具也很容易獲得。

本指南將演示如何使用 systemd-resolved 在 Fedora 上配置 DNS over TLS。有關 systemd-resolved 服務的更多信息,請參見文檔

步驟 1:設置 systemd-resolved

類似於下面所示修改 /etc/systemd/resolved.conf。確保啟用 DNS over TLS 並配置要使用的 DNS 伺服器的 IP 地址。

$ cat /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1 9.9.9.9
DNSOverTLS=yes
DNSSEC=yes
FallbackDNS=8.8.8.8 1.0.0.1 8.8.4.4
#Domains=~.
#LLMNR=yes
#MulticastDNS=yes
#Cache=yes
#DNSStubListener=yes
#ReadEtcHosts=yes

關於選項的簡要說明:

  • DNS:以空格分隔的 IPv4 和 IPv6 地址列表,用作系統 DNS 伺服器。
  • FallbackDNS:以空格分隔的 IPv4 和 IPv6 地址列表,用作後備 DNS 伺服器。
  • Domains:在解析單標籤主機名時,這些域名用於搜索後綴。 ~. 代表對於所有域名,優先使用 DNS= 定義的系統 DNS 伺服器。
  • DNSOverTLS:如果啟用,那麼將加密與伺服器的所有連接。請注意,此模式要求 DNS 伺服器支持 DNS-over-TLS,並具有其 IP 的有效證書。

注意:上面示例中列出的 DNS 伺服器是我個人的選擇。你要確定要使用的 DNS 伺服器。要注意你要向誰請求 IP。

步驟 2:告訴 NetworkManager 將信息推給 systemd-resolved

/etc/NetworkManager/conf.d 中創建一個名為 10-dns-systemd-resolved.conf 的文件。

$ cat /etc/NetworkManager/conf.d/10-dns-systemd-resolved.conf
[main]
dns=systemd-resolved

上面的設置(dns=systemd-resolved)讓 NetworkManager 將從 DHCP 獲得的 DNS 信息推送到 systemd-resolved 服務。這將覆蓋步驟 1 中配置的 DNS 設置。這在受信任的網路中沒問題,但是也可以設置為 dns=none 從而使用 /etc/systemd/resolved.conf 中配置的 DNS 伺服器。

步驟 3: 啟動和重啟服務

若要使上述步驟中的配置生效,請啟動並啟用 systemd-resolved 服務。然後重啟 NetworkManager 服務。

注意:在 NetworkManager 重啟時,連接會中斷幾秒鐘。

$ sudo systemctl start systemd-resolved
$ sudo systemctl enable systemd-resolved
$ sudo systemctl restart NetworkManager

注意:目前,systemd-resolved 服務默認處于禁用狀態,是可選使用的。[有計劃][33]在 Fedora 33 中默認啟用systemd-resolved。

步驟 4:檢查是否一切正常

現在,你應該在使用 DNS over TLS。檢查 DNS 解析狀態來確認這一點:

$ resolvectl status
MulticastDNS setting: yes
  DNSOverTLS setting: yes
      DNSSEC setting: yes
    DNSSEC supported: yes
  Current DNS Server: 1.1.1.1
         DNS Servers: 1.1.1.1
                      9.9.9.9
Fallback DNS Servers: 8.8.8.8
                      1.0.0.1
                      8.8.4.4

/etc/resolv.conf 應該指向 127.0.0.53

$ cat /etc/resolv.conf
# Generated by NetworkManager
search lan
nameserver 127.0.0.53

若要查看 systemd-resolved 發送和接收安全查詢的地址和埠,請運行:

$ sudo ss -lntp | grep '(State|:53 )'
State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port    Process
LISTEN    0         4096         127.0.0.53%lo:53               0.0.0.0:*        users:(("systemd-resolve",pid=10410,fd=18))

若要進行安全查詢,請運行:

$ resolvectl query fedoraproject.org
fedoraproject.org: 8.43.85.67                  -- link: wlp58s0
                   8.43.85.73                  -- link: wlp58s0

[..]

-- Information acquired via protocol DNS in 36.3ms.
-- Data is authenticated: yes

額外步驟 5:使用 Wireshark 驗證配置

首先,安裝並運行 Wireshark

$ sudo dnf install wireshark
$ sudo wireshark

它會詢問你在哪個設備上捕獲數據包。在我這裡,因為我使用無線介面,我用的是 wlp58s0。在 Wireshark 中設置篩選器,tcp.port == 853(853 是 DNS over TLS 協議埠)。在捕獲 DNS 查詢之前,你需要刷新本地 DNS 緩存:

$ sudo resolvectl flush-caches

現在運行:

$ nslookup fedoramagazine.org

你應該會看到你的計算機和配置的 DNS 伺服器之間的 TLS 加密交換:

via: https://fedoramagazine.org/use-dns-over-tls/

作者:Thomas Bianchi 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國