在日常开发中,有这么一个需求:

大家在公司内网同一个网段下,一般情况上网会由网关(一般是路由器)的DHCP服务分配IP。公司内网里放了几台服务器,分别配置成静态IP,这些IP是DHCP配置时预留的。服务器上会放置一些文件共享,所以有个Samba服务器。也配置了一些wiki及git等服务。大家可以使用IP访问这些服务。但难记,IP偶尔也会变,总归不如域名方便。但要每个人都改 hosts 又很麻烦,而且变更起来就更麻烦了。

一直想在内网布置一个域名解析的服务器,但不知道怎么搞定。今天跟一位IT运维请教后,才恍然大悟。是自己一直想复杂了。

整个配置过程大概有这么几步:

  1. 取内网的一台服务器,部署一个 dnsmasq 服务作域名解析(不使用其DHCP功能)。
  2. 把内网这些服务的 IP 到域名的映射,设置到 dnsmasq 的配置文件里。
  3. 在DHCP服务上,把默认的DNS地址改成内网的这台服务器IP地址。这样在连网会由DHCP把IP和DNS这些设置分配给机器。

这样就行了。

使用域名上网的过程是:

  1. 访问一个域名,但本地 /hosts 里找不到。
  2. 找到DNS服务器,到DNS服务器上去找
  3. DNS 服务器接收到域名访问,如果是本地配置好的,则可直接返回结果。如果本地未配置,则到 dnsmasq 配置的默认上一级 DNS 服务器上找。

dnsmasq 在 ubuntu 上的配置

/etc/dnsmasq.conf

修改几个地方:

listen-address=127.0.0.1, 10.39.249.211

监听这两个IP上的收到DNS请求

cache-size=2048

设置缓存的大小。有了缓存,被缓存的域名会立即返回IP地址。这样可以加速访问。

address=/node0.cpv.org/192.168.1.230
address=/node1.cpv.org/192.168.1.231
address=/node2.cpv.org/192.168.1.232
address=/node3.cpv.org/192.168.1.233
address=/node4.cpv.org/192.168.1.234

设置局域网内的域名IP映射关系。

修改本机DNS服务地址

本机的 DNS 服务地址配成 127.0.0.1。/etc/network/interfaces 里加上这一句:

dns-nameservers 127.0.0.1

修改 dnsmasq 的上一级DNS服务地址

dnsmasq 默认会到 /etc/resolv.conf 里去找,但这个文件里放的也是本机的DNS服务地址。上面的修改,把本机所有dns请求从 127.0.0.1 转到了 dnsmasq 上。

另外,dnsmasq 会读 /var/run/dnsmasq/resolv.conf 这个文件的内容作为上一级DNS服务地址。这个文件是怎么生成的呢:resolvconf 启动时,会调用一个 hook 脚本:/etc/resolvconf/update.d/dnsmasq,这个脚本生成 /var/run/dnsmasq/resolv.conf 文件。

我看了一下 /var/run/dnsmasq/resolv.conf 里面只有一句 nameserver 127.0.0.1。可能是 resolvconf 这边的脚本没有被执行。

在 /etc/default/dnsmasq 里面设置 IGNORE_RESOLVCONF=yes。这样 dnsmasq 就不会去找 /var/run/dnsmasq/resolv.conf,而是直接去读 resolv-file 指定的文件。

在 /etc/dnsmasq.conf 设置 resolv-file=/etc/resolv.dnsmasq

最后创建 /etc/resolv.dnsmasq 文件,并在其中指定上一级 DNS 服务器地址。

后面这个文件是配置 dnsmasq 的上一级DNS服务器地址:

nameserver 10.39.249.254
nameserver 114.114.114.114

参考链接

https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/1090589
http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html
https://wiki.archlinux.org/index.php/Dnsmasq_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

Linux dnsmasq 服务的更多相关文章

  1. Linux软件服务管理

    学习该课程之前先学习linux的软件安装管理 1.linux的运行级别有下面几种类型 在后面的服务启动管理之中会被使用到 [root@weiyuan httpd-2.4.20]# runlevel N ...

  2. linux jexus 服务 设置开机启动

    linux的服务开机设置一般在 /etc/init.d/里 而jexus的默认安装目录在 /usr/jexus里 启动文件为 jws 参数 有start stop restart 这里贡献一个刚写好的 ...

  3. 1、linux网络服务实验 用PuTTY连接Linux

    这个是大三下学期的Linux网络服务配置详解时,感觉老师上得简单,就整理下,岭南师范学院师弟妹有福,如果是蔡老师交的话,可以拿来预习,复习. 一.用PuTTY连接Linux ①.装有redhat系统的 ...

  4. Linux 常用服务总结

    使用linux有一段时间了,把自己在身边经常听到,使用linux经常遇到的linux常见服务总结出来,这样遇到问题会有更多的解决问题的办法,听别人摆这些专业术语时,才不会不知所云. 服务: 1.NFS ...

  5. Linux多线程服务端编程一些总结

    能接触这本书是因为上一个项目是用c++开发基于Linux的消息服务器,公司没有使用第三方的网络库,卷起袖子就开撸了.个人因为从业经验较短,主 要负责的是业务方面的编码.本着兴趣自己找了这本书.拿到书就 ...

  6. 《Linux 多线程服务端编程:使用 muduo C++ 网络库》电子版上市

    <Linux 多线程服务端编程:使用 muduo C++ 网络库> 电子版已在京东和亚马逊上市销售. 京东购买地址:http://e.jd.com/30149978.html 亚马逊Kin ...

  7. 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册

    <Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错 ...

  8. linux系统设置服务开机启动3种方法,Linux开机启动程序详解

    linux系统设置服务开机启动 方法1:.利用ntsysv伪图形进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图     方法2:利用命令行chkconfig命令进行设置 简要说明 ...

  9. linux关闭服务的方法

    本文介绍下,在linux下关闭服务的方法,主要学习chkconfig的用法,有需要的朋友参考下. 先来看一个在linux关闭服务的例子,例如,要关闭sendmail服务,则可以按如下操作. 例1, 复 ...

随机推荐

  1. [CQOI2010] 扑克牌 (二分答案,巧解)

    Description 你有n种牌,第i种牌的数目为ci.另外有一种特殊的牌:joker,它的数目是m.你可以用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1套 ...

  2. oracle distinct 用法

    oracle distinct 是所有字段都相同才显示一条,要做到根据某一列,则如下 select t1.* from table t1 where t1.rowid = (select min(t2 ...

  3. 【bzoj1717】[Usaco2006 Dec]Milk Patterns 产奶的模式 SA+二分

    Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个“模式”. John的牛奶按质 ...

  4. testng依赖

    Testng提供了两种依赖实现 1.强制依赖:某个测试用例之前需要执行的依赖链中如果有一个失败,那么接下来所有的测试都不会被执行 2.顺序依赖(软依赖):顺序依赖的用处更多是用来检测一个测试链是否按照 ...

  5. stein法求gcd 学习笔记

    原理显然 由于当x,y都为奇数时进行辗转相见 每次减完必有偶数 而偶数最多除log次 那么也最多减log次 复杂度有保证 注:代码未验证 int gcd(int x,int y){ int res=1 ...

  6. Java--消除重复数字后的最大值

    描述: 一个长整型数字,消除重复的数字后,得到最大的一个数字. 如12341 ,消除重复的1,可得到1234或2341,取最大值2341. 42234,消除4 得到4223 或者 2234 ,再消除2 ...

  7. Hash Collision DoS 问题

    Hash Collision DoS 问题http://coolshell.cn/articles/6424.html Hash Collision DoS (Hash碰撞的拒绝式服务攻击),有恶意的 ...

  8. 获取某个元素相对于视窗的位置-getBoundingClientRect

    1. getBoundingClientRect用于获取某个元素相对于视窗的位置集合.集合中有top, right, bottom, left等属性. 语法:这个方法没有参数 rectObject = ...

  9. Python语言 介绍

    一.python介绍python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...

  10. 牛客网 Wannafly挑战赛5 B.可编程拖拉机比赛-ceil()函数+floor()函数

    可编程拖拉机比赛 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 65536K,其他语言131072K64bit IO Format: %lld 题目描述 “这个比赛,归根结底就是控制一 ...