
我使用 pfSense 和 OpenVPN 已有十多年了。也大量使用了 pfSense 的許多服務(DNS 解析器、DHCP、HA 代理、SquidGuard,當然還有防火牆...)總之 - 我確實有一些經驗。但現在決定嘗試用 WireGuard 取代 OpenVPN...
我已經在 pfSense 端建立了一個隧道,配置了 Windows 用戶端,並且連線成功。我可以訪問(幾乎)pfSense 後面的所有伺服器。但後來我注意到 DNS 行為有一些非常非常奇怪的地方。我必須快速描述我的環境來解釋問題。所以我有:
- 拆分 DNS 設定(內部 DNS 解析為私人位址,而公用 DNS 解析為公用位址)。
- 內部 DNS 伺服器是兩個 Zentyal 網域控制站(位於 pfSense 後面的網路)。它們是主網域“mydomain.com”的權威名稱伺服器。
- 這兩個配置為將其他網域的 DNS 查詢轉送至 pfSense 的 DNS 解析器。 (我在 DNS Resolver 中配置了更多網域,因為它比 Zentyal DNS 更用戶友好且更好。)
- 最後,DNS 解析器進一步將對未解析的網域的查詢轉送到外部 DNS。
DNS request -> Zentyal DNS (172.16.0.1) -> pfSense DNS Resolver (172.16.1.1) -> External DNS
我承認,設定有點奇怪,但它已經工作了很多年了。
當我使用 OpenVPN 連接 Windows 11 電腦時,我可以nslookup
對任何網域(主網域或其他網域)進行操作,沒有任何問題。但是當我斷開OpenVPN並連接WireGuard時,我只能查詢主要的領域:
nslookup web.mydomain.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
Name: web.mydomain.com
Address: 172.16.2.5
但是當我查詢任何其他網域(由 DNS 解析器或外部 DNS 處理)時,我收到「查詢被拒絕」錯誤:
nslookup google.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
*** zentyal-1.mydomain.com can't find google.com: Query refused
當我使用 OpenVPN 連線時,請求完全相同:
nslookup google.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
Non-authoritative answer:
Name: google.com
Addresses: 2a00:1450:4001:80f::200e
142.250.185.142
顯然,在這兩種情況下,同一 DNS 伺服器 (zentyal-1) 接收請求,並且同一伺服器回應。一次“查詢被拒絕”,一次成功回應。當我透過 WireGuard 連接時,DNS 解析器似乎拒絕回答 Zentyal。
我的 WireGuard 用戶端配置:
[Interface]
PrivateKey = XXXX=
Address = 172.16.26.2/24
DNS = 172.16.0.1
[Peer]
PublicKey = YYYYY=
AllowedIPs = 172.16.0.0/16
Endpoint = 1.2.3.4:51820
這並不是奇怪行為的結束。我僅在命令提示字元下遇到“查詢被拒絕”問題,使用nslookup
.看起來瀏覽器根本不受這個問題的影響。 (nslookup
無法取得 google.com,但 Firefox 打開它沒有問題。)首先我認為這是某種 DNS 洩漏,瀏覽器正在查詢一些本地 DNS。但令我完全驚訝的是,事實似乎並非如此。瀏覽器正在取得由 DNS 解析器處理的網域的 DNS 回應,帶有私人 IP,這表示該回應必須來從 pfSense 後面(來自 DNS 解析器)...
呵呵呵呵
有任何想法嗎?抱歉,文字太長...謝謝!