标签: DNS

DNS缓存服务器投毒攻击

只要黑客想这么做,那我可以保证,您访问的Google,*不是Google,淘宝也不是淘宝,而是一个伪装的网站,2008年,给ISP的DNS缓存服务器投毒是安全界*热门的话题,并且,这个问题仍然无法解决……

通过本文,会看到一些奇妙的事情:

1、您发现在自家电脑的浏览器里输入www.91ri.org,访问的却是矛盾网。

2、随意的给google加个子域名,比如test.91ri.org。

他们都基于一个技术 -- 给ISP(如,电信/网通)的DNS缓存服务器投毒,也称作UDP会话劫持。
* 投毒原理

首先,您必须明白DNS的工作原理(详细的DNS原理)
DNS投病

先看蓝色的线条,这是正常的DNS解析流程

DNS投病

1)终端电脑(您的个人电脑)在用浏览器访问网页时,首先要在浏览器的地址栏中填入一个网址(如,www.91ri.org),可我们的个人电脑必须知道这个网址对应的IP地址,才可以正常浏览网页(如,www.91ri.org对应的IP地址是1.1.1.1)。于是,你的电脑就发送一个解析请求给暂存DNS伺服器,这个请求其实就是一句话“您能告诉我www.91ri.org对应的IP地址吗?”

2)如果暂存DNS伺服器上没有www.91ri.org对应的IP地址,则暂存DNS伺服器就会通过迭代的方法*后询问主要DNS伺服器。主要DNS伺服器上保存有www.91ri.org对应的IP地址。

3)主要DNS伺服器响应暂存DNS伺服器的请求,其实就是一句话“www.91ri.org对应的IP地址是1.1.1.1”。

4)暂存DNS伺服器收到主要DNS伺服器的应答后,把应答消息转发给一开始询问自己的那台个人电脑。

5)您的浏览器使用这个正确的IP访问Google主页。

这就意味着,黑客只要伪造响应报文给暂存DNS伺服器,暂存DNS伺服器上就记录了错误的域名到IP地址的对应关系,然后暂存DNS伺服器把这个错误的对应关系发给先前查询的用户计算机的浏览器,这样,您尽管在浏览器里输入的是www.91ri.org,可访问的确不是真正的IP地址,这个地址是黑客任意指定的。

红色线条是黑客在您DNS解析时的投毒过程

1)用户请求暂存DNS伺服器返回www.91ri.org的IP地址。

2)如果暂存DNS伺服器上没有www.91ri.org对应的IP地址,暂存DNS伺服器就会通过迭代的方法*后询问主要DNS伺服器。

3)在主要DNS伺服器还未返回给暂存DNS伺服器时,黑客趁此时间空隙,把错误的对域名到IP的应关系告诉暂存DNS伺服器,这就是给DNS缓存服务器的一次投毒。

4)暂存DNS伺服器回应给用户错误的域名到IP对应关系。

5)用户访问黑客任意指定的IP地址,比如指向矛盾网(矛盾网因此获得了非常高的流量,如果矛盾网想冒充网上银行也是可以的)。

因为暂存DNS伺服器会在一段时间内发送多个DNS查询报文,所以为了使查询报文与响应报文匹配,在DNS的报头中使用了ID字段,响应的报头ID必须与先前发出去的查询报头ID一致才会被暂存DNS伺服器收录,否则丢弃。所以,黑客若想投毒成功,必须猜中查询报文的ID号。DNS报头的ID号是16位2进制,也就是有2的16次方=65536个ID号,这就是说黑客一次投毒的命中率是1/65536,不过只要攻击程序稍微优化一下,这个命中率可以缩小到1/655,几秒钟就可以搞定。
* 攻击测试

测试目的
仅为了引起ISP(比如,电信、网通)对DNS服务器的安全重视,禁止非法使用。

攻击工具
kaminsky-attack(您也可以通过Google搜索下载源码自己编译)

测试步骤

在命令行下输入(我用的是Linux系统):

[admin@Linux] ./kaminsky-attack q.q.q.q 202.96.209.5 a.a.a.a 1234 www 91ri.org. 8.8.8.8 8192 16

命令说明

q.q.q.q是发送DNS请求的客户机IP地址,可以随意设置
202.96.209.5是上海的DNS缓存服务器(黑客投毒的目标)
a.a.a.a是91ri.org的权威DNS服务器,可以随便设置
www是主机名
91ri.org是域名(与www联合起来就是一个完整的FQDN名)
8.8.8.8是毒药,让DNS缓存服务器存储错误的A记录(域名到IP的对应关系)
8192是猜测次数(次数越大命中率越大)

攻击原理

这个程序有双重身份,一个是普通客户端,另一个是黑客,程序先给DNS缓存服务器发送一个DNS解析请求,然后快速给DNS缓存服务器发送8192个伪造的响应包,使其中毒。

重要提示

在测试之前,您应该明白,对于91ri.org这样知名的网站,几乎时时有用户在请求解析,就是说DNS缓存服务器上总是有91ri.org的A记录,而这时黑客的投毒是无效的。但这并不防碍黑客伪造2级域名,比如:
[admin@Linux] ./kaminsky-attack q.q.q.q 202.96.209.5 a.a.a.a 1234 aorb 91ri.org. 8.8.8.8 8192 16

因 为可以肯定DNS缓存服务器上不会有aorb.91ri.org的A记录,所以投毒100%成功,与此同时,www.googl.com也中毒了,这是为什么?如果您了解DNS响应报文,就会明白,响应报文中不但会有aorb.91ri.org的A记录,还可以捎带名曰附加记录的信息,这里的附加记录是www.91ri.org对应的IP地址。这样,DNS缓存服务器同样更新了www.91ri.org对应的错误IP地址。

另外,您也可以在本地查询DNS缓存服务器上是否存有目标域名的记录。在命令行下输入:

[admin@Linux]nslookup

>set norecurse(norecurse是告诉客户端不使用递归查询,因此,如果DNS缓存服务器上没有目标域名记录,则会返回相关提示。如果显示的是非授权区域提供的信息,则表示DNS缓存服务器已经有了目标域的资源记录)

> 91ri.org
*防止投毒

目前还没有更好办法阻止黑客的这种行为,只有使DNS缓存服务器发出的查询请求使用动态的UDP端口,UDP的端口号也是16位2进制,这样,与DNS的ID号相结合,号码的命中率就是1/4294967296(2的32次方)。

也许您对下列信息感兴趣:

IP地址,子网掩码、默认网关,DNS的设置和工作原理(总结)

概念:

1. 概述

IP地址:人们在Internet上为了区分数以亿计的主机而给每台主机分配的一个专门的地址,通过IP地址就可以访问到每台主机。

子网掩码:不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

网关:实质上是网络通向其它网络的IP地址。

DNS:域名服务器,为Internet上的主机分配域名地址的IP地址。

2.IP地址

每个IP地址都是由“网络号+主机号”两部分组成。IP地址管理机构在分配IP地址时,只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。实际上一个IP地址用来标志一个主机或一个路由器或一条链路的接口,当一个主机同时连到两个网络时(如,实验室的代理服务器),该主机必须有两个相应的IP地址,也就必须具备两张网卡。

IP地址由32位二进制数组成,通常是十进制表示,并以“.”分隔。IP地址是一种逻辑地址,用来表示网络中的一个个主机,并且IP地址具有唯一性,即每台机器的IP地址在全世界是唯一的。

DNS是域名服务器,用来解析域名的(域名和IP之间的解析)。如果没有这东西,登陆某个网站时就必须输入该网站的IP地址,有了DNS就可以直接输入网址。这样方便人们的记忆。

比如百度,网址是www.baidu.com,它的IP地址是 61.135.169.125,我可以不用记忆IP地址,直接输入网址即可登陆。

%title插图%num

这种IP地址和域名的对应数据放在公网的服务器里,叫DNS服务器。电脑访问网络时,会首先到这个服务器里,根据域名找到对应的IP地址,然后才真正去往目的地,不过这个过程很快的,根本感觉不到罢了。以上这个过程,叫IP地址解析。所以上网时设置的参数里都有DNS服务器这项,因为需要它首先完成地址解析任务。

DNS服务器在全球范围内都有,一般来说,你在哪个城市,就设置为哪个城市的DNS地址(网络状态好的话无所谓),比如在北京,经常配置的DNS地址有:202.106.0.20,202.106.196.115等,这些上网都可以查到。国内目前开放的114DNS响应也不错,为电信联通移动全国通用DNS,地址也好记:114.114.114.114,位于江苏南京。

3. 子网掩码

子网掩码只有一个功能,就是将IP地址划分为网络地址和主机地址两部分。 如同现实生活中的通讯地址,可以看作省市部分和具体门牌号部分。相同的IP地址,但掩码不一样,则指向的网络部分和主机部分不一样。如IP地址192.168.1.11,255.255.255.0 的掩码表示网络地址192.168.1,主机地址是1;255.255.0.0 的掩码表示网络地址192.168,主机部分是1.1 。

子网掩码用来判断任意两台计算机的IP地址是否在同一个子网中的根据。如果相同,说明两台计算机在同一个子网中,可以直接通讯。当然,子网掩码不同的两台计算机也可以通讯,方法及原理见下文“网关”。。。。。。

IP地址可分为五类:A类地址,B类地址,C类地址,D类地址,E类地址,总体来说,

1.0.0.0到126.255.255.255为A类 主要分配给具有大量主机而局域网络数量较少的大型网络

128.0.0.0到191.255.255.255为B类 一般用于国际性的大公司和政府机构

192.0.0.0到223.255.255.255为C类 用于一般小公司 校内网 研究机构等

244.0.0.0到339.255.255.255为D类 用于特殊用途 又称为广播地址

240.0.0.0到247.255.255.255为E类 暂时保留

IP地址可以说是你的网络地址

4. 网关

网关(Gateway)就是一个网络连接到另一个网络的“关口”。

按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是*常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。

网关实质上是一个网络通向其它网络的IP地址。这个IP地址,是具有路由功能的IP地址,默认网关也是一个网关,也是具有路由功能的设备的IP地址。注意:在填写默认网关时,主机的IP地址必须和默认网关的IP地址处于同一段。

举例:

比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。

在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。

如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络B向网络A转发数据包的过程也是如此。

所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。

 

提问:

(1)那么这个IP地址(作为网关IP地址)是哪台机器的IP地址呢?

网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。

(2)什么是默认网关 ?

默认网关必须是主机自己所在的网段中的IP地址,而不能填写其他网段中的IP地址。

如果搞清了什么是网关,默认网关也就好理解了。就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关。

(3)如何设置默认网关 ?

一台主机的默认网关是不可以随随便便指定的,必须正确地指定,否则一台电脑就会将数据包发给不是网关的电脑,从而无法与其他网络的电脑通信。

默认网关的设定有手动设置和自动设置两种方式。

a. 手动设置

手动设置适用于电脑数量比较少、TCP/IP参数基本不变的情况,比如只有几台到十几台电脑。因为这种方法需要在联入网络的每台电脑上设置“默认网关”,非常费劲,一旦因为迁移等原因导致必须修改默认网关的IP地址,就会给网管带来很大的麻烦,所以不推荐使用。

b. 自动设置

自动设置就是利用DHCP服务器来自动给网络中的主机分配IP地址、子网掩码和默认网关。这样做的好处是一旦网络的默认网关发生了变化时,只要更改了DHCP服务器中默认网关的设置,那么网络中所有的电脑均获得了新的默认网关的IP地址。这种方法适用于网络规模较大、TCP/IP参数有可能变动的网络。

附注:

配置默认网关,可以在IP路由表中创建一个默认路径。

赋予路由器IP地址的名称,与本地网络连接的机器必须把向外的流量传递到此地址中以超出本地网络,从而使那个地址成为本地子网以外的IP地址的”网关”.也就是*近常用的网关,当主机路由表目或网络输入不存在于本地主机的路由表时数据包发送到那里。

5. DNS

DNS地址是一个域名服务器地址,它负责把用户的网站地址解析成IP地址。如果这个服务器出现问题,那么你就可能上不了网了。我估计世界上没有哪个强人能记住所有自己经常去的网站的IP地址吧,哈哈。。。

DNS 全名叫 Domain Name Server,中文俗称“域名服务器”,在说明 DNS Server 之前,可能要先说明什么叫 Domain Name(域名)。正如上面所讲,在网上辨别一台电脑的方法是利用 IP地址,但是 IP用数字表示,没有特殊的意义,很不好记,因此,我们一般会为网上的电脑取一个有某种含义又容易记忆的名字,这个名字我们就叫它“DomainName”。

由于ISP的拨号服务器一般都有缺省的DNS,所以你可以不用设置DNS,如果你需要指定一台DNS,你一定要了解这台DNS的准确IP(比如福州的163用户的DNS为202.101.98.55)。

 

查询:

开始–运行–输入cmd–输入ipconfig

%title插图%num

开始–运行–输入cmd–输入ipconfig/all

%title插图%num

网关和DNS的区别

什么是网关

顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。
按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是*常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。
那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。
如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络B向网络A转发数据包的过程也是如此。
所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。

什么是 DNS ?

DNS 全名叫 Domain Name Server,中文俗称“域名服务器”,在说明 DNS Server 之前,可能要先说明什么叫 Domain Name(域名)。正如上面所讲,在网上辨别一台电脑的方法是利用 IP地址,但是 IP用数字表示,没有特殊的意义,很不好记,因此,我们一般会为网上的电脑取一个有某种含义又容易记忆的名字,这个名字我们就叫它“Domain Name”。
例如:对著名的YAHOO!搜索引擎来说,一般使用者在浏览这个网站时,都会输入http://www.yahoo.com,很少有人会记住这台Server的 IP 是多少?所以http://www.yahoo.com就是YAHOO!站点的 Domain Name。这正如我们在跟朋友打招呼时,一定是叫他的名字,几乎没有人是叫对方身份证号码的吧!但是由于在 Internet 上真实辨认机器的还是IP,所以当使用者在浏览器中输入Domain Name 后,浏览器必须先到一台有 Domain Name 和 IP 对应信息的主机去查询这台电脑的 IP,而这台被查询的主机,我们称它为 Domain Name Server,简称 DNS,例如:当你输入http://www.yahoo.com时,浏览器会将http://www.yahoo.com这个名字传送到离它*近的 DNS Server 去做辨认,如果查询到结果,则会传回这台主机的 IP地址,进而跟它发生连接,但如果没有查询到,就会出现类似 DNS NOT FOUND 等告警信息。所以一旦你的电脑的DNS Server 设置不正确,就好比是路标错了,电脑也就不知道该把信息送到哪里。

浅析DNS域名解析过程

一、DNS域名解析步骤

下图是DNS域名解析的一个示例图,它涵盖了基本解析步骤和原理。
这里写图片描述
下面DNS解析步骤进行讲解,后面将采用命令行的形式来跟踪DNS解析过程。当用户在地址栏键入www.baidu.com并敲下回车键之后,域名解析就开始了。

*步:检查浏览器缓存中是否缓存过该域名对应的IP地址

用户通过浏览器浏览过某网站之后,浏览器就会自动缓存该网站域名对应的IP地址,当用户再次访问的时候,浏览器就会从缓存中查找该域名对应的IP地址,因为缓存不仅是有大小限制,而且还有时间限制(域名被缓存的时间通过TTL属性来设置),所以存在域名对应的IP找不到的情况。当浏览器从缓存中找到了该网站域名对应的IP地址,那么整个DNS解析过程结束,如果没有找到,将进行下一步骤。对于IP的缓存时间问题,不宜设置太长的缓存时间,时间太长,如果域名对应的IP发生变化,那么用户将在一段时间内无法正常访问到网站,如果太短,那么又造成频繁解析域名。

第二步:如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP

如果*个步骤没有完成对域名的解析过程,那么浏览器会去系统缓存中查找系统是否缓存过这个域名对应的IP地址,也可以理解为系统自己也具备域名解析的基本能力。在Windows系统中,可以通过设置hosts文件来将域名手动绑定到某IP上,hosts文件位置在C:\Windows\System32\drivers\etc\hosts。对于普通用户,并不推荐自己手动绑定域名和IP,对于开发者来说,通过绑定域名和IP,可以轻松切换环境,可以从测试环境切换到开发环境,方便开发和测试。在XP系统中,黑客常常修改他的电脑的hosts文件,将用户常常访问的域名绑定到他指定的IP上,从而实现了本地DNS解析,导致这些域名被劫持。在Linux或者Mac系统中,hosts文件在/etc/hosts,修改该文件也可以实现同样的目的。

前两步都是在本机上完成的,所以没有在上面示例图上展示出来,从第三步开始,才正在地向远程DNS服务器发起解析域名的请求。

第三步:向本地域名解析服务系统发起域名解析的请求

如果在本机上无法完成域名的解析,那么系统只能请求本地域名解析服务系统进行解析,本地域名系统LDNS一般都是本地区的域名服务器,比如你连接的校园网,那么域名解析系统就在你的校园机房里,如果你连接的是电信、移动或者联通的网络,那么本地域名解析服务器就在本地区,由各自的运营商来提供服务。对于本地DNS服务器地址,Windows系统使用命令ipconfig就可以查看,在LinuxMac系统下,直接使用命令cat /etc/resolv.conf来查看LDNS服务地址。LDNS一般都缓存了大部分的域名解析的结果,当然缓存时间也受域名失效时间控制,大部分的解析工作到这里就差不多已经结束了,LDNS负责了大部分的解析工作。

第四步:向根域名解析服务器发起域名解析请求

本地DNS域名解析器还没有完成解析的话,那么本地域名解析服务器将向根域名服务器发起解析请求。

第五步:根域名服务器返回gTLD域名解析服务器地址

本地DNS域名解析向根域名服务器发起解析请求,根域名服务器返回的是所查域的通用顶级域(Generic top-level domain,gTLD)地址,常见的通用顶级域有.com.cn.org.edu等。

第六步:向gTLD服务器发起解析请求

本地域名解析服务器向gTLD服务器发起请求。

第七步:gTLD服务器接收请求并返回Name Server服务器

gTLD服务器接收本地域名服务器发起的请求,并根据需要解析的域名,找到该域名对应的Name Server域名服务器,通常情况下,这个Name Server服务器就是你注册的域名服务器,那么你注册的域名的服务商的服务器将承担起域名解析的任务。

第八步:Name Server服务器返回IP地址给本地服务器

Name Server服务器查找域名对应的IP地址,将IP地址连同TTL值返回给本地域名服务器。

第九步:本地域名服务器缓存解析结果

本地域名服务器缓存解析后的结果,缓存时间由TTL时间来控制。

第十步:返回解析结果给用户

解析结果将直接返回给用户,用户系统将缓存该IP地址,缓存时间由TTL来控制,至此,解析过程结束。

这里对DNS解析的步骤进行了一个简单的介绍分析,后面将通过命令行的形式来解析一个域名的具体解析过程。

二、DNS域名解析过程分析

在正式开始分析解析过程之前,先来介绍几个基本的域名解析方式的概念。域名解析记录主要分为A记录MX记录CNAME记录NS记录以及TXT记录

  • A记录A代表的是Address,用来指定域名对应的IP地址,比如将map.baidu.com指定到180.97.34.157,将zhidao.baidu.com指定到180.149.131.245A记录允许将多个域名解析到一个IP地址,但不允许将一个域名解析到多个IP地址上。
  • MX记录MX代表的是Mail Exchage,就是可以将某个域名下的邮件服务器指向自己的Mail Server,如baidu.com域名的A记录IP地址是180.97.34.157,如果将MX记录设置为180.97.34.154,即xxx@baidu.com的邮件路由,那么DNS会将邮件发送到180.97.34.154所在的服务器,而正常web请求仍然会解析到A记录的IP地址180.97.34.157
  • CNAME记录CNAME指的就是Canonical Name,也就是别名解析,可以将指定的域名解析到其他域名上,而其他域名就是指定域名的别名,整个解析过程称为别名解析。比如将baidu.com解析到itlemon.cn,将csdn.net解析到itlemon.cn,那么itlemon.cn就是baidu.comCSDN.net的别名。
  • NS记录:就是为某个域名指定了特定的DNS服务器去解析。
  • TXT记录:为某个主机名或者域名设置特定的说明,比如为itlemon.cn设置的的TXT记录为“Lemon的技术笔记”,这个TXT记录为itlemon.cn的说明。

上面概念中的IP地址都是假定的,帮助理解。下面将通过解析域名baidu.com为例,进一步说明域名解析流程。

直接查看域名结果,可以通过命令nslookup加上域名来查看:
这里写图片描述
上图中Non-authoritative answer表示解析结果来自非权威服务器,也就是说这个结果来自缓存,并没有完全经历全部的解析过程,从某个缓存中读取的结果,这个结果存在一定的隐患,比如域名对应的IP地址已经更变。
这只是一个快捷的解析结果,如果需要浏览全部的解析过程,那么可以使用dig命令来查看解析过程。
这里写图片描述
分析上图DNS解析过程,我们可以看出:
*步:从本地DNS域名解析服务器获取到13个根DNS域名服务器(.)对应的主机名。
这里写图片描述
第二步:从13个根域名服务器中的其中一个(这里是h.root-servers.net)获取到顶级com.的服务器IP(未显示)和名称。
这里写图片描述
第三步:向com.域的一台服务器192.43.172.30(i.gtld-servers.net)请求解析,它返回了baidu.com域的服务器IP(未显示)和名称,百度有四台顶级域的服务器。
这里写图片描述
第四步:向百度的顶级域服务器220.181.37.10(ns3.baidu.com)请求www.baidu.com,它发现这个www有个别名,而不是一台主机,别名是www.a.shifen.com
这里写图片描述
一般情况下,DNS解析到别名就停止了,返回了具体的IP地址,如果想看到具体的IP地址,可以进一步对别名进行解析,解析结果如下:
这里写图片描述
这时候看到*后的解析结果是180.97.33.107180.97.33.108。在解析别名的过程中,可以发现shifen.combaidu.com都是指定了相同的域名解析服务器。以上是一个域名的解析过程,*后的解析结果和一开始的使用nslookup的结果一致。

利用闲置笔记本搭建自己的开发服务器

1、对Ubuntu服务器进行基础配置
2、配置dnsmasq服务器
3、文章没什么技术含量,主要记录一些配置文件的位置
前言
*近新入手了一台MacBook Air,原来的ThinkPad就闲置下来了,感觉一直放着太浪费了,就重装了一个Ubuntu Server 16.04的系统,用来做自己的开发服务器。折腾了几个小时,就都搞定了,特意写下这篇文章,来记录一下自己折腾的过程。

基础配置
服务器安装的过程就不说了,大都是那么几步。有一个奇怪的问题就是安装的时候,需要设置时区,我竟然没有找到东八区,只好先设置了一个太平洋时区,好尴尬,不知道是不是Ubuntu的文本安装界面没有东八区这个选项,还是我英文太差了,没有找到。

设置时间
由于安装时我们设置了错误的时区,所以首先需要调整一下时区。Ubuntu 16.04已经完全集成了Systemd,所以我们只需要通过sudo timedatectl set-timezone Asia/Shanghai命令,就可以将时区设置为亚洲/上海了,同时我们也可以运行sudo timedatectl set-ntp 1命令,打开自动从 NTP 服务器同步时间,一会之后服务器时间就正常了。timedatectl命令还有一个选项是set-local-rtc,用来将硬件时间设置为本地时间,而不是UTC时间,这个选项我默认是关闭的。

更改软件源为中科大源
接下来,就是更改源了,打开/etc/apt/sources.list文件,将所有的us.archive.ubuntu.com替换成mirrors.ustc.edu.cn就可以了,注意这里由于我安装的时候选择的是美国的源,所以域名为us.archive.ubuntu.com,如果选择了其他地方的源,域名可能不一样。

同时要注意,security.ubuntu.com这个源表示的是 Ubuntu 进行安全更新的源,用来推送紧急安全更新的补丁,这个源我建议保持原样,因为紧急安全更新的补丁还是从 Ubuntu 官方下载比较好,不建议从其他地方来下载。

设置关闭盖子不休眠
由于我的电脑是笔记本,尽管没有装图形界面,但是在合上盖子之后,系统仍然会自动休眠,所以需要将这个自动休眠的功能关掉。我在网上搜索了一下,在 Askubuntu 上找到了一个相关的问题,按照问题中的答案所说,向/etc/systemd/logind.conf文件中添加一行HandleLidSwitch=ignore,然后重启systemd-logind.service服务,就关闭掉这个功能啦。

配置网络环境
将服务器配置好以后,接下来我们就需要配置网络了。

设置DHCP
我的笔记本是通过网线连接到路由器上的,所以,首先我们需要将有线网卡通过 DHCP 自动连接网络的功能打开。这里我在网上搜索了一下,搜到了一篇文章:Ubuntu Networking Configuration Using Command Line 。这篇文章很详细地介绍了Ubuntu如何设置动态IP和静态IP。我的电脑在刚装好系统的时候,没有任何关于有线网卡的配置文件,仅能够通过ip addr命令来看到当前系统的网卡,在了解到有线网卡的名称为enp12s0之后,我新建了一个文件/etc/network/interfaces.d/enp12s0.conf,然后向其中添加了如下的内容,

# 设置网卡enp12s0在开机的时候通过 DHCP 自动连接到网络。
auto enp12s0
iface enp12s0 inet dhcp
1
2
3
上面两句配置就表示设置网卡enp12s0在开机的时候通过 DHCP 自动连接到网络。

设置默认网关
设置好网卡的 DHCP 以后,我的服务器能够 ping 通路由器网关了,但是仍然无法 ping 通外网,显然,这是由于服务器本机的网关没有配置好,后来我又上网去搜索,发现了Askubuntu 上一个类似的问题,其中有个答案提到,dhclient只在当前服务器没有设置默认网关的时候,才会设置由 DHCP 服务器提供的路由器地址为默认网关。我通过ip route看了一下我的服务器的路由表,发现默认网关为网卡lo,所以 DHCP 服务器下发下来的网关地址并不会生效。我又在/etc/network/interfaces中添加了如下的配置:post-up route del default dev lo,删除掉默认走lo设备的路由配置。

然后我再来重启电脑,就发现服务器一开机就能够正常 ping 通外网了。

设置路由器
看到这里,相信大家肯定都有一些疑惑,服务器不应该是默认设置为静态IP吗,为什么你要配置 DHCP 呢。原因就在这一小节,我用的路由器是华硕的RT – N12,它的 DHCP 服务器有一个功能,就是将MAC地址和IP地址进行绑定,所以,我只需要在路由器上配置好MAC地址和IP地址的绑定,这样就相当于起到了静态IP的作用了,而且更改起来也比较方便,不需要服务器和路由器两头改。

配置DNS
由于我访问我的服务器的时候想通过域名来访问(方便以后添加HTTPS证书),所以我需要在我的内网中自己搭建一个DNS服务器,来负责服务器的域名解析。

安装并设置dnsmasq
由于我的需求很简单,只需要进行一个域名解析就可以了,所以我选择了dnsmasq,而不是比较复杂的bind9。

dnsmasq在Ubuntu的源中直接有deb安装包,所以我们直接通过sudo apt install dnsmasq命令安装即可。

dnsmasq的配置我参考了文章使用Dnsmasq搭建内网DNS服务器。使用了如下的配置:

# 设置服务器的监听地址为192.168.X.X和127.0.0.1
listen-address=192.168.X.X,127.0.0.1
# 所有没有.号的域名(plain names)都不会向上游DNS Server转发,只查询hosts文件
domain-needed
# 所有保留IP地址段内的反向查询都不会向上游DNS Server转发,只查询hosts文件
bogus-priv
# 不要读取/etc/resolver中的DNS Server的配置
no-resolv
# 不要poll /etc/resolver文件的更新
no-poll
# 配置上游服务器为DNSPod的公共DNS
server=119.29.29.29
server=182.254.116.116
1
2
3
4
5
6
7
8
9
10
11
12
13
配置好了以后,我们可以通过dnsmasq –test命令来检查dnsmasq的配置文件语法是否正确。

然后我们在服务器的/etc/hosts中添加我们想要设置的解析记录,比如这台服务器我设置了如下的记录:

192.168.X.X dev.bwangel.me
1
然后通过sudo systemctl enable dnsmasq && sudo systemctl restart dnsmasq命令启动dnsmasq服务即可。

*后我们可以通过dig命令测试一下,运行如下命令: dig dev.bwangel.me @localhost,看返回的IP地址是否和我们设置的解析记录相同。

设置路由器
配置好了DNS服务器以后,我们再来修改路由器的 DHCP 策略,设置下发的DNS服务器IP地址为我们的DNS服务器地址,这样内网中所有的DNS查询都会先经过这台DNS服务器。而我们的dev.bwangel.me域名也就能够成功解析了。至此,我们的开发服务器就已经搭建好了,我们可以通过SSH连接上来,搭建我们想要的服务了。

遇到的一些小坑
dnsmasq没有绑定本地地址
配置好了 DNS 服务器以后,我在服务器上 ping 百度的时候会一直卡着,但是 ping 公网 IP 却是可以 ping 通的,当时我*反应就是DNS解析出错了,只是不知道是DNS服务器配置的有问题,还是DNS服务器的IP地址路由器没有正确地下发下来。

接着我就利用dig来测试,发现使用dig www.baidu.com @192.168.X.X命令可以得到正常结果,而dig www.baidu.com @127.0.0.1就会卡着。然后我就觉得应该是dnsmasq没有监听127.0.0.1导致的问题。*后发现服务器DNS的配置文件/etc/resolv.conf中设置的默认DNS为127.0.0.1,而它去查询127.0.0.1的时候会卡着,也不报错,导致服务器不会使用备选的DNS服务器来查询域名,*终导致出现了 ping 百度卡着这种情况。我将dnsmasq的监听地址加上127.0.0.1之后就OK了。

这里还有一点没有搞清楚,路由器的 DHCP 中配置的DNS服务器并没有正确地应用,服务器还是默认遵循/etc/resolv.conf文件中的配置,这个还需要进一步了解一下。

ssh出现locale报错
这个问题经常遇到了,在Mac上通过SSH连接到Ubuntu上之后,在安装更新的过程中,出现了如下的报错:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_MESSAGES = “zh_CN.UTF-8”,
LANG = “zh_CN.UTF-8”
are supported and installed on your system.
perl: warning: Falling back to the standard locale (“C”).
1
2
3
4
5
6
7
8
这是由于终端SSH的时候,会将本地的locale配置传到服务端上去,我的本地设置的语系是zh_CN.UTF-8,但是服务器上只安装了en_US.UTF-8,所以就会报错提示说找不到语系zh_CN.UTF-8相关的文件。这里我们只需要修改一下服务器的/etc/locale.gen配置文件,将zh_CN.UTF-8相关的配置取消注释,然后再来运行locale-gen命令,就会安装上zh_CN.UTF-8语系相关的文件了,再来运行perl程序就不会报错了。
————————————————
版权声明:本文为CSDN博主「「已注销」」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012291393/article/details/78650525

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速