關(guān)鍵字:dnsmasq dns 局域網(wǎng)IP private ip ERR_NAME_NOT_RESOLVED rebind_protection
約定:后續(xù)我用example.com
這個域名作為演示稚补,大家自行替換為自己的域名
背景
今天內(nèi)網(wǎng)服務(wù)無法通過域名訪問,但是通過nslookup
發(fā)現(xiàn)如果指定服務(wù)器dnspod則正常屋彪,只要dns服務(wù)器是openwrt的dnsmasq則會提示找不到記錄活逆,但實際上dnsmasq的上游就是dnspod(119.29.29.29)!
最主要的是昨天明明還好好的剪决,今天怎么不行了這個是題外話后面再說灵汪,一如既往,先看解決方案柑潦。
解決方案
在Openwrt中找到 設(shè)置 -> 網(wǎng)絡(luò) -> DHCP/DNS -> 常規(guī)設(shè)置
找到【重綁定保護】和下面的【域名白名單】
這里有提供3種解決方案:
- 最直接的直接關(guān)閉【重綁定保護】享言,這樣Dnsmasq就不會過濾局域網(wǎng)IP了
- 使用【域名白名單】,比如你只想你自己的域名可以返回局域網(wǎng)IP渗鬼,非白名單里的域名如果返回了局域網(wǎng)IP還是會被過濾掉
- 使用內(nèi)置的Dnsmasq管理局域網(wǎng)IP的域名览露,方法是使用【主機名映射】或者【CNAME】,這里你也可以綁定域名和IP譬胎,相當(dāng)于一個簡易的DNS控制臺差牛,缺點是其他電腦手機的DNS服務(wù)器必須要指定為openwrt的IP命锄,不過一般這個操作是Openwrt的在DHCP中自動完成的。
如果你不是使用的openwrt而是直接在Linux下使用的Dnsmasq的話你可以在Dnsmasq的配置文件直接配置偏化,
- 方案1對應(yīng)選項為
stop-dns-debind
- 方案2對應(yīng)的選項為
rebind-domain-ok=/qb.example.com/其他域名白名單1/其他域名白名單2/
脐恩,多個域名時使用/
分隔 - 方案3對應(yīng)的配置為
address=/你的域名/你的IP
a. 單個域名配置時直接寫全,如:qb.example.com=192.168.1.1
寫為address=/qb.example.com/192.168.1.1
b. 泛域名配置時去除保留開頭的.
侦讨,如:*.example.com=192.168.1.1
寫為address=/.example.com/192.168.1.1
c. CNAME的話可以用cname=bt.example.com,qb.example.com
驶冒,這表示bt.example.com
是qb.example.com
的別名,訪問bt.example.com
就相當(dāng)于訪問qb.example.com
韵卤。注意這里address
配置不同骗污,沒有使用/
做分隔而是用了英文的逗號做分隔
經(jīng)過(可以不看)
我在自己的Homelab上搭建了幾個內(nèi)網(wǎng)服務(wù),比如qBittorrent (qb.example.com
)沈条,并且配置好了DNS需忿,使用Chrome訪問時一直報 ERR_NAME_NOT_RESOLVED
這個錯誤,很明顯時一個DNS問題蜡歹,通過 nslookup
開始了排查
> nslookup qb.example.com
服務(wù)器: openwrt.lan
Address: 192.168.2.1
*** 沒有 qb.example.com 可以使用的 internal type for both IPv4 and IPv6 Addresses (A+AAAA)記錄
> nslookup baidu.com
服務(wù)器: openwrt.lan
Address: 192.168.2.1
非權(quán)威應(yīng)答:
名稱: baidu.com
Addresses: 110.242.68.66
39.156.66.10
> nslookup qb.example.com 119.29.29.29
服務(wù)器: pdns.dnspod.cn
Address: 119.29.29.29
非權(quán)威應(yīng)答:
名稱: qb.example.com
Address: 192.168.1.250
從上面可以看到我在DNS控制臺上的配置是生效了的屋厘,通過公共DNS服務(wù)商 DNSPOD 可以正常解析該域名,那為什么通過dnsmasq就不行呢季稳,我開始懷疑是不是Dnsmasq把局域網(wǎng)IP給過濾了擅这,首先 baidu 能返回結(jié)果說明dnsmasq工作正常,而我自己的qb.example.com又是一個局域網(wǎng)IP景鼠,通過在網(wǎng)上一通搜索發(fā)現(xiàn)還真是仲翎,上面已經(jīng)給出解決辦法了,這里我就不贅述了铛漓,那在背景那部分說的昨晚還正常是怎么一回事兒呢溯香,我們接著往下看。
我的網(wǎng)絡(luò)架構(gòu)以及DNS配置如下圖所示
問題的原因就是遠端DNS的CNAME配置問題浓恶,在 openwrt 中通過DHCP 或 靜態(tài)地址分配 下發(fā)的IP默認(rèn)都會創(chuàng)建一條DNS映射記錄玫坛,比如我的手機(名字是s23) 的IP是 192.168.2.88,那么我們可以直接通過 s23代替 192.168.2.88
> nslookup s23
服務(wù)器: openwrt.lan
Address: 192.168.2.1
名稱: s23.lan
Address: 192.168.2.88
由于我的Homelab在網(wǎng)絡(luò)中是和Openwrt同級的包晰,所有Homelab的IP并不是受Openwrt的管理湿镀,自然也就不會自動創(chuàng)建DNS映射記錄,所有為了方便我在Openwrt中創(chuàng)建了一個 pve=192.168.1.250
的DNS記錄伐憾。
最開始的配置可行就是因為我當(dāng)時在遠端的DNS配置的CNAME記錄是qb.example.com=pve勉痴,當(dāng)時我沒有意識到cname是需要寫全名的,所以當(dāng)請求 qb.example.com
時返回的 CNAME記錄是 pve
然后再查 pve
時命中了我在 Openwrt 中創(chuàng)建的 pve=192.168.1.250 所以正常工作起來了树肃。
那我又是怎么發(fā)現(xiàn)我在DNS配置有問題的呢蒸矛?
由于配置的pve=192.168.1.250
這條記錄是在Openwrt上的,所以當(dāng)我在 PVE 上想通過 curl 訪問 qb.example.com
時發(fā)現(xiàn)DNS解析不出來,我才意識到我在遠端的DNS上配置的CNAME記錄配錯了雏掠,所以我直接修改完在 PVE上發(fā)現(xiàn)解析正常斩祭、訪問正常就下線睡覺了,直到今早發(fā)現(xiàn)PC上發(fā)現(xiàn) qb.example.com
報錯了才有了這篇文章乡话。摧玫。。
結(jié)束語
距離寫最后一篇未鎖定的文章一晃居然將近6年過去了蚊伞,今天乘著周末正好遇到了這個問題國內(nèi)也沒搜到太多文章就順手寫了一篇席赂,希望對大家有幫助吧