0%

搭建局域网DNS服务器

局域网有非常多的机器时,使用IP远程登录非常容易搞混。最好的解决方法是搭建一个局域网的DNS服务器,使用不同的域名指向不同的机器。使用域名的好处远不止这一个,还有很多其他的好处。例如当IP地址发生变化时,只需要更改DNS服务器的设置即可。

DNS简介

Domain Name System, 更加详细的介绍参考以下链接。

DNS软件

下面列出了常见的DNS软件。本次搭建选用dnsmasq,专门争对小型局域网设计,资源占用低,易配置。

dnsmasq

下面列出了dnsmasq相关的网页。

dnsmasq安装

dnsmasq只支持Linux系统,直接使用发行版本自带的包管理器安装即可。

1
2
3
4
// ubuntu
apt-get install dnsmasq
// cent-os
yum -y install dnsmasq

考虑到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
2
3
4
5
6
7
8
9
10
11
12
# A, AAAA 和 PTR 记录
#host-record=<name>[,<name>....],[<IPv4-address>],[<IPv6-address>][,<TTL>]
# CNAME 别名记录
#cname=<cname>,<target>[,<TTL>]
# SRV 记录
#srv-host=<_service>.<_prot>.[<domain>],[<target>[,<port>[,<priority>[,<weight>]]]]
# TXT 记录
#txt-record=<name>[[,<text>],<text>]
# PTR 记录
#ptr-record=<name>[,<target>]
# Include all files in a directory which end in .conf
#conf-dir=/etc/dnsmasq.d/,*.conf

更改DNS服务器地址

需要将系统的DNS服务器地址更改为自己搭建的DNS服务器(即路由器),域名才能够解析。为了减少配置,可以在路由器设置默认的DNS服务器地址。进入路由器的web管理界面,内部网络(LAN) -> DHCP服务器

如果不想使用路由器设置的默认DNS服务器,也可以使用下面的方法自定义系统的DNS服务器。

winsows

  1. 进入控制面板,网络和Internet,网络和共享中心
  2. 点击更改适配器设置
  3. 选中当前使用的网卡,右键,选择属性
  4. 双击IPv4
  5. 自定义DNS服务器地址
  6. 在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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@localhost ~]# nslookup baidu.com
Server: 192.168.50.1
Address: 192.168.50.1#53

Non-authoritative answer:
Name: baidu.com
Address: 220.181.38.251
Name: baidu.com
Address: 220.181.38.148

[root@localhost ~]# dig baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 382
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;baidu.com. IN A

;; ANSWER SECTION:
baidu.com. 589 IN A 220.181.38.148
baidu.com. 589 IN A 220.181.38.251

;; Query time: 1 msec
;; SERVER: 192.168.50.1#53(192.168.50.1)
;; WHEN: Sat Oct 30 13:17:40 CST 2021
;; MSG SIZE rcvd: 70