你不知道的DNSmasq
- 2019-3-10
- 折腾
最近安大电信推出了网页版登录并开始支持设置固定宽带密码,我当时是第一时间把它安排到了路由器上。没想到因此留下了后遗症,之前直接插网线 pppoe 拨号是可以直接访问内网资源的,但是使用路由器 pppoe 拨号后,连上 wifi 的笔记本却不能直接访问内网资源(奇怪的是我的朋友可以)。
开始,我以为是路由器的 route
配置有问题,于是看了一下 route
: 1
2
3
4Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.25.128.1 0.0.0.0 UG 0 0 0 pppoe-wan
192.168.2.0 * 255.255.255.0 U 0 0 0 br-lan
和朋友发来的截图比对了一下,发现并没有什么区别,场面一度尴尬。在网上胡乱搜索着,却没有搜索任何有用的信息。直到朋友提醒我会不会是 DNS
的问题,这才让我找到新的思路。我赶紧使用 dig
命令查询了相应域名的 DNS
解析信息(这里发生了一个小插曲,OpenWrt 默认不支持 dig 命令,需要先使用 opkg install bind-dig
安装 dig
)。没想到我为这些内网服务绑定的动态域名真的无法被解析,是 DNS 的问题无疑了。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15; <<>> DiG 9.9.8-P3 <<>> sys.westery.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13544
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sys.westery.cn. IN A
;; Query time: 51 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Mar 10 22:19:29 CST 2019
;; MSG SIZE rcvd: 43
没有 ANSWER SECTION
,说明域名解析失败了。但是这个 SERVER: 127.0.0.1#53
是什么鬼?
127.0.0.1
不是本地回环地址吗?自己还能做自己的域名服务器???还是问问度娘吧,她或许知道点什么 /斜眼笑
在 OpenWrt 有一个本地的 DNS 服务叫做 dnsmasq,它默认监听 127.0.0.1。而你真的是 DNS 服务器地址其实是被这个服务维护着的, 所以完整的 DNS 解析流程应该是这样: local process -> local dnsmasq -> router -> ISP dns。
光看理论还不行,让我们赶紧验证一下究竟是不是 dnsmasq
的锅: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19; <<>> DiG 9.9.8-P3 <<>> @119.29.29.29 sys.westery.cn
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9499
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sys.westery.cn. IN A
;; ANSWER SECTION:
sys.westery.cn. 600 IN A 172.23.9.18
;; Query time: 598 msec
;; SERVER: 119.29.29.29#53(119.29.29.29)
;; WHEN: Sun Mar 10 22:56:40 CST 2019
;; MSG SIZE rcvd: 59
这里使用 @119.29.29.29
强制 DNSPOD 作为 DNS 服务器解析 sys.westery.cn
。看!内网 IP 被正常解析出来了!没错,就是 dnsmasq
的问题。可是你这个 dnsmasq
为什么偏偏不解析指向内网 IP 的动态域名呢?别看我呀,我也不知道...接下来就是一个漫长地搜索答案的过程了,开心地是答案还是被我找到了(往下看)。
大坑
1 | # 这项安全设置是拒绝解析包含私有 IP 地址的域名, |
我好像看到什么?DNSmasq 默认拒绝解析包含私有 IP 地址的域名。原来如此,知道问题了就好解决了,这里附上我的解决步骤: 1
2
3
4
5
6# 编辑 dnsmasq 配置文件
vim /etc/dnsmasq.conf
# 在文件末尾添加 rebind-domain-ok 规则后退出
rebind-domain-ok=/.lolimay.cn/.westery.cn/ # 允许 *.lolimay.cn 和 *.westery.cn 解析到内网 IP 地址
# 重启 dnsmasq 服务
/etc/init.d/dnsmasq restart
最后 dig
一下我们之前绑定的动态域名: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18; <<>> DiG 9.9.8-P3 <<>> sys.westery.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25558
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sys.westery.cn. IN A
;; ANSWER SECTION:
sys.westery.cn. 600 IN A 172.23.9.18
;; Query time: 237 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Mar 10 23:20:51 CST 2019
;; MSG SIZE rcvd: 59
已经被正常解析了,完工 :)