轻量级域名解析服务器之dnsmasq

2023-11-09

1、dnsmasq的简介

dnsmasq提供DNS缓存和DHCP服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存DNS请求来提高对访问过的网址的连接速度。作为DHCP服务器,dnsmasq可以用于为局域网电脑分配内网ip地址和提供路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。此外它还自带了一个PXE服务器。

2、dnsmasq的主要作用

  1. 将Dnsmasq作为本地DNS服务器使用,直接修改电脑的本地DNS的IP地址即可。
  2. 应对ISP的DNS劫持(反DNS劫持),输入一个不存在的域名,正常的情况下浏览器是显示无法连接,DNS劫持会跳转到一个广告页面。先随便nslookup 一个不存在的域名,看看ISP商劫持的IP地址。
  3. 智能DNS加快解析速度,打开/etc/dnsmasq.conf文件,server=后面可以添加指定的DNS,例如国内外不同的网站使用不同的DNS。
    国内指定DNS
    server=/cn/114.114.114.114
    server=/taobao.com/114.114.114.114
    server=/taobaocdn.com/114.114.114.114
    国外指定DNS
    server=/google.com/223.5.5.5
  4. 屏蔽网页广告,将指广告的URL指定127这个IP,就可以将网页上讨厌的广告给去掉了。
    address=/ad.youku.com/127.0.0.1
    address=/ad.iqiyi.com/127.0.0.1
  5. 指定域名解析到特定的IP上。这个功能可以让你控制一些网站的访问,非法的DNS就经常把一些正规的网站解析到不正确IP上。
    address=/www.baidu.com/123.123.123.123
  6. 管理控制内网DNS,首先将局域网中的所有的设备的本地DNS设置为已经安装Dnsmasq的服务器IP地址。然后修改已经安装Dnsmasq的服务器Hosts文件:/etc/hosts,指定域名到特定的IP中。
    例如想让局域网中的所有用户访问www.freehao123.com时跳转到192.168.0.2,添加:192.168.0.2 www.freehao123.com在Hosts文件中既可,整个过程也可以说是“DNS劫持”。

3、dnsmasq的解析流程

  1. dnsmasq先去解析hosts文件;
  2. 再去解析/etc/dnsmasq.d/下的*.conf文件;
  3. 上面这些文件的优先级要高于dnsmasq.conf,我们自定义的resolv.dnsmasq.conf中的DNS也被称为上游DNS,这是最后去查询解析的。

如果不想用hosts文件做解析,我们可以在/etc/dnsmasq.conf中加入no-hosts这条语句,这样的话就直接查询上游DNS了;
如果我们不想做上游查询,就是不想做正常的解析,我们可以加入no-reslov这条语句。

4、dnsmasq的参数及常用设置说明(/etc/dnsmasq.conf )

1)dnsmasq经常修改的比较重要参数说明

resolv-file:定义dnsmasq从哪里获取上游DNS服务器的地址, 默认从/etc/resolv.conf获取
strict-order:表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止
listen-address:定义dnsmasq监听的地址,默认是监控本机的所有网卡上
address:启用泛域名解析,即自定义解析a记录,例如:address=/long.com/192.168.115.10 访问> > > long.com时的所有域名都会被解析成192.168.115.10
bogus-nxdomain:对于任何被解析到此IP的域名,将响应 NXDOMAIN 使其解析失效,可以多次指定,通常用于对于访问不存在的域名,禁止其跳转到运营商的广告站点
server:指定使用哪个DNS服务器进行解析,对于不同的网站可以使用不同的域名对应解析。
例如:server=/google.com/8.8.8.8 #表示对于google的服务,使用谷歌的DNS解析。

2)查看配置文件语法是否正确,可执行下列命令

dnsmasq --test

在这里插入图片描述

3)DNS 缓存设置

要在单台电脑上以守护进程方式启动dnsmasq做DNS缓存服务器,编辑/etc/dnsmasq.conf,添加监听地址:

listen-address=127.0.0.1

如果用此主机为局域网提供默认DNS,请用为该主机绑定固定IP 地址,设置:

listen-address=10.10.x.x

这种情况建议配置静态IP
多个ip地址设置:

listen-address=127.0.0.1,10.10.x.x 

4)三个以上域名服务器

Linux处理DNS 请求时有个限制,在 resolv.conf 中最多只能配置三个域名服务器(nameserver)。作为一种变通方法,可以在 resolv.conf 文件中只保留localhost 作为域名服务器,然后为外部域名服务器另外创建 resolv-file 文件。首先,为dnsmasq 新建一个域名解析文件:

cat /etc/dnsmasq.d/resolv.dnsmasq.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

然后编辑 /etc/dnsmasq.conf 让 dnsmasq 使用新创建的域名解析文件:

cat /etc/dnsmasq.conf
...
resolv-file=/etc/dnsmasq.d/resolv.dnsmasq.conf
...

5、dnsmasq的部署

1)安装dnsmasq

yum -y install dnsmasq

安装完毕后,可以通过dnsmasq -v命令查看版本,有版本号出来就代表安装上了。
在这里插入图片描述

2)修改Dnsmasq配置文件dnsmasq.conf

修改配置文件前一定要先备份

cp /etc/dnsmasq.conf  /etc/dnsmasq.conf.bak
echo 'resolv-file=/etc/dnsmasq.d/resolv.dnsmasq.conf' >> /etc/dnsmasq.conf  #表示dnsmasq 会从这个指定的文件中寻找上游dns服务器
echo 'addn-hosts=/etc/dnsmasq.d/dnsmasq.hosts' >> /etc/dnsmasq.conf  #添加读取额外的 hosts 文件路径,可以多次指定;也可以指定为目录,会自动扫描此目录下的配置文件
cat /etc/dnsmasq.conf
...
strict-order      #取消这一行的注释,表示严格按照resolv.conf中的顺序进行查找
listen-address=127.0.0.1,192.168.115.120   #多个ip地址设置;如果想允许所有的用户使用你的DNS解析服务器,把listen-address去掉即可
...

在这里插入图片描述

3)修改/etc/resolv.conf文件,并创建resolv.dnsmasq.conf和dnsmasq.hosts文件

echo 'nameserver 127.0.0.1' > /etc/resolv.conf
yes | cp /etc/resolv.conf  /etc/dnsmasq.d/resolv.dnsmasq.conf
echo 'nameserver 8.8.8.8' >>/etc/dnsmasq.d/resolv.dnsmasq.conf
echo 'nameserver 10.10.0.120' >>/etc/dnsmasq.d/resolv.dnsmasq.conf
yes | cp /etc/hosts  /etc/dnsmasq.d/dnsmasq.hosts

resolv.dnsmasq.conf中设置的是真正的Nameserver,可以填写各大商家提供的免费DNS地址。
在这里插入图片描述

4)启动Dnsmasq

systemctl start dnsmasq             #启动dnsmasq服务
systemctl enable dnsmasq         #设置成开机自启动
netstat -antp|grep 53                  #查看端口是否启动成功

5)测试是否配置成功。

第一次查询耗时150ms,第二次查询耗时0ms
在这里插入图片描述

6、dnsmasq的使用及实现的功能

1)作为本地DNS使用

将dnsmasq作为本地DNS服务器使用,直接修改电脑的本地DNS的IP地址即可。
在这里插入图片描述
ping harbor私服的域名并访问,发现可以ping通且可以正常访问
在这里插入图片描述

2)智能DNS加快解析速度。

打开/etc/dnsmasq.conf文件,server=添加指定的DNS,例如国内外不同的网站使用不同的DNS。

cat /etc/dnsmasq.conf
...
国内指定DNS
server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/taobaocdn.com/114.114.114.114
国外指定DNS
server=/google.com/223.5.5.5
...

3)屏蔽网页广告

将广告的URL指定127.0.0.1这个IP,就可以将网页上讨厌的广告给去掉了。

cat /etc/dnsmasq.conf
...
address=/ad.youku.com/127.0.0.1
address=/ad.iqiyi.com/127.0.0.1
...

4)指定域名解析到特定的IP上

这个功能可以让你控制一些网站的访问,非法的DNS就经常把一些正规的网站解析到不正确IP上。

cat /etc/dnsmasq.conf
...
address=/www.baidu.com/123.123.123.123
...

访问www.baidu.com会发现无法访问此网站
在这里插入图片描述

5)管理控制内网DNS

首先将局域网中的所有的设备的本地DNS设置为已经安装dnsmasq的服务器IP地址;然后修改已经安装dnsmasq的服务器hosts文件:/etc/hosts,指定域名到特定的IP中。
例如:想让局域网中的所有用户访问www.http123.com时跳转到10.10.0.111,添加'10.10.0.111 www.http123.com'hosts文件中既可,整个过程也可以说是"DNS劫持"。

echo'10.10.0.111 www.http123.com' >> /etc/hosts

在这里插入图片描述
浏览器访问www.http123.com就会自动跳转到10.10.0.111上
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

轻量级域名解析服务器之dnsmasq 的相关文章

  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d)

    我正在尝试执行systemd计时器并希望将执行脚本的输出保存在每个日期的文件中 这是我的ExecStart脚本中的 service file ExecStart bin bash c echo date Y m d gt gt home u
  • 每个命令都返回“bash:<命令>:找不到命令...”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我刚刚安装了 Scala 并添加了路径gedit bashrc export SCALA HOME home avijit sca
  • 后台分叉无法正常工作[重复]

    这个问题在这里已经有答案了 我运行这个程序 在前景和背景中 int main int pid printf App Start pid d n getpid while 1 pid fork if pid 0 printf Child n
  • 如何从 PROC 获取有关子进程的信息

    我正在尝试编写一个以几个进程作为参数的程序 然后父进程执行每个子进程并打印出一些相关的统计信息 示例 generate ls l 将生成一个程序 打印出有关 ls l 的一些统计信息 特别是其系统时间 用户时间和上下文切换次数 我不想使用
  • 让 TeXstudio 在 linux mint 中工作:找不到文件“url.sty”。

    刚刚切换到 Linux Mint 以前的顽固 Windows 用户 我在尝试安装 TeXstudio 时遇到一些问题 Sudo apt get install texstudio 给了我一个正确的安装 至少 我是这么认为的 但是当我尝试构建

随机推荐

  • 腾讯云被ddos攻击解决方案

    腾讯云是国内仅此次阿里云的云服务商 很多创业者都使用他们家云服务器 自然被DDOS攻击的也不少 今天来介绍下使用腾讯云服务器被DDOS攻击的解决办法 一 购买腾讯高防IP 也称腾讯大禹BGP高防IP 是一个运行在腾讯云内网的高防IP服务 适
  • nginx (1):ubuntu下安装启动nginx

    1 安装依赖 sudo apt get install gcc zlib1g dev libpcre3 libpcre3 dev libssl dev 2 下载nginx wget https nginx org download ngin
  • 【vue 页面下滚到目标元素的位置,目标元素自动吸顶(自动悬浮吸附到页面顶部)】

    vue 页面下滚到目标元素的位置 目标元素自动吸顶 自动悬浮吸附到页面顶部 原文链接 https blog csdn net weixin 41192489 article details 112320596 1 监听页面滚动事件 监听页面
  • xxl-job(2.4.1)使用spring-mvc替换netty的功能

    xxl job 2 4 1 使用spring mvc替换netty的功能 1 xxl job core引入spring mvc的依赖
  • APP自动化测试-11.webview技术原理

    APP自动化测试 11 webview技术原理 文章目录 APP自动化测试 11 webview技术原理 前言 一 获取webview 二 根据webview启动chromedriver 总结 前言 根据日志 简单记录webview运行的机
  • Caffe 源码阅读笔记 [基本模块] Syncedmem & Blob

    syncedmem syncedmem管理一段大小为size的内存 这段内存可以从GPU或者主机内存分配 syncedmem负责GPU和主机内存之间的同步 如果数据是在GPU里而要从主机内存取出 syncedmem会先把数据从GPU内存me
  • 服务器怎么设置无线网络共享,无线路由器怎么设置usb网络共享管理

    众所周知 路由器长久以来一直是计算机网络的核心设备 其重要性不可低估 那么你知道无线路由器怎么设置usb网络共享管理吗 下面是学习啦小编整理的一些关于无线路由器设置usb网络共享管理的相关资料 供你参考 无线路由器设置usb网络共享管理的方
  • 实现一个简单的二叉树

    实现一个简单的二叉树 语言 Objective C 整体上还是挺简单的 所以就直接上代码了 1 二叉树 由 节点 和 枝干 组成 且每个节点最多只有两个子节点的树形数据结构 2 代码实现 2 1 节点类 创建一个简单的节点类 这个类可以保存
  • Chatopera王海良:大厂螺丝钉还是开源极客?年轻技术人如何选择?

    他因为追求创新毅然放弃了大厂稳定的工作 参与开源并成立了开源商业公司 他相信 开源可以极大地助力开发者成长 那么 对于年轻开发者而言 如何通过参与开源实现跳跃式发展 本期 开源访谈录 邀请到了Chatopera CEO王海良来分享他的见解
  • 手把手教会你用Python爬虫爬取网页数据!!

    其实在当今社会 网络上充斥着大量有用的数据 我们只需要耐心的观察 再加上一些技术手段 就可以获取到大量的有价值数据 这里的 技术手段 就是网络爬虫 今天就给大家分享一篇爬虫基础知识和入门教程 什么是爬虫 爬虫就是自动获取网页内容的程序 例如
  • IAR编译错误

    1 错误提示 Error e104 Failed to fit all segments into specified ranges Problem discovered in segment XDATA N Unable to place
  • Linux命令·cp

    cp命令用来复制文件或者目录 是Linux系统中最常用的命令之一 一般情况下 shell会设置一个别名 在命令行下复制文件时 如果目标文件已经存在 就会询问是否覆盖 不管你是否使用 i参数 但是如果是在shell脚本中执行cp时 没有 i参
  • 机器学习中最基本的概念之一:数据集、样本、特征和标签

    本文重点 数据集 样本 特征和标签是机器学习中的重要概念 这些概念在机器学习算法的设计和实现过程中起着至关重要的作用 在本文中 我们将对这些概念进行详细的讲解 以便更好地理解机器学习算法的基本原理和应用 一 数据集 数据集是机器学习中最基本
  • python3 requests https 请求 报 SSLContext 相关递归错误

    一 错误信息 2019 11 19 15 14 40 Provider before requests post 2019 11 19 15 14 41 error infoTraceback most recent call last F
  • iOS开发捷径学习(一)

    结合 iOS开发捷径学习 这本书 分几章系统梳理Interface Builder相关知识 整体现状 iOS界面的开发 主要是采用纯代码和Interface Builder来进行 苹果开发初期面临很少的可用内存 纯代码进行UI的绘制自己控制
  • wordpress开启子目录多站点模式并给子站绑定独立域名

    wordpress开启子目录多站点模式并 wordpress开启多站点模式 多站点模式即是使用一套wordpress程序就可以搭建多个独立 互不干扰的wordpress站点 各站点之间的用户 文章 附件等都互不干预 wordpress的多站
  • 论文阅读-DFN: Dynamic Filter Networks-动态卷积网络

    一 论文信息 论文名称 Dynamic Filter Networks 作者团队 NIPS2016 二 动机与创新 卷积层是通过将上一层的特征映射与一组过滤器进行卷积计算输出特征映射 滤波器是卷积层的唯一参数 通常用反向传播算法在训练中学习
  • 天地图专题二:在天地图上循环显示标注点以及悬停显示信息窗口

    上一文章讲了如何加载天地图 其实是很简单的 只要看一下天地图官方的代码示例就能搞出来 只是为了保持文章系列的完整性 所以才写了出来 官方api http api tianditu com api new webIndex html 这一文章
  • 我的笔记本电脑键盘左ctrl键和fn键功能互换了

    进入BIOS设置 Device Option中将Swap Fn Ctrl Key的属性设为Disabled
  • 轻量级域名解析服务器之dnsmasq

    1 dnsmasq的简介 dnsmasq提供DNS缓存和DHCP服务功能 作为域名解析服务器 DNS dnsmasq可以通过缓存DNS请求来提高对访问过的网址的连接速度 作为DHCP服务器 dnsmasq可以用于为局域网电脑分配内网ip地址