分類
Linux

Fedora使用DNSCrypt

DNSCrypt是一種認證DNS客戶端和DNS解析器之間通信的協議。 它可以防止DNS欺騙。下面記錄下在Fedora25上使用DNSCrypt的步驟。

dnscrypt-proxy 2 是一個更棒的升級,如果你用的是v1,非常建議升級。官方的安裝文檔已經寫的很詳盡,這裡再簡單記錄一下。

#用超級用戶操作
su -s
#下載dnscrypt-proxy-linux_x86_64-2.0.25.tar.gz並解壓至/opt/dnscrypt-proxy/
#其實解壓到哪裡都無所謂啦
cd /opt/dnscrypt-proxy/
cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml
#選擇性修改fallback dns如
fallback_resolver = '114.114.114.114:53'
#開啟分流文件
#曾經在不分流的情況下用了一年左右,奈何網絡持續惡化,現在不分流體驗會很差
#中國域名來自https://github.com/felixonmars/dnsmasq-china-list/blob/master/accelerated-domains.china.conf
#需要替換成dnscrypt-proxy的格式
forwarding_rules = '/home/fred/Programs/dnscrypt-proxy/forwarding-rules.txt'
./dnscrypt-proxy
#出現dnscrypt-proxy is ready即為成功,可以先Ctrl+C關閉
#执行下面命令使普通用戶也能運行dnscrypt-proxy
setcap cap_net_bind_service=+pe dnscrypt-proxy
#下面設置本機dns解析方法一:
cp /etc/resolv.conf /etc/resolv.conf.backup
nano /etc/resolv.conf
#文件內容如下
nameserver 127.0.0.1
options edns0 single-request-reopen
#下面設置本機dns解析方法二:
#右擊網絡連接圖標,選擇“編輯網絡連接”,選擇網絡,點齒輪圖標。
#在“IPv4設定”選項卡,Method選“只用自動(DHCP)位址”
#DNS servers填入127.0.0.1, 8.8.4.4,按“儲存”。
#右擊網絡連接圖標,反選啟用網絡,再勾選啟用網絡。
#設置完成,測試解析
./dnscrypt-proxy -resolve ft.shaman.eu.org
#如果返回了IP就說明OK

#自動啟動我都是用的xfce的啟動程序,位於
#應用程式選單/設定值/工作階段與初始啟動/應用程式自動啟動/加入
#指令框輸入/opt/dnscrypt-proxy/dnscrypt-proxy
#NetworkManager會在開機時生成重寫/etc/resolv.conf
#所以需要在NetworkManager的IPV4設定中指定127.0.0.1為dns服務器
#或者
#給resolv.conf上把鎖
chattr +i /etc/resolv.conf
#解鎖
chattr -i /etc/resolv.conf

如果想分享dnscrypt-proxy服務給局域網用戶,可以修改dnscrypt-proxy.toml中的監聽地址為['0.0.0.0:53']。然後開啟防火牆的53端口。

部分配置示例

#程序日誌
log_file = '/home/ft/Programs/dnscrypt-proxy/log.log'

#解析日誌
[query_log]
file = '/home/ft/Programs/dnscrypt-proxy/query.log'
ignored_qtypes = ['AAAA', 'DNSKEY', 'NS']

#域名黑名單
[blocked_names]
blocked_names_file = '/home/ft/Programs/dnscrypt-proxy/mybase_blocked-names.txt'
#此處使用的黑名單來自 https://download.dnscrypt.info/blacklists/domains/

#NextDNS 解析
[static]
  [static.'NextDNS-12abcd']
  stamp = 'sdns://AgEAAAAAAAAAAAAOZG5zLm5leHRkbnMuaW8HLzc3WiXnZO'
#使用 NextDNS 時還要設置 server_names
server_names = ['NextDNS-12abcd']

值得提醒的是,如果你使用 BT 下載,那麼很多黑名單是禁止 trackers 相關域名的,記得禁用這一條#tracker.*

不再實用的配置

安裝dnscrypt-proxy並新建一個執行用戶

sudo dnf install dnscrypt-proxy
sudo adduser -m -N  -r -s /bin/false dnscrypt

安裝完成後可以從/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv的第一列挑選一個服務商,我嘗試用香港的發現連接不上,於是選擇法國cs-fr。嘗試運行dnscrypt-proxy:

sudo dnscrypt-proxy -u dnscrypt -R cs-fr

我的桌面是Xfce,所以設置DNS很方便。找到程序/設定值/網路連線,選中需要編輯的網路點編輯。在IPv4設定面板中,如果你之前方法是“自動(DHCP)”,則變更方法為“只用自動(DHCP)位址”,並在DNS伺服器一欄填入127.0.0.1。如果之前就有固定IP,則只需要把DNS伺服器一欄改為127.0.0.1即可。多個DNS伺服器可以用半角逗號隔開。

如果沒有桌面環境,要設置DNS的話可以參考The adventurous can edit the appropriate script in /etc/sysconfig/network-scripts/. If you don't have NetworkManager installed, editing /etc/resolv.conf would work too.

重啟網絡服務已使剛剛新設置的DNS生效。可以使用dig驗證當前dns,出現SERVER: 127.0.0.1#53即說明成功。

sudo systemctl restart network.service
dig ft.wupo.info

設置自動重啟也很簡單,新建文件/etc/systemd/system/dnscrypt.service,內容如下:

[Unit]
Description=dnscrypt - Encrypted DNS service provided by OpenDNS
After=NetworkManager.service

[Service]
ExecStart=/usr/sbin/dnscrypt-proxy -u dnscrypt -R cs-fr
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=basic.target

重啟系統守護

sudo systemctl daemon-reload

添加dnscrypt到開啟啟動

sudo systemctl enable dnscrypt.service

當然你也可以手動通過systemctl命令來啟動和停止dnscrypt-proxy,像這樣:

sudo systemctl start dnscrypt.service

參考鏈接:Lucid Electric Dreams: Setting up dnscrypt on Fedora

本文更新於 2023/02/17。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *