局域网有非常多的机器时,使用IP远程登录非常容易搞混。最好的解决方法是搭建一个局域网的DNS服务器,使用不同的域名指向不同的机器。使用域名的好处远不止这一个,还有很多其他的好处。例如当IP地址发生变化时,只需要更改DNS服务器的设置即可。
¶DNS简介
Domain Name System, 更加详细的介绍参考以下链接。
- DNS原理入门
- wiki
- RFC 1034 DOMAIN NAMES - CONCEPTS AND FACILITIES
- RFC 1035 DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION
¶DNS软件
下面列出了常见的DNS软件。本次搭建选用dnsmasq,专门争对小型局域网设计,资源占用低,易配置。
- BIND(Berkeley Internet Name Domain),使用最广的DNS软件
- DJBDNS(Dan J Bernstein’s DNS implementation)
- MaraDNS
- Name Server Daemon(Name Server Daemon)
- PowerDNS
- Dnsmasq
¶dnsmasq
下面列出了dnsmasq相关的网页。
- 主页:https://thekelleys.org.uk/dnsmasq/doc.html
- man page:https://thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html
- 配置文件示例:https://thekelleys.org.uk/dnsmasq/docs/dnsmasq.conf.example
- 维基百科:https://zh.wikipedia.org/wiki/Dnsmasq
¶dnsmasq安装
dnsmasq只支持Linux系统,直接使用发行版本自带的包管理器安装即可。
1 | // ubuntu |
考虑到DNS服务器最好是24小时开机,所以安装dnsmasq的最佳位置是路由器。巧了,路由器直接集成了dnsmasq,不用安装,直接使用即可。
需要注意的是,路由器出厂自带的固件可能不支持更改dnsmasq的配置文件,需要刷第三方的老毛子或梅林固件。关于这部分的内容,可以搜索引擎找到更详细的内容,这里不展开了。下面以华硕AX86U、梅林386.2为例。
¶dnsmasq配置
¶ssh登录路由器
路由器的web界面没有找到dnsmasq的配置页面,所以只能ssh登录路由器,直接更改配置文件。需要先进入路由器的web管理页面,在系统管理 -> 系统设置页面,打开ssh登录。
¶配置文件路径
路由器的rootfs是只读文件系统,所以不能直接更改配置文件/etc/dnsmasq.conf。查看梅林固件的手册,发现可以将自定义配置写在/jffs/configs/dnsmasq.conf.add。/jffs是一个可读写的文件系统,并且重启之后配置文件也不会丢失。
在网上查找资料时,有个帖子说频繁向jffs文件系统写入数据,容易导致flash损坏,建议将配置文件存储在U盘。个人觉得没有必要,因为配置文件的数据量比较小,而且配置文件存储在U盘,还会增加系统的不稳定性。
¶重启服务
更改配置文件之后,执行命令service restart_dnsmasq重启服务,配置才会生效。重启之后,/jffs/configs/dnsmasq.conf.add文件的内容都会出现在/etc/dnsmasq.conf。所以可以通过查看/etc/dnsmasq.conf的内容,确认配置是否生效。
重启命令中的下划线必须要有。
¶常用配置
下面列出了有关DNS的常用设置。更多设置可以参考dnsmasq.conf.example。
1 | # A, AAAA 和 PTR 记录 |
¶更改DNS服务器地址
需要将系统的DNS服务器地址更改为自己搭建的DNS服务器(即路由器),域名才能够解析。为了减少配置,可以在路由器设置默认的DNS服务器地址。进入路由器的web管理界面,内部网络(LAN) -> DHCP服务器。
如果不想使用路由器设置的默认DNS服务器,也可以使用下面的方法自定义系统的DNS服务器。
¶winsows
- 进入控制面板,网络和Internet,网络和共享中心
- 点击更改适配器设置
- 选中当前使用的网卡,右键,选择属性
- 双击IPv4
- 自定义DNS服务器地址
- 在cmd执行命令
ipconfig /flushdns刷新DNS
¶Linux
更改/etc/resolv.conf,增加一条nameserver记录即可,格式如下。
1 | nameserver x.x.x.x |
某些DHCP客户端可能会修改
/etc/resolv.conf,导致系统重启后自定义设置丢失。有关这部分的内容,请参考对应DHCP客户端的手册。
¶Android
TODO
¶IOS
TODO
¶DNS调试命令
windows 系统支持nslookup指令,但是不支持dig。
1 | [root@localhost ~]# nslookup baidu.com |