小米路由自定义域名解析

需求

家里群辉NAS利用公网IP使用DDSN配置了域名可以外网访问,但是在家的时候又不想输入IP,想要让域名解析为内网IP。

思路

家里用的小米路由AX1800,想到在家输入miwifi.com的时候是直接定向到路由的管理页面的,但是外网是访问到官网的,这说明路由器本身已经有了域名解析服务,基本上使用的都是dnsmasq。

查找下dnsmasq进程:

[email protected]:~# 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

看启动使用的配置:

[email protected]:~# 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 [email protected][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
...

解决

  1. 直接修改etc/init.d/dnsmasq文件,仿照miwif.com的方式添加需要的域名
  2. 文件中复制了/etc/custom_hosts文件,但是这个文件中提示#generated by plugin, DONOT edit it,也不知道可不可以用,查看文件创建时间应该是买来的时候,估计可以使用。

后续

最后发现小米的管理页面有个自定义HOSTS功能,做到就是这件事,就是利用修改/etc/custom_hosts这个文件实现的。