%20%E7%B6%B2%E8%B7%AF%E4%B8%AD%E7%9A%84%20DNS%20%E8%A7%A3%E6%9E%90%E4%B8%80%E5%80%8B%E4%BB%8B%E9%9D%A2%20(wlan0)%20%E8%AB%8B%E6%B1%82.png)
我正在努力實現的目標:
我有一個 WireGuard 反向 VPN 設置,它不會路由我的流量,但允許我使用公共伺服器作為「橋接器」從互聯網內部連接到我的樹莓派。
我在樹莓派上安裝了pihole。現在,我想使用 pi 作為 DNS(透過 WireGuard),同時從我的實際裝置發送實際的 HTTP 請求。
基本上,我希望它像這樣工作:
192.168.0.x (wlan0@localhost) 請求 URL。 DNS @192.168.66.z (pihole) 解析 URL 並將 IP 傳回 192.168.66.y (wg0@localhost)。然後使用該答案從 192.168.0.x (wlan0@localhost) 發送 HTTP 請求。
我嘗試過的:
顯然,我嘗試將 pi 的 VPN-IP 輸入到 NetworkManager 中。這讓我有些頭疼,因為我的 Ubuntu ( 5.4.0-42-generic #46~18.04.1-Ubuntu
) 總是回退到預設 DNS(即使 VPN DNS 工作,我也不想要這種情況)。我找到了一個提供的解決user2427436
方法所以這裡線程。
問題是什麼:
雖然我可以強制使用 DNS(無需回退到路由器/預設 DNS),但我無法設法將 pihole 用作 DNS。我可以透過隧道(例如 HTTP、SSH 等)連接到 pi,並且連接埠 53(用於 DNS)在防火牆中開啟。我仍然無法解析任何網域。此外,檢查journalctl -xe
pi 不會顯示裝置嘗試連接/解析的任何提示。
我真的很想了解為什麼這不起作用以及它應該如何工作。我覺得我對 DNS 的工作原理缺少一些了解。
此處要檢查的正確日誌檔案是什麼?您對我下一步應該嘗試什麼有什麼建議嗎?
編輯:
DNS 是依照網路設備設定的。我的 wlan0 設備@192.168.0.0\24 是否知道 wg0 設備及其位址空間@192.168.66.0\24?我嘗試使用 wg0 上的 DNS 來解析來自 wlan0 的請求,這可能是問題的原因嗎?如果是,我該如何解決這個問題?
答案1
解決此問題可以從多個方面進行。
- 新增正確路由的 ip 規則
- 測試名稱解析
- 停用/調整已解決
一步步:
第一步是查看是否可以到達 Pi。需要檢查路由經過哪個介面。可以使用以下測試:
traceroute -i <interface name> -p 53 192.168.66.z
替換為系統上可用的介面。預期結果:traceroute 將在 wg0 介面上工作,但可能不會在其他介面上工作。
使用來源 IP 可以完成相同的測試:
traceroute -s <sourceIP> -p 53 192.168.66.z
替換為本機上的本機 IP 預期結果:traceroute 可能適用於 wg0 的 IP 位址,但不適用於任何其他介面的 IP 位址
如果上述兩者不適用於任何介面或位址,則公共「網橋」上的路由部分有問題。
假設第一步按預期工作,下一步是告訴作業系統透過正確的介面路由 DNS 請求的流量。替換為在上一步中提供到 pihole 的工作路由的介面的名稱。
為 DNS 請求建立一個新的路由表,例如“dns”,並告訴作業系統路由所有 DNS 請求(目標連接埠 53)以透過不同的介面
echo "10 dns" >>/etc/iproute2/rt_tables
ip rule add pref 10 dport 53 table dns
ip route add default via 192.168.66.z dev <DNSInterface> table dns
ip route flush cache
首先透過明確指定 pihole 位址來查看 DNS 解析是否有效:
nslookup www.serverfault.com 192.168.66.z
預期結果:DNS查詢順利。如果沒有,您需要仔細檢查上面的介面和 IP 位址以及 VPS 上的路由規則。
最後我們需要處理resolved。我的建議是關閉resolved並直接使用pihole DNS:
systemctl stop systemd-resolved
systemctl disable systemd-resolved.service
mv /etc/resolv.conf /etc/resolv.conf.securitycopy
添加
dns=default
下[main]
於/etc/NetworkManager/NetworkManager.conf
systemctl restart NetworkManager
將網路介面屬性上的 DNS 伺服器 IP 變更為 pihole 位址
測試DNS解析:
nslookup www.serverfault.com
您的系統現已進行以下變更:
- DNS 請求(目標連接埠 53)透過不同的介面路由
- Resolved 被停用,DNS 解析直接到 DNS 伺服器
- DNS 伺服器設定為 piHole 的 IP
讓我知道它是否有效。