前言
今天想给家里面搭一个内网系统,但是如果其他主机来访问一定要加内网ip,感觉会很麻烦,所以就想用树莓派搭建一个DNS服务器,于是乎就有了这篇博客~。
正文
1. 内网之间如何设置DNS
其实这里有两种方法
1.1 设置每台主机的/etc/hosts
文件
可以在内网中的每台主机上修改/etc/hosts
文件,添加一个条目,将<所需要访问的内网IP>
映射到home
,这样就可以通过http://home:3000
访问应用了。
在每台主机上执行以下操作:
- 打开
/etc/hosts
文件 - 添加
<所需要访问的内网IP> home
- 保存并且退出
完成这些步骤后,在内网中的其他机器上,你就可以通过http://home:3000
访问运行在<所需要访问的内网IP>
上的应用了。
1.2 设置本地DNS服务器
或者如果不在每台主机上主动修改/etc/hosts
文件,就可以设置一个本地的DNS服务器(如dnsmasq
)来处理内网的域名解析。
在DNS服务器上执行以下操作:
- 安装
dnsmasq
:sudo apt-get install dnsmasq
- 配置
dnsmasq
,编辑/etc/dnsmasq.conf
文件,添加条目:address=/home/<所需要访问的内网IP>
- 重启
dnsmasq
服务:sudo systemctl restart dnsmasq
配置好本地DNS服务器后,就可以将内网的其他主机的DNS设置指向这个DNS服务器了,这样其他主机就可以通过http://home:3000
访问
2. 测试
在其他主机上,通过ping
或者nslookup
命令来验证DNS配置来看是否生效ping home
或者nslookup home
如果DNS配置正确,就能看见home
被解析为<所需要访问的内网IP>
或者在DNS服务器查询sudo lsof -i :53
,如果出现类似的输出,那么就说明在DNS服务器上是成功了
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dnsmasq 1234 nobody 4u IPv4 12345 0t0 UDP *:53
dnsmasq 1234 nobody 5u IPv4 12346 0t0 TCP *:53 (LISTEN)
3. 问题
3.1 Address already in use
如果出现了dnsmasq: failed to create listening socket for port 53: Address already in use
这样的问题,有可能是systemd-resolved
占用了默认的53端口,可以检查systemd-resolved
的服务状态来看是否有占用systemctl status systemd-resolved
。
如果systemd-resolved
正在运行并且占用了53端口,如果我们不需要,那我们就可以禁用它,通过以下命令:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
然后再尝试系统dnsmasq
,通过命令sudo systemctl start dnsmasq
,这样一般就成功了。喵~!
3.2 VPN
有时候即使你配置正确了,通过ipconfig
或者ifconfig
里面找到了你的<所需要访问的内网IP>
,那么有可能是因为你的VPN,为了安全起见,直接覆盖了你的DNS配置文件。
这个时候,只有:
- 配置VPN
- 关闭VPN
总结
学习一下如何用Ubuntu 搭建一个DNS服务器~!
参考
[1] 自己
[2] ChatGPT
Q.E.D.