第九周 域名系统 DNS服务和Linux防火墙

1、简述DNS服务器原理,并搭建主-辅服务器。

DNS服务器原理

DNS:Domain Name System,域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务器端:53/udp,53/tcp,主要的作用就是将网址 (域名) 解析成 IP 地址。

请求www.baidu.com域名时的流程:

  1. 查询本地hosts(/etc/hosts)文件中是否有www.baidu.com域名的记录,如果有直接使用,如果没有,向本地自定义的DNS服务器去请求(/etc/resolv.conf);
  2. DNS服务器收到客户端请求,DNS服务器查询本地缓存是否有www.baidu.com域名的解析记录,如果有直接返回给客户端;如果没有则DNS服务器直接向根服务器(.)请求查询;
  3. 根服务器(.)收到DNS服务器的查询请求发现是查询.com域的信息,然后根服务器(.)则返回.com域服务器的IP给到DNS服务器;
  4. DNS服务器收到.com域服务器的IP,则再次向.com域服务器请求baidu.com域服务器的IP;
  5. DNS服务器收到.com返回baidu.com域名服务器IP,则直接再次请求baidu.com域名服务器,查询www的解析记录;
  6. DNS服务器查询到www.baidu.com的解析记录后则直接返回给客户端,并自己缓存此记录;
  7. 客户端拿到www.baidu.com的IP就可以直接访问目标主机了,并缓存了此解析记录(2-7阶段是一次递归查询)
搭建主、辅服务器

一、搭建主服务器

环境要求

需要三台主机
DNS服务器:10.0.0.8
web服务器:10.0.0.100
DNS客户端:10.0.0.7

1 准备

关闭SELinux
关闭防火墙
时间同步

2 修改配置文件

[root@centos8 ~]#yum -y install bind
[root@centos8 ~]#vim /etc/named.conf
#注释掉下面两行
//  listen-on port 53 { 127.0.0.1; };
//  allow-query  { localhost; };
[root@centos8 ~]#vim /etc/named.rfc1912.zones
      zone "magedu.org" {
      type master;
      file "magedu.org.zone";
};
[root@centos8 ~]#rndc reload

3 DNS区域数据库文件

[root@centos8 ~]#cp -p /var/named/named.localhost /var/named/magedu.org.zone
[root@centos8 ~]#vim /named/magedu.org.zone
$TTL 86400
@         IN  SOA master admin.magedu.org (
                         0       ;   serial
                         1D      ;   refresh
                         1H      ;   retry
                         1W      ;   expire
                         3H)     ;   minimum
          NS  master
master     A   10.0.0.8 
www        A   10.0.0.100
[root@centos8 ~]#rndc reload

4 检查配置文件和数据库文件格式,并启动服务

[root@centos8 ~]#named-checkconf
[root@centos8 ~]#named-checkzone "magedu.org" /var/named/magedu.zone
[root@centos8 ~]#systemctl start named
[root@centos8 ~]#rndc reload

5 实现WEB服务

[root@ubuntu1804 ~]#yum -y install httpd
[root@ubuntu1804 ~]#vim /var/www/html/index.html
www.magedu.org
[root@ubuntu1804 ~]#systemctl start httpd

6 在客户端实现测试

[root@centos7 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=10.0.0.8
[root@centos7 ~]#nmcli con up eth0
[root@centos7 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.0.8
[root@centos7 ~]#curl www.magedu.org
www.magedu.org

二、搭建辅服务器

1 主服务器端配置

[root@centos8 ~]#vim /etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-query  { localhost; };
allow-transfer { 10.0.0.18;};      #加此行

#主DNS服务器10.0.0.8内容更新,从服务器10.0.0.18同步
[root@centos8 ~]#vim /var/named/magedu.org.zone    
$TTL 1D
@   IN  SOA  master  admin.magedu.org.   (
                      1    ;   serial          #版本号更新      
                      1D  ;    refresh
                      1H  ;    retry
                      1W  ;    expire
                      3H )     ; minimum
        NS  master
        NS  slave             #加此行
master  A   10.0.0.8
slave   A   10.0.0.18         #加此行
[root@centos8 ~]#rndc reload

2 加一台从服务器 10.0.0.18,从服务器端配置

[root@centos8 ~]#yum -y install bind
[root@centos8 ~]#vim /etc/named.conf
#注释掉下面两行
//  listen-on port 53 { 127.0.0.1; };
//  allow-query  { localhost; };
#不允许其它主机进行区域传输
allow-transfer { none;};
[root@centos8 ~]#vim /etc/named.rfc1912.zones
zone "magedu.org" IN {
     type slave;
     masters {10.0.0.8;};
     file "slaves/magedu.org.slave";
};
[root@centos8 ~]#systemctl enable --now named
[root@centos8 ~]#rndc reload

3 客户端(10.0.0.7)测试主从DNS服务架构

[root@centos7 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=10.0.0.8
DNS2=10.0.0.18
[root@centos7 ~]#systemctl restart network
[root@centos7 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
search magedu.org
nameserver 10.0.0.8
nameserver 10.0.0.18

#验证从DNS服务器是否可以查询:

#默认走主DNS服务器10.0.0.8
[root@centos7 ~]#dig www.magedu.org
[root@centos7 ~]#dig www.magedu.org

#在主服务器上停止DNS服务
[root@centos8 ~]#rndc stop

#验证从DNS服务器仍然可以查询
[root@centos7 ~]#dig www.magedu.org
[root@centos7 ~]#dig www.magedu.org

2、搭建并实现智能DNS。

1 环境要求

需要四台机器
DNS主服务器:10.0.0.8/24、100.0.0.8/24
web服务器1:10.0.0.100/24
web服务器2:100.0.0.100/24
DNS客户端:10.0.0.7/24(模拟北京)、100.0.0.7/24(模拟上海)

2 前提准备

关闭SELinux
关闭防火墙
时间同步

3 实现步骤
3.1 DNS服务器的网卡配置

#配置两个IP地址
#10.0.0.8/24
#100.0.0.8/24
[root@centos8 ~]#ip a a 100.0.0.8/24 dev eth0      #加一个IP地址

3.2 主DNS服务端配置文件实现view

[root@centos8 ~]#yum -y install bind
[root@centos8 ~]#vim /etc/named.conf
#在文件最前面加下面行
acl beijingnet {
      10.0.0.0/24
};
acl shanghainet {
      100.0.0.0/24
};
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };

#其它略

#创建view
view beijingview {
         match-clients { beijingnet; };
         include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
        match-clients { shanghainet; };
        include "/etc/named.rfc1912.zones.sh";
};
include "/etc/named.root.key";
[root@centos8 ~]#rncd reload

3.3 实现区域配置文件

[root@centos8 ~]#vim /etc/named.rfc1912.zones.bj
zone "." IN {
        type hint;
        file "name.ca"; 
}

zone "magedu.org" {
        type master;
        file "magedu.org.zone.bj"; 
}

[root@centos8 ~]#vim /etc/named.rfc1912.zones.sh
zone "." IN {
        type hint;
        file "name.ca"; 
}

zone "magedu.org" {
        type master;
        file "magedu.org.zone.sh"; 
}
chgrp named /etc/named.rfc1912.zones.bj
chgrp named /etc/named.rfc1912.zones.sh
[root@centos8 ~]#rncd reload

3.4 创建区域数据库文件

vim /var/named/magedu.org.zone.bj
$TTL 1D
@     IN   SOA   master  admin.magedu.org.  (1 1D 1H 1W 3D )
           NS    master
master     A     10.0.0.8
www        A     10.0.0.100

vim /var/named/magedu.org.zone.sh
$TTL 1D
@     IN   SOA   master  admin.magedu.org.  (1 1D 1H 1W 3D )
           NS    master
master     A     10.0.0.8
www        A     100.0.0.100
[root@centos8 ~]#rncd reload

3.5 实现位于不同区域的WEB服务器

#分别在两台主机上安装http服务
#在web服务器1:10.0.0.100实现
[root@ubuntu1804 ~]#yum -y install httpd
[root@ubuntu1804 ~]#vim /var/www/html/index.html
www.magedu.org in beijing
[root@ubuntu1804 ~]#systemctl start httpd
#在web服务器2:100.0.0.100实现
[root@ubuntu1804 ~]#yum -y install httpd
[root@ubuntu1804 ~]#vim /var/www/html/index.html
www.magedu.org in shanghai
[root@ubuntu1804 ~]#systemctl start httpd

3.6 客户端测试

[root@centos7 ~]#dig www.magedu.org @10.0.0.8        #解析为10.0.0.100
[root@centos7 ~]#curl www.magedu.org @10.0.0.8
www.magedu.org in beijing
[root@centos7 ~]#dig www.magedu.org @100.0.0.8     #解析为100.0.0.100
[root@centos7 ~]#curl www.magedu.org @100.0.0.8
www.magedu.org in shanghai

3、使用iptable实现: 放行ssh,telnet, ftp, web服务80端口,其他端口服务全部拒绝

[root@centos8 ~]#iptables -A INPUT -p tcp -m multiport--dports 21:23,80 -j ACCEPT
[root@centos8 ~]#iptables -A INPUT  -j REJECT

4、NAT原理总结

1.1 NAT的产生

由于网络的飞速发展和网络应用的极速增多,致使IPv4可用地址空间逐渐枯竭。尽管IPv6可以在根本上解决地址枯竭问题,但IPv4发展到IPv6还需要一个过渡,而这便产生了NAT。

1.2 NAT的作用

IP地址分为公网IP与私网IP。一般情况下,在互联网中,公网IP可直接访问,私网IP无法直接访问。而NAT则是将私网IP地址转换为公网IP地址(将IP报文头部的私网IP地址改为可以提供访问的公网IP地址),从而实现用户上网功能或服务器在互联网上提供服务。NAT还可以使得一个公网IP代表多个不同的内网IP,这样便节省了IP地址资源。

1.3 NAT的类型与分类

NAT分为静态转换、动态转换、端口转换

  1. 静态转换:私有地址与公有地址进行一对一的映射。这种一对一映射无法缓解可用公有地址短缺的问题。
  2. 动态转换:私有地址与公有地址进行一对多的映射。首先建立公有地址地址池,私有地址向外通信时,会从公有地址地址池中选择非在用的公有地址进行映射,当通信结束时,释放映射关系,公有地址重新恢复到地址池中待用。弊端:若私有地址向外通信,而公有地址地址池中无可用公有地址时,会等待公有地址释放后在进行通信。
  3. 端口转换:在大多数网络中,一般都使用的是IP上的某个端口(如80、443、3389等),所以不需要进行全地址映射,只需要私有地址端口映射到公有地址端口上,直接访问公有地址加端口号的形式便可以。这样可以使得一个公有地址可以对应多个私有地址,从而大大缓解了公有地址紧缺的问题。
  4. Easy IP:为小型网络,一般为家庭、小型网吧、办公室等内部主机不多的地方。通过拨号方式获取一个临时公网IP地址进行外网的访问。
1.4 扩展:SNAT与DNAT区别
  1. SNAT是私网访问外网时,报文中源IP地址(私网IP地址)转换为公网IP地址过程。此转换可以使用静态、动态等转换方式,且内部的多台主机共用同一公网IP地址进行外网访问。
  2. DNAT是外网访问私网时,报文中目的IP地址(公网IP地址)转换为私网IP地址过程。此转换过程可以使用静态、动态、端口等转换方式。
1.5 实例

公司(有固定公网IP地址)上网访问某网站简易过程

  1. PC访问 www.xxxxxxx.com ,由于存在域名会通过DNS服务器解析域名从而获得公网IP地址。
  2. PC收到此网站的公网IP地址后,封装数据。源IP为PC的IP地址;目的地址为解析获得的公网IP地址;目的端口号为80。并且将此报文发送给网关设备, 网关设备收到数据报文后通过路由关系发送到出口设备。
  3. 出口设备配置有NAT转换关系,将报文中的源IP地址转换为公网IP地址。重新封装数据报文后发出。(这一步为SNAT)
  4. 数据报文到达公有网络上,由于目的IP地址为公网IP地址,通过公网路由关系转发到网站端(服务端)。
  5. 服务端收到报文后,检查到目的地址为公网IP地址。通过本端配置的NAT映射关系,与公网IP地址相匹配的映射关系中寻找私网IP地址。找到映射关系后,将目的地址转换为私网IP地址(这一步为DNAT)。在通过内部网络路由关系将数据报文转发至相应的服务器。
  6. 服务器将收到的报文通过相关计算,重新封装报文,发送给用户PC。原理不变,经过多次数据交互。最后用户PC接收到数据报文,网站就被打开了。

5、iptables实现SNAT和DNAT,并对规则持久保存

实现SNAT和DNAT都需要开启内核数据转发功能

[root@centos8 ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
1. SNAT

(1) 基于nat表的target,适用于固定的公网IP

SNAT选项:
--to-source [ipaddr[-ipaddr]][:port[-port]]
--random

语法:

iptables -t nat -A POSTROUTING -s localNET ! -d localNET -j SNAT --to-source ExtIP

范例:

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j SNAT --to-source 192.168.10.8

(2) MASQUERADE:基于nat表的target,适用于动态的公网IP,如:拨号网络

MASQUERADE选项:
--to-ports port[-port]
--random

语法:

iptables -t nat -A POSTROUTING -s localNET ! -d localNET -j MASQUERADE

范例:

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE
2. DNAT

nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能

DNAT选项:
--to-destination [ipaddr[-ipaddr]][:port[-port]]

语法:

iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterServerIP[:PORT]

范例:在10.0.0.8(防火墙)上设置规则,实现外网(192.168.10.100)可以访问内网(10.0.0.7)

[root@centos8 ~]#iptables -t nat -A PREROUTING -d 192.168.10.8 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.7

范例:内网端口更改为8080,实现外网(192.168.10.100)访问内网(10.0.0.7)

[root@centos8 ~]#iptables -t nat -R PREROUTING 1 -d 192.168.10.8 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.7:8080

范例:REDIRECT转发:内网端口再次更改为9090,实现外网(192.168.10.100)访问内网(10.0.0.7)

[root@centos7 ~]#iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 8080 -j REDIRECT --to-ports 9090
3. 持久保存规则
3.1 iptables规则持久保存

CentOS 7,8

iptables-save > /PATH/TO/SOME_RULES_FILE

CentOS 6

#将规则覆盖保存至/etc/sysconfig/iptables文件中
service iptables save
3.2 加载规则

CentOS 7,8 重新载入预存规则文件中规则:

iptables-restore < /PATH/FROM/SOME_RULES_FILE

iptables-restore选项

  • -n, --noflush:不清除原有规则
  • -t, --test:仅分析生成规则集,但不提交

CentOS 6

#会自动从/etc/sysconfig/iptables 重新载入规则
service iptables restart
3.3 开机自动重载规则

3.3.1 用脚本保存iptables命令;让此脚本开机后自动运行

/etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE

3.3.2 用规则文件保存各规则,开机时自动载入此规则文件中的规则

在/etc/rc.d/rc.local文件添加

[root@centos8 ~]#vim /etc/rc.d/rc.local
iptables-restore < /PATH/FROM/SOME_RULES_FILE
[root@centos8 ~]#chmod +x /etc/rc.d/rc.local    #加执行权限

3.3.3 定义Unit File,CentOS 7,8安装iptables-services实现iptables.service
范例:CentOS 7,8使用iptables-services

[root@centos8 ~]# yum -y install iptables-services
 
[root@centos8 ~]# cp /etc/sysconfig/iptables{,.bak}
 
#保存现在的规则到文件中方法1
 
[root@centos8 ~]# /usr/libexec/iptables/iptables.init save
 
#保存现在的规则到文件中方法2
 
iptables-save > /etc/sysconfig/iptables
 
#开机启动
 
[root@centos8 ~]# systemctl enable iptables.service 

范例:

#centos7,8安装iptables-services
[root@centos8 ~]#yum -y install iptables-services
#实现SNAT
[root@centos8 ~]#iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j SNAT --to-source 192.168.10.8
#实现DNAT
[root@centos8 ~]#iptables -t nat A PREROUTING -d 192.168.10.8 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.7
#对规则持久保存
[root@centos8 ~]#iptables-save > /etc/sysconfig/iptables
[root@centos8 ~]#iptables -F       #清空规则
[root@centos8 ~]#iptables -vnL     #没有任何规则
[root@centos8 ~]#systemctl start iptables
[root@centos8 ~]#iptables -vnL     #查看到保存的规则
#开机启动
[root@centos8 ~]#systemctl enable iptables
[root@centos8 ~]#reboot    #重启
[root@centos8 ~]#iptables -vnL     #查看到保存的规则
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容