校园网下OpenWrt配置DNS

在上一篇文章的末尾写到,初次配置 OP 系统时候在校内网实现了 IPV6 穿透,但是 DNS 出现了问题。查阅资料后发现与 OP 的反域名劫持保护机制有关系,下面详述一下。

0x02 OP 的反域名劫持保护

OP 的反域名劫持保护在默认情况是开开启的,具体设置在/etc/config/dhcp下。

1
2
config dnsmasq
option rebind_protection '1'

在反域名劫持保护未关闭的情况下,由于上级 dns 返回的地址是个私有局域网地址,所以被看作是一次域名劫持,从而丢弃了解析的结果。

直接的方法就是将上面的字段值改为0,关闭即可。
在 GUI 配置界面等同于将
Network->DHCP DNS-Server Settings->General Settings->Rebind protection的勾取消掉。

再仔细查看文档发现也可以通过白名单的方式放行想要解析的内网域名,更为安全,此时 Rebind protection 也是处于开启状态,上面的关闭操作不需要进行。而具体修改的操作示例如下所示:

1
2
3
config dnsmasq
list rebind_domain 'bupt.edu.cn'
list rebind_domain 'byr.cn'

表示在反域名劫持保护情况下,将bupt.edu.cn,byr.cn域名加入白名单,允许返回内网地址。
在 GUI 配置界面等同于在
Network-DHCP DNS-Server Settings-General Settings-Domain whitelist添加想要解析的内网域名。

0x03 自定义 DNS 规则

在学校 DNS 偶尔抽风或者速度慢的情况下,产生了自定义 DNS 的想法。由于教务系统等系统的访问需要,在各个客户端修改 hosts 略显麻烦,并且 DNSmasq 亦可以实现广告屏蔽,因此采用 DNSmasq 来实现不同的 DNS 解析。
预期需求为bupt.edu.cn, byr.cn域名使用校内 DNS 解析,其他地址使用公共 DNS 解析(以 114 为例)。

修改 Wan 口 DNS

Wan 口 DNS 主要控制路由器访问网络使用的 DNS 服务器。例如,路由器安装软件需要访问网络,那么所使用的 DNS 服务器就是这个。

/etc/config/network文件中的 wan 接口添加两行 peerdns 以及 dns 字段:

1
2
3
4
5
config interface 'wan'
......
option peerdns '0'
option dns '114.114.114.114'
......

重启 network 服务后生效。
在 GUI 配置界面等同于在Network-Interface-Wan-Edit-Common Configuration-Advanced Settings中取消Use DNS servers advertised by peer的勾选,并在Use custom DNS servers添加默认的 DNS 服务器。

修改 Lan 口 DNS(可跳过)

LAN 口 DNS 主要控制连接到路由器的设备使用的 DNS。例如,连到路由的电脑上网时使用的 DNS 服务器就在这里设置。

一般情况下,Lan 和 Wan 口 DNS 保持一致即可。如若有需要,修改/etc/config/dhcp文件中 dnsmasq 的 resolvfile 指向即可:

1
2
3
4
config dnsmasq
....
option resolvfile '/etc/resolv.dnsmasq.conf'
....

同时需要在/etc/resolv.dnsmasq.conf下新建对应的配置文件。示例如下:

1
2
nameserver 114.114.114.114
nameserver 2001:4860:4860::8888

修改 Dns 自定义的内网解析规则

接下来就是配置校内域名使用的 DNS 解析地址。修改/etc/config/dhcp文件中 dnsmasq。
首先是删除下面两行配置:

1
2
3
4
5
config dnsmasq
....
option filterwin2k '0'
option nonegcache '0'
....

其次添加 list server 字段,对bupt.edu.cn, byr.cn相关域名使用校内 DNS 解析:

1
2
3
config dnsmasq
list server '/bupt.edu.cn/10.3.9.5'
list server '/byr.cn/10.3.9.5'

在 GUI 配置界面等同于在
Network-DHCP and DNS-Server Settings-General Settings-DNS forwardings添加对应域名的 DNS 解析服务器地址。

0x04 后话

DNSmasq 的用法远不止于此,可用来内网域名 IP 映射代替 hosts,自定义域名解析规则屏蔽广告等,有时间会再研究。