小米路由自定义域名解析
需求
家里群辉NAS利用公网IP使用DDSN配置了域名可以外网访问,但是在家的时候又不想输入IP,想要让域名解析为内网IP。
思路
家里用的小米路由AX1800,想到在家输入miwifi.com的时候是直接定向到路由的管理页面的,但是外网是访问到官网的,这说明路由器本身已经有了域名解析服务,基本上使用的都是dnsmasq。
查找下dnsmasq进程:
oot@XiaoQiang:~# ps |grep dns
7741 root 1268 S /usr/sbin/dnsmasq --user=root -C /var/etc/dnsmasq.conf.cfg01411c -k -x /var/run/dnsmasq/dnsmasq.cfg01411c.pid
10422 root 1300 S grep dns
32750 root 1360 S vi /etc/init.d/dnsmasq
看启动使用的配置:
root@XiaoQiang:~# cat /var/etc/dnsmasq.conf.cfg01411c
# auto-generated config file from /etc/config/dhcp
conf-file=/etc/dnsmasq.conf
address=/workforme.stat.localdomain/127.0.0.1
dhcp-authoritative
domain-needed
localise-queries
read-ethers
enable-ubus
expand-hosts
bind-dynamic
local-service
server=/lan/
dhcp-leasefile=/tmp/dhcp.leases
resolv-file=/tmp/resolv.conf.auto
intercept-ip-address=192.168.31.1
intercept-white-list=/etc/intercept_wlist
addn-hosts=/tmp/hosts
conf-dir=/tmp/dnsmasq.d
配置使动态生成的,所以不能直接修改addn-hosts指定的路径/tmp/hosts。
于是查找这个文件的生成位置,最后发现就是在启动服务脚本(etc/init.d/dnsmasq
)中操作的。
...
local lanipaddr
config_load network
config_get lanipaddr lan ipaddr '192.168.31.1'
# add own hostname
[ $ADD_LOCAL_HOSTNAME -eq 1 ] && [ -n "$lanipaddr" ] && {
local hostname="$(uci get system.@system[0].hostname)"
dhcp_domain_and_rr_add "" "${hostname:-OpenWrt}" "$lanipaddr"
}
#setup router domain
mkdir -p /tmp/hosts/ && {
echo "${lanipaddr} miwifi.com" >/tmp/hosts/miwifi.com
echo "${lanipaddr} www.miwifi.com" >/tmp/hosts/www.miwifi.com
}
#custom hosts
[ -f /etc/custom_hosts ] && cp -f /etc/custom_hosts /tmp/hosts/
#add dns dummy resolv when device not initialed
remote_resolv=0
DEVINITMARK="$(uci get xiaoqiang.common.INITTED 2>/dev/null)"
if [ "${DEVINITMARK}" != 'YES' ]; then
remote_resolv=1
...
解决
- 直接修改
etc/init.d/dnsmasq
文件,仿照miwif.com的方式添加需要的域名 - 文件中复制了
/etc/custom_hosts
文件,但是这个文件中提示#generated by plugin, DONOT edit it
,也不知道可不可以用,查看文件创建时间应该是买来的时候,估计可以使用。
后续
最后发现小米的管理页面有个自定义HOSTS
功能,做到就是这件事,就是利用修改/etc/custom_hosts
这个文件实现的。