局域网添加DNS服务器进行域名解析_局域网dns-程序员宅基地

技术标签: 网络  运维  服务器  

一.背景

在家庭局域网中,假如有若干个设备连接在同一台路由其中。路由器便和下属设备形成了一个小型局域网。 可以在局域网中我们可以通过设备的 ip 地址互相访问。 但是管理内部的局域网的机器过多,ip地址也变得越来越多,不想浪费精力在对ip的记忆上,而且使用IP远程登录非常容易搞混,为了解决这种问题, 比较简单的有两种方式。第一种方式是通过修改hosts文件,来完成域名和ip的映射,这种只能对一台机器生效,而且例如手机之类的不容易修改hosts的设备也比较麻烦,不过有些新的路由器或者是软路由可以在路由器层面修改hosts来达到适配所有设备的能力。另外一种解决方法是搭建一个局域网的DNS服务器,使用不同的域名指向不同的机器ip。 使用自建DNS服务器的好处远不止这一个,还有很多其他的好处。例如当IP地址发生变化时,只需要更改DNS服务器的设置即可。

二.DNS简介

要搭建DNS服务器,首先需要了解一下什么是DNS。

什么是 DNS?

DNS 是将域转换为其服务器的数字 IP 地址的系统,例如将域名www.web-server.com转换成ip地址127.0.0.1。每当使用域名发出网络请求时,系统都会执行 DNS 查询以确定域名对应的服务器ip地址。

为什么要运行自己的 DNS服务器?

自建DNS服务器可以更好地控制网络。例如能够配置网络级域映射,web-server192.168.0.101。将路由器配置为使用你自己搭建的 DNS服务器, 可以让任何连接到该路由器设备都能够通过http://web-server访问到192.168.0.101,自建DNS服务器可以对域名解析进行集中式的管理,而不是在每台设备上单独修改/etc/hosts, 自建DNS服务器将适用于你连接到网络的所有内容,包括无法通过其他方式自定义其路由堆栈的嵌入式硬件。自建 DNS 服务器还可以提高性能并提供额外的弹性层。在发生大规模 DNS 中断时可以为你与之交互的关键服务使用具有长期缓存的自定义服务器可以帮助你度过所选上游提供商的停机时间。

DNS 与 Dnsmasq

Dnsmasq是一个轻量级的 DNS 服务器,大多数 Linux 发行版中都可以安装它。
自建Dnsmasq服务器流程如下所示:

  1. 路由器接收来自你连接的设备之一的请求。路由器将配置为使用 Dnsmasq 主机作为其 DNS 服务器。
  2. Dnsmasq 会检查它是否有定义的域名路由,例如web-serverto 192.168.0.101。如果请求是http://web-server/example-page,它将发送192.168.0.101回路由器。
  3. 当 Dnsmasq 没有匹配的路由时,它会将 DNS 请求转发给 Google 的8.8.8.8,从而在公共互联网上启用解析。这确保你在使用自己的 DNS 时仍然可以访问更广泛的网络。

你无需在客户端设备上进行任何配置更改。路由器后面的所有东西最终都会通过 Dnsmasq 进行 DNS 查询。但是,值得注意的是,所有流行的桌面和移动操作系统都支持设置 DNS 服务器,因此您可以将单个设备配置为使用 Dnsmasq,而无需在路由器级别启用它。

三.Dnsmasq搭建DNS服务器

1.Dnsmasq简介

Dnsmasq 是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务和DNS服务结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。

2.安装Dnsmasq

Ubuntu安装dnsmasq

apt install dnsmasq -y

Docker安装dnsmasq

  1. 下载镜像
docker pull jpillora/dnsmasq
  1. 运行镜像
docker run \
    --name dnsmasq \
    -d \
    -p 53:53/udp \
# web控制端
    -p 5380:8080 \
# 账号
    -e "HTTP_USER=foo" \
# 密码
    -e "HTTP_PASS=bar" \
    --restart always \
    jpillora/dnsmasq

3.Linux53端口被systemd-resolve占用的解决方法

在Linux系统中有些软件(如:Dnsmasq解锁Netflix中的Dns等服务)可能要用到53的端口,但有些系统提示已使用(required port 53 already in use )。使用lsof -i:53查看53端口是否是是被systemd-resolved进程所占用了。

  1. 先停用 systemd-resolved 服务:
systemctl stop systemd-resolved
  1. 编辑 /etc/systemd/resolved.conf 文件:
vi /etc/systemd/resolved.conf
  1. 修改配置如下:
[Resolve]
DNS=8.8.8.8  #取消注释,增加dns
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
DNSStubListener=no  #取消注释,把yes改为no
  1. 最后运行下面命令即可:
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

4.配置Dnsmasq

打开/etc/dnsmasq.conf 配置文件,添加需要映射的域名和ip地址:

...
#dnsmasq config, for a complete example, see:
#  http://oss.segetech.com/intra/srv/dnsmasq.conf
#dns解析日志
log-queries
#定义主机与IP映射
address=/www.qinglong.com/172.17.205.28
address=/www.baihu.com/172.17.205.32
...

5.路由器设置DNS服务器

通过上面的步骤 ,我们已经设置好一个 DNS 服务器。接下来,进入你的路由器管理界面,使用你的设置,把你路由器的 DNS 服务器指向刚才机器在局域网的静态 IP。 也可以配置你的PC电脑的 DNS 指向这个地址。 建议是,保留原始的 DNS 主机地址比如:

192.168.1.1

192.168.31.223
  • 第一个是我的原始路由器的 DNS 地址

  • 第二个是我设置的地址,这样子可以作为补充。

如果你 dnsmasq 设置没有继承 路由器主机的 DNS 服务,可以设置第二个 DNS 服务器为路由器主机 ,这样可以保证原来的状态。

6.远程网页查看Dnsmasq信息

访问Dnsmasq安装主机的8080端口就可以进入管理界面:

http://127.0.0.1:8080/
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/unreliable_narrator/article/details/125980825

智能推荐

HDMI设计8--Video In to AXI4-Stream and AXI4-Stream to Video Out_videotoaxi-程序员宅基地

文章浏览阅读3.9k次,点赞2次,收藏23次。Reference1:https://china.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/v_vid_in_axi4s/v5_0/pg043_v_vid_in_axi4s.pdfReference2:https://china.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/v_axi4s_vid_out/v4_0/p_videotoaxi

Coding Bootcamp 能否帮你找到工作?-程序员宅基地

文章浏览阅读312次。专栏 | 九章算法网址 | http://www.jiuzhang.com随着互联网行业的日益壮大,软件、编程等技术类职业成为炙手可热的职业。对此感兴趣的人都在纷纷挑选编程训练营(Coding Bootcamp)的课程,但是市场上的训练营课程质量良莠不齐,这可能让很多朋友心中都有一个困惑,参加训练营真的有用吗?今天我们就来聊一聊,你到底是否适合参加编程训练营。你是否适合参加编程训..._coding bootcamp 三分地

神经网络基础知识-程序员宅基地

文章浏览阅读3.9k次,点赞4次,收藏43次。神经网络基础知识简介_神经网络基础

java中selenium设置chrome浏览器为开发者模式与IP代理_selenium java chrome proxy-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏11次。java中selenium设置chrome浏览器为开发者模式与IP代理前言代码前言之前为公司写了个爬虫项目,有时候为了绕过网站的反爬机制需要用到ip代理以及设置浏览器为开发者模式,看了一些selenium官方文档,没发现有具体设置的代码,在网上查了很久发现很少有整理这块代码的文章,写python+selenium的就很多,但是python的selenium中设置这两个东西的代码跟在java中区..._selenium java chrome proxy

sed和shell:删除文件的第n行和倒数第n行_sed删除倒数3行-程序员宅基地

文章浏览阅读2.9w次,点赞6次,收藏13次。删除第三行,并把结果送至文件newfile sed '3d' file>newfile 删除倒数第三行,把结果送至文件newfile tac file|sed '3d'|tac >newfile删除倒数第三行,bash shell版本linenum=`cat file | wc -l`linenum_last3=`expr $linenum - 3`sed -n ''"$linenum_last_sed删除倒数3行

【JS】JavaScript复制内容到剪贴板-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏9次。常见方法查了一下万能的Google,现在常见的方法主要是以下两种:第三方库:clipboard.js原生方法:document.execCommand()分别来看看这两种方法是如何使用的。clipboard.js这是clipboard的官网:https://clipboardjs.com/,看起来就是这么的简单。引用直接引用:<script src="di..._js实现复制图片到剪切板

随便推点

Ng-Bootstrap 折叠(Collapse)插件制作侧边栏导航菜单_在项目中使用ng-collapse-程序员宅基地

文章浏览阅读7.3k次。 Collapse:https://github.com/Foxandxss/ngbs-demo/tree/5ae300e64ad0afd59dad2921dd1e6b517e9652d3/demo/src/app/components/collapsets:import { NgbCollapse } from'@ng-bootstrap/ng-bootstrap';htm..._在项目中使用ng-collapse

Ubuntu 安装java 1.8-程序员宅基地

文章浏览阅读85次。1、下载java 1.8地址:​ http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html注意:​ Ubuntu :.tar.gz​ Redhat:.rmp2、创建java 文件夹在根目录下面创建java文件夹$ cd /$ sudo mkdir java$ cd..._ubuntu 安装java1.8

VUE3的全局事件总线_vue3全局事件总线-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏9次。全局事件总线。_vue3全局事件总线

Java基础(3):数组和异常抛出_抛出异常怎么将整个数组抛出来-程序员宅基地

文章浏览阅读836次。Java安装参考:https://blog.csdn.net/Zachcc/article/details/94646514JavaSE基础(2):https://mp.csdn.net/postedit/94906798Java数组声明数组变量,首先必须声明数组变量,才能在程序中使用数组。比如:int[ ] number或 int number[ ]创建数组..._抛出异常怎么将整个数组抛出来

字符串和字节流相互转换_字符串转字节流-程序员宅基地

文章浏览阅读6.5k次。public static void main(String[] args) throws IOException { String a="babbabababbababababab"; byte[] buff = new byte[1024]; //从字符串获取字节写入流 InputStream is = new ByteArrayInputStream(a.g..._字符串转字节流

自定义系列_custom fill series-程序员宅基地

文章浏览阅读252次。自定义系列自定义系列(custom series),是一种系列的类型。它把绘制图形元素这一步留给开发者去做,从而开发者能在坐标系中自由绘制出自己需要的图表。Apache EChartsTM 为什么会要支持 自定义系列 呢?ECharts 内置支持的图表类型是最常见的图表类型,但是图表类型是难于穷举的,有很多小众的需求 echarts 并不能内置的支持。那么就需要提供一种方式来让开发者自己扩展。另一方面,所提供的扩展方式要尽可能得简单,例如图形元素创建和释放、过渡动画、tooltip、数据区域缩放(da_custom fill series