之前使用360路由器,可以直接在管理后台配置hosts,这样就可以将家里内网的IP绑上域名了。后来换了个更强大的路由器RT-AC86U,刷了梅林固件,虽说更强大了,但是配置起来却没有那么方便了。
实现同样的内网IP绑域名,步骤如下:
1. 在后台开启ssh和jffs功能;
2. ssh登录后,添加文件/jffs/configs/dnsmasq.conf.add,内容为:addn-hosts=/jffs/configs/hosts;
3. 然后添加/jffs/configs/hosts,内容就跟平时修改/etc/hosts一样;
4. 重启dns服务:service restart_dnsmasq;
5. 拦截所有指定域名的dns查询:
iptables -t nat -I PREROUTING -p udp -m udp --dport 53 -m string --hex-string "|04|xxxx|03|com|" --algo bm -j REDIRECT --to-port 53
这里有几点需要注意的:
1. 直接修改/etc/hosts文件,好像不太行,路由器内部管用,但是外部nslookup不行,感觉是梅林固件的dnsmasq没有加载/etc/hosts,而且重启路由器之后,/etc/hosts就清空重置了。
2. 之所要拦截所有的指定域名的dns查询(这里是以xxx.com域名为例,只要包含该子串,即重定向),是因为可能有的电脑上写死了dns地址,比如8.8.8.8之类,这样路由器只是转发请求,并不会使用本地的绑定设定。特别注意,没指定dns解析地址的,走PREROUTING -> INPUT,指定了外网dns解析地址的,走PREROUTING -> FORWARD。
以上设置之后,便可以实现内网IP绑定自定义域名。但有个问题,就是iptables规则在路由器重启之后就没了,而且service restart_dnsmasq也需要在重启后执行一次才行,所以需要找到路由器启动后执行的脚本添加两行命令,但试了半天没定位到梅林固件的启动脚本,等以后再完善。