一、简述DNS服务器原理,并搭建主-辅服务器
1、DNS是什么
DNS(Domain Name Service的缩写)的作用就是根据域名查出IP地址。IP地址是由32位二进制数字组成,人们很难记住这些IP,相反,大家愿意使用比较容易记忆的主机名字。而电脑在处理IP数据报文时,是使用IP地址的,因为它是固定长度。
DNS查询的类型对于客户端来说是递归查询,对于DNS服务器来说,绝大多数是迭代查询的。DNS名称解析中,从名称到IP的查询叫做正向解析,而从IP到名称的查询叫做反向解析。如果DNS服务器至少解析了一个或一个以上的域叫做DNS主服务器或者DNS辅助服务器,如果不负责任何解析叫做DNS缓存服务器。
现在互联网规模很大,DNS被设计成一个分布式的数据库系统,他分布的功能就是把一个大的数据库切割成很多小的数据库,来分别提供一部分数据的处理。全球一共分布了13台DNS根服务器,名字为A至M。
2、DNS的域名解析过程
用户使用浏览器输入网址时域名解析过程:
客户访问时,先查自己的hosts文件,有则返回
客户hosts中没有就去查自己的缓存,有则返回
客户缓存没有就去找dns服务器
dns服务器先找根服务器获得顶级域服务器地址
dns服务器在找顶级域服务器去获得二级域服务器地址
dns服务器从二级域服务器获得最终的IP地址
客户端从dns服务器中得到IP地址
DNS区域数据库文件
资源记录(Resource Record)的类型有以下几个:
SOA:起始授权记录,只能有一个,必须放在第一条
NS:域名服务记录,其中一个为主,可以有多个
A:IPv4地址记录
AAAA:IPv6地址记录
CNAME:别名记录
PTR:反向解析记录
MX:邮件交换器
相关测试工具及命令
dig命令
用于测试DNS系统,其不会查询hosts文件,使用格式:
dig [-t RR_TYPE] name [@SERVER] [query options]
常用的查询选项包括:
+[no]trace:跟踪解析过程;
+[no]recurse:进行递归解析;
其常用用法包括:
反向解析测试:dig -x IP
测试区域传送:dig -t [axfr|ixfr] DOMAIN [@server]
host命令
其用法类似于dig命令,使用格式为:
host [-t RR_TYPE] name SERVER_IP
nslookup命令
nslookup命令有两种使用模式,一种是命令模式,另一个交互模式。
其命令模式的使用格式为:nslookup [-options] [name] [server]
而交互模式的使用格式为:
nslookup>
server IP:以指定的IP为DNS服务器进行查询;
set q=RR_TYPE:要查询的资源记录类型;
name:要查询的名称;
rndc命令
rndc命令为named服务的控制命令,其常用的用法有以下:
rndc status:显示服务器状态
rndc reload:在不停止DNS服务器工作的情况下,重新加载配置文件和区域文件
rndc flush:清理DNS缓存
bind中的安全相关的配置
bind有四个内置的acl
none:没有一个主机;
any:任意主机;
local:本机;
localnet:本机所在的IP所属的网络;
访问控制指令:
allow-query {}; 允许查询的主机;白名单;
allow-transfer {}; 允许向哪些主机做区域传送;默认为向所有主机;
allow-recursion {}; 允许哪些主机向当前DNS服务器发起递归查询请求;
allow-update {}; DDNS,允许动态更新区域数据库文件中内容;
搭建主辅DNS服务器:
①主服务器(正向解析)
[root@centOS8 ~]# yum install bind -y
[root@centOS8 ~]# vim /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };
// directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; };
[root@centOS8 ~]# vim /etc/named.rfc1912.zones
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and https://tools.ietf.org/html/rfc6303
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// Note: empty-zones-enable yes; option is default.
// If private ranges should be forwarded, add
// disable-empty-zone "."; into options
//
zone "test.org" IN {
type master;
file "test.org.zone";
};
[root@centOS8 ~]# cp -p /var/named/named.localhost /var/named/test.org.zone
[root@centOS8 ~]# vim /var/named/test.org.zone
$TTL 1D
@ IN SOA master admin.test.org.. (
20220128 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
www A 10.0.0.7
[root@centOS8 ~]# yum install httpd -y
[root@centOS8 ~]# echo www.magedu.org > /var/www/html/index.html
[root@centOS8 ~]# systemctl start httpd
[root@centOS8 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
UUID=2f408078-bcb5-448e-aa6c-e58530542b06
DEVICE=eth0
IPADDR=10.0.0.8
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.8
ONBOOT=yes
[root@magedu ~]# nmcli con reload
[root@magedu ~]# nmcli con up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@magedu ~]# service network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Determining if ip address 10.0.0.6 is already in use for device eth0...
[ OK ]
[root@magedu ~]# cat /etc/resolv.conf
nameserver 10.0.0.8
①主服务器(反向解析)
[root@centOS8 ~]# vim /etc/named.conf
listen-on port 53 { localhost; };
allow-query { any; };
[root@centOS8 ~]# vim /etc/named.rfc1912.zones
zone "0.0.10.in-addr.arpa" {
type master;
file "magedu.org.zone";
};
[root@centOS8 named]# cp -p named.loopback 10.0.0.zone
[root@centOS8 named]# vim 10.0.0.zone
$TTL 1D
@ IN SOA ns1 admin.magedu.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.magedu.org.
100 PTR www.magedu.org.
200 PTR app.wange.org.
[root@centOS8 named]# named-checkzone 0.0.10.in-addr.arpa 10.0.0.zone
10.0.0.zone:10: TTL set to prior TTL (100)
zone 0.0.10.in-addr.arpa/IN: loaded serial 0
OK
[root@magedu ~]#dig -t ptr 100.0.0.10.in-addr.arpa. @10.0.0.8
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t ptr 100.0.0.10.in-addr.arpa.
@10.0.0.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46393
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: a9b985772abbae6d4bcd7aa55f1b8af3efe9c3e53640b037 (good)
;; QUESTION SECTION:
;100.0.0.10.in-addr.arpa. IN PTR
;; ANSWER SECTION:
;; ANSWER SECTION:
100.0.0.10.in-addr.arpa. 86400 IN PTR www.magedu.org.
;; AUTHORITY SECTION:
0.0.10.in-addr.arpa. 86400 IN NS ns1.magedu.org.
;; ADDITIONAL SECTION:
ns1.magedu.org. 86400 IN A 10.0.0.7
;; Query time: 0 msec
;; SERVER: 10.0.0.8#53(10.0.0.8)
;; WHEN: Sat Jul 25 09:29:23 CST 2020
;; MSG SIZE rcvd: 142
[root@magedu ~]#dig -x 10.0.0.100 @10.0.0.8
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> -x 10.0.0.100 @10.0.0.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37893
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;100.0.0.10.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.0.0.10.in-addr.arpa. 86400 IN PTR www.magedu.org.
;; ADDITIONAL SECTION:
ns1.magedu.org. 86400 IN A 10.0.0.7
;; Query time: 1 msec
;; SERVER: 10.0.0.8#53(10.0.0.8)
;; WHEN: Sat Jul 25 09:30:46 2020
;; MSG SIZE rcvd: 103
[root@magedu ~]#host 10.0.0.100
100.0.0.10.in-addr.arpa domain name pointer www.magedu.org.
[root@magedu ~]#nslookup 10.0.0.200
Server: 10.0.0.8
Address: 10.0.0.8#53
100.0.0.10.in-addr.arpa name = www.magedu.org.
exit
C:\Users\wang>ping -a 10.0.0.100
②辅服务器
环境
DNS主服务器:10.0.0.8
DNS从服务器:10.0.0.18
web服务器:10.0.0.7
DNS客户端:10.0.0.6
[root@centOS8 ~]# vim /etc/named.conf
options {
// listen-on port 53 { localhost; };
// allow-query { any; };
allow-query { 10.0.0.18; };
[root@centOS8 ~]# vim /etc/named.rfc1912.zones
zone "magedu.org" {
type master;
file "magedu.org.zone";
};
[root@centOS8 ~]# cp -p /var/named/named.localhost /var/named/magedu.org.zone
[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
server reload successful
(从服务器)[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" {
type slave;
masters { 10.0.0.8; };
file "slaves/magedu.org.slave";
};
[root@magedu ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=10.0.0.8
DNS2=10.0.0.18
二、搭建并实现智能DNS
环境:
DNS主服务器&web服务器1:10.0.0.8/24,172.16.0.8/16
web服务器2:10.0.0.7/24
web服务器3:172.16.0.7816
DNS客户端1:10.0.0.6/24
DNS客户端2:172.16.0.6/16
[root@centOS8 ~]# ip a
1: lo:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:
link/ether 00:0c:29:f7:8f:6a brd ff:ff:ff:ff:ff:ff
inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fef7:8f6a/64 scope link
valid_lft forever preferred_lft forever
3: eth1:
link/ether 00:0c:29:f7:8f:74 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.8/16 brd 172.16.255.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fef7:8f74/64 scope link
valid_lft forever preferred_lft forever
[root@centOS8 ~]# vim /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
acl beijingnet {
10.0.0.0/24;
};
acl shanghainet {
172.16.0.0/16;
};
acl othernet {
any;
};
// listen-on port 53 { localhost; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
// allow-query { any; };
// allow-query { 10.0.0.18; };
view beijingview {
match-clients { beijingnet;};
include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
match-clients { shanghainet;};
include "/etc/named.rfc1912.zones.sh";
};
view otherview {
match-clients { othernet;};
include "/etc/named.rfc1912.zones.other";
};
include "/etc/named.root.key";
[root@centOS8 ~]# vim /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.bj"
};
[root@centOS8 ~]# vim /etc/named.rfc1912.zones.sh
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.sh";
};
[root@centOS8 ~]# vim /etc/named.rfc1912.zones.other
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.other";
};
[root@centOS8 ~]# chgrp named /etc/named.rfc1912.zones.bj
[root@centOS8 ~]# chgrp named /etc/named.rfc1912.zones.sh
[root@centOS8 ~]# chgrp named /etc/named.rfc1912.zones.other
[root@centOS8 ~]# vim /var/named/magedu.org.zone.bj
$TTL 1D
@ IN SOA master admin.magedu.org. (
2022012920 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 10.0.0.7
www CNAME websrvi
[root@centOS8 ~]# vim /var/named/magedu.org.zone.sh
$TTL 1D
@ IN SOA master admin.magedu.org. (
2022012920 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
webssrv A 192.16.0.7
www CNAME websrv
[root@centOS8 ~]# vim /var/named/magedu.org.zone.other
$TTL 1D
@ IN SOA master admin.magedu.org. (
2022012920 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 127.0.0.1
www CNAME websrv
[root@centOS8 ~]# chgrp named /var/named/magedu.org.zone.bj
[root@centOS8 ~]# chgrp named /var/named/magedu.org.zone.sh
[root@centOS8 ~]# chgrp named /var/named/magedu.org.zone.other
三、使用iptable实现:放行ssh,telnet,ftp,web服务80端口,其他端口服务全部拒绝
[root@centOS8 ~]# yum -y install iptables
[root@centOS8 ~]# iptables -A INPUT -p tcp -s 0/0 --dport 23 -j ACCEPT
[root@centOS8 ~]# iptables -A INPUT -p tcp -s 0/0 --dport 20 -j ACCEPT
[root@centOS8 ~]# iptables -A INPUT -p tcp -s 0/0 --dport 21 -j ACCEPT
[root@centOS8 ~]# iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT
[root@centOS8 ~]# iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT
[root@centOS8 ~]# iptables -A INPUT -p tcp -s 0/0 --dport 443 -j ACCEPT
[root@centOS8 ~]# iptables -P INPUT DROP
[root@centOS8 ~]# iptables -P OUTPUT DROP
[root@centOS8 ~]# service iptables save
[root@centOS8 ~]# service iptables restart
[root@centOS8 ~]# iptables -I INPUT -s 10.10.10.1/32 -p tcp -m tcp -m multiport --dports 20,21,2000:2500 -j ACCEPT
四、NAT原理总结
四、NAT原理总结
① NAT的产生
由于网络的飞速发展和网络应用的极速增多,致使IPv4可用地址空间逐渐枯竭。尽管IPv6可以在根本上解决地址枯竭问题,但IPv4发展到IPv6还需要一个过渡,而这便产生了NAT。
② NAT的作用
IP地址分为公网IP与私网IP。一般情况下,在互联网中,公网IP可直接访问,私网IP无法直接访问。而NAT则是将私网IP地址转换为公网IP地址(将IP报文头部的私网IP地址改为可以提供访问的公网IP地址),从而实现用户上网功能或服务器在互联网上提供服务。NAT还可以使得一个公网IP代表多个不同的内网IP,这样便节省了IP地址资源。
③ NAT的类型与分类
NAT分为静态转换、动态转换、端口转换
静态转换:私有地址与公有地址进行一对一的映射。这种一对一映射无法缓解可用公有地址短缺的问题。
动态转换:私有地址与公有地址进行一对多的映射。首先建立公有地址地址池,私有地址向外通信时,会从公有地址地址池中选择非在用的公有地址进行映射,当通信结束时,释放映射关系,公有地址重新恢复到地址池中待用。弊端:若私有地址向外通信,而公有地址地址池中无可用公有地址时,会等待公有地址释放后在进行通信。
端口转换:在大多数网络中,一般都使用的是IP上的某个端口(如80、443、3389等),所以不需要进行全地址映射,只需要私有地址端口映射到公有地址端口上,直接访问公有地址加端口号的形式便可以。这样可以使得一个公有地址可以对应多个私有地址,从而大大缓解了公有地址紧缺的问题。
Easy IP:为小型网络,一般为家庭、小型网吧、办公室等内部主机不多的地方。通过拨号方式获取一个临时公网IP地址进行外网的访问。
④扩展:SNAT与DNAT区别
SNAT是私网访问外网时,报文中源IP地址(私网IP地址)转换为公网IP地址过程。此转换可以使用静态、动态等转换方式,且内部的多台主机共用同一公网IP地址进行外网访问。
DNAT是外网访问私网时,报文中目的IP地址(公网IP地址)转换为私网IP地址过程。此转换过程可以使用静态、动态、端口等转换方式。
五、iptables实现SNAT和DNAT,并对规则持久保存
实现SNAT和DNAT都需要开启内核数据转发功能
[root@localhost ~]# vim /etc/sysctl.conf
1net.ipv4.ip_forward=0...net.ipv4.ip_forward=1
①SNAT
基于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
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.122.103
②DNAT
nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能
DNAT选项:
--to-destination [ipaddr[-ipaddr]][:port[-port]]
DNAT语法:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --todestination InterSeverIP[:PORT]
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.122.103 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.6:80
③iptables规则持久保存
CentOS 7、8
iptables-save>/PATH/TO/SOME_RULES_FILE
CentOS 6
将规则覆盖保存至/etc/sysconfig/iptables文件中service iptables save
④加载规则
CentOS7、8重新载入预存规则文件中的规则:iptables-restore iptables-restore选项
-n, --noflush:不清除原有规则
-t, --test:仅分析生成规则集,但不提交
CentOS 6:
service iptables restart 会自动从/etc/sysconfig/iptables 重新载入规则
⑤开机自动挂载规则
用脚本保存各iptables命令;让此脚本开机后自动运行
/etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE
用规则文件保存各规则,开机时自动载入此规则文件中的规则
在/etc/rc.d/rc.local文件添加iptables-restore 定义Unit File, CentOS 7,8 可以安装 iptables-services 实现iptables.service