DNS简介

DNS域名解析的过程

DNS解析过程

linux系统DNS相关的操作

  • linux系统下修改ip的方法:
# 即时生效
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
# 永久生效
vi /etc/sysconfig/network-scripts/ifcfg-eth0
  • linux系统下修改default gateway的方法:
# 即时生效
route add default gw 192.168.1.1
# 永久生效
vi /etc/sysconfig/network-scripts/ifcfg-eth0
  • linux系统下修改dns的方法:
# 修改后立即生效,重启也生效
vi /etc/resolv.conf
  • linux系统下修改hostname主机名称的方法:
# 即时生效
hostname <newhostname>

# 永久生效
hostnamectl set-hostname <newhostname>
# 上一步如果没有生效则可以执行以下步骤
vi /etc/sysconfig/network
<---------------------------------
NETWORKING=yes
HOSTNAME=<newhostname>
--------------------------------->
vi /etc/hosts
# 将"127.0.0.1"所在行中的"localhost.localdomain"修改为"新主机名"
# 将"::1"所在行中的"localhost.localdomain"修改为"新主机名"
vi /etc/hostname
# 替换新主机名称
# 重启机器

测试DNS的办法

nslookup www.baidu.com
dig +trace www.baidu.com

DNS劫持、DNS污染

什么是DNS劫持

DNS劫持就是通过劫持了DNS服务器,使用某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。

DNS劫持症状:在某些地区的用户在成功连接宽带后,首次打开任何页面都指向ISP提供的“电信互联星空”、“网通黄页广告”等内容页面。还有就是曾经出现过用户访问Google域名的时候出现了百度的网站。这些都属于DNS劫持。

DNS被劫持之后可以通过修改本机固定DNS地址来解决问题

# 常用的114DNS
DNS1:114.114.114.114
DNS2:114.114.114.115

什么是DNS污染

DNS污染是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击(DNS cache poisoning)。其工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果。

而DNS污染则是发生在用户请求的第一步上,直接从协议上对用户的DNS请求进行干扰。

DNS污染症状:目前一些被禁止访问的网站很多就是通过DNS污染来实现的,例如YouTube、Facebook等网站。

解决办法:

  • 使用VPN代理
  • 修改host,手动设置域名对应的正确IP

使用dnsmasq搭建DNS服务器

# 1. 安装
yum –y install dnsmasq

# 2. 配置
vim /etc/dnsmasq.conf
<---------------------------------
# 指定上游DNS服务器地址配置文件,不指定则默认从/etc/resolv.conf获取
# nameserver 8.8.8.8
# nameserver 8.8.4.4
resolv-file=/etc/resolv.dnsmasq.conf # 内容见上方示例google dns地址
# 指定strict-order,严格按照resolv-file文件中的顺序从上到下进行DNS解析
strict-order
# 定义监听的地址,默认127.0.0.1监听本机所有网卡,如果想让局域网其它机器可以使用本DNS服务器,则逗号隔开添加本机IP地址
listen-address=127.0.0.1,192.168.237.128

# 自定义域名解析到指定ip地址上
address=/abc.com/172.17.65.101

# 告诉dnsmasq使用指定的DNS服务器解析指定的域名
server=/google.com/8.8.8.8
# 配置使用的服务,即本地查询不到时,可通过此服务依次进行查询解析,可配置多个,一般为已知的或代理的外网DNS服务
server=10.10.10.3
server=8.8.8.8
# 为了防止DNS污染,我们使用bogus-nxdomain阻止有问题的DNS服务器进行域名解析
bogus-nxdomain=223.5.5.5
--------------------------------->

# 检查配置是否有问题
dnsmasq --test

# 3. 启动
systemctl start dnsmasq
systemctl enable dnsmasq
systemctl restart dnsmasq
systemctl stop dnsmasq

# 4. 在另外一个机器上编辑DNS服务器为刚才搭建dnsmasq的服务器IP   
vim /etc/resolv.conf
<---------------------------------
nameserver 192.168.237.128
--------------------------------->

使用docker启动dnsmasq

主机创建一个配置文件,用来通过volume同步到dnsmasq容器里面的dnsmasq.conf配置文件

mkdir /dns/conf
vim /dns/conf/dnsmasq.conf
<---------------------------------
log-queries
address=/abc.com/172.17.65.101
--------------------------------->

下载dnsmasq镜像(注意这个镜像暴露端口是8080),启动容器,同时可以启动一个UI界面,用来管理DNS配置

docker pull jpillora/dnsmasq

docker run \
    --name dnsmasq \
    -d \
    -p 53:53/udp \
    -p 8888:8080 \
    -v /dns/conf/dnsmasq.conf:/etc/dnsmasq.conf \
    -v /etc/localtime:/etc/localtime:ro \
    -e "HTTP_USER=admin" \
    -e "HTTP_PASS=admin" \
    --restart always \
    jpillora/dnsmasq

访问8888端口,查看dnsmasq UI界面,用户名密码在启动参数中

http://192.168.237.128:8888/

其它网络常识

子网掩码

Subnet Mask,简言之,就是用于将主机(host)的IP地址分解成网络地址(network address)和主机地址(host address)的一组编码。形式上,子网掩码是32位的,比如图中的255.255.255.0,一共是四个8位组,即:11111111.11111111.11111111.00000000。那是怎么来确定网络地址和主机地址呢?将这个子网掩码与主机的IP地址(192.168.16.187)进行二进制“与”运算,就可获得其网络地址,其结果就是:192.168.16.0。

这看上去容易使人犯糊涂,我们通常说的网络地址,不就是指的电脑的IP地址么?这个网络地址和主机地址又有什么不同呢?这其实,就是划分子网的需要所在了。192.168.16.187这个地址,包含了一个网络标识(也就叫网络地址,网络号),用于标识其所在的子网,而这个网络标识是多少,就取决于子网掩码,如上面的192.168.16.0。也就是说,即使是对于同一个192.168.16.187这个地址,如果子网掩码不同,其网络地址(网络标识)就不同了。

那,获得这个网络地址(192.168.16.0),有什么作用呢?其主要作用就体现在:路由器是根据这个网络地址来判断其所接收到的数据包是来自于哪一个子网的。

默认网关

Default Gateway,简言之,就是你的电脑要向网络上发送数据包时,默认发送的地方。从网络架构来看,默认网关就是跟你的电脑在同一个网段里面(一般就是你所在的子网),负责与其它网段(子网)进行通讯的那台设备。这台设备(网关),应该是具有路由功能的网络设备,或者是防火墙,或者是路由器,又或者是具有路由功能的三层交换机。之所以叫“默认”,就是说除去某种个别条件以外,所有数据包都发给它。如果你的电脑上配置了两张网卡(或多张网卡),想同时访问多个不同的网络,那默认网关的“默认”两个字的意义就充分体现出来了。一是,一台电脑只能设置一个默认网关,否则,操作系统会报错并提醒你;其二,要使安装了多张网卡的电脑,能够通过不同的网卡访问不同的网络,一般就还要另外在本机设置几条静态路由了。这些静态路由,就是配合默认网关的设置来做了,也就是说,除了默认网关所指向的那个网络以外,想要在什么情况下访问其它的哪个网络,就要设置一条相应的静态路由。

一台电脑的默认网关是不可以随随便便指定的,必须正确地指定,否则一台电脑就会将数据包发给不是网关的电脑,从而无法与其他网络的电脑通信。可以手动设置,但一般会通过DHCP服务器自动分配IP地址、子网掩码以及默认网关,这样一旦默认网关发生变化,只需要更新DHCP服务器中默认网关配置就可以,不需要每个计算机都更新。

参考

DNS-解析、劫持、污染

什么是DNS劫持

DNS劫持和DNS污染的区别

子网掩码与默认网关