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

1.1 DNS服务原理

当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记
忆的。当网络设备众多,想要记住每个设备的IP地址,可以说是"不可能完成的任务"。那么如何解决这
一难题呢?我们可以给每个网络设备起一个友好的名称,如:www.magedu.org,这种由文字组成的名
称,显而易见要更容易记忆。但是计算机不会理解这种名称的,我们可以利用一种名字解析服务将名称
转化成(解析)成IP地址。从而我们就可以利用名称来直接访问网络中设备了。除此之外还有一个重要
功能,利用名称解析服务可以实现主机和IP的解耦,即:当主机IP变化时,只需要修改名称服务即可,
用户仍可以通过原有的名称进行访问而不受影响。
实现此服务的方法是多样的。如下面所述:
本地名称解析配置文件:hosts
```html/xml
[root@CN02-ASB06 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.4.80.55 www.magedu.org
10.4.80.24 db.magedu.org
[root@CN02-ASB06 ~]#

DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互
映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务器端:53/udp, 53/tcp
BIND:Bekerley Internet Name Domain,由 ISC (www.isc.org)提供的DNS软件实现DNS域名结构
![图片.png](https://s2.51cto.com/images/20220523/1653276631713995.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本
一级域名:Top Level Domain: tld
三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
com, edu, mil, gov, net, org, int,arpa
二级域名:magedu.com
三级域名:study.magedu.com
最多可达到127级域名

#### 1.2 DNS服务工作原理
![图片.png](https://s2.51cto.com/images/20220523/1653276768966546.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

#### 1.3 DNS查询类型
递归查询:一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,
若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结
果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询
迭代查询:一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对
方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起
进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需
要发起多次查询

#### 1.4 名称服务器
Name Server,域内负责解析本域内的名称的DNS服务器
IPv4的根名称服务器:全球共13个负责解析根域的DNS服务器,美国10个,荷兰1,瑞典1,日本1
IPv6的根名称服务器:全球共25个,中国1主3从,美国1主2从

#### 解析类型
```html/xml
FQDN -->IP 正向解析
IP--->FQDN 反向解析
注意:正反向解析是两个不同的名称空间,是两棵不同的解析树

dns 解析简单流程

图片.png

1.5 搭建主-辅DNS服务器

搭建DNS主从服务器架构,实现DNS 服务冗余
需要四台主机
DNS 主服务器 10.4.80.55
DNS 从服务器 10.4.80.24
web服务器 10.4.80.52
客户端 10.4.80.53

提前准备:
关闭SELINUX
关闭防火墙
时间同步

2.主服务器配置

在DNS服务端安装bind

[root@CN02-ASB06 ~]# yum install bind -y
Repository extras is listed more than once in the configuration
Last metadata expiration check: 0:18:43 ago on Tue 07 Jun 2022 08:29:26 AM CST.
Package bind-32:9.11.26-6.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@CN02-ASB06 ~]#

修改bind 配置文件

[root@CN02-ASB06 ~]# vim /etc/named.conf
options {
//注释掉下面两行
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };
//添加一行只允许从服务器进行区域传输
        allow-transfer { 10.4.80.24 };
[root@CN02-ASB06 ~]# vim /etc/named.rfc1912.zones
zone "magedu.org" IN {
        type master;
        file "magedu.org.zone";

};

DNS区域数据库文件

cp -p /var/named/named.localhost /var/named/magedu.org.zone
#如果没有-p,需要改权限。chgrp named magedu.org.zone

[root@CN02-ASB06 ~]# vim /var/named/magedu.org.zone
$TTL 1D
@       IN SOA  master admin.magedu.org. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
        NS      slave
master  A       10.4.80.55
slave   A       10.4.80.24

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

[root@CN02-ASB06 ~]# named-checkconf 
[root@CN02-ASB06 ~]# named-checkzone magedu.org /var/named/magedu.org.zone 
zone magedu.org/IN: loaded serial 0
OK
[root@CN02-ASB06 ~]# systemctl start named
[root@CN02-ASB06 ~]# rndc reload
server reload successful

3.在DNS服务端安装bind

[root@CN02-ASB07 ~]# yum install bind -y

修改bind 配置文件

[root@CN02-ASB07 ~]# vim /etc/named.conf 
//注释掉以下两行
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };
//增加一行 不允许其它主机进行区域传输
allow-transfer { none; };  

[root@CN02-ASB07 ~]# vim /etc/named.rfc1912.zones 
zone "magedu.org.zone" IN {
        type slave;
        masters { 10.4.80.55; };
        file "slaves/magedu.org.slave";
};

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

[root@CN02-ASB07 ~]# named-checkconf 
[root@CN02-ASB07 ~]# systemctl start named
[root@CN02-ASB07 ~]# rndc reload
server reload successful

客户端配置
[root@CN02-ASB05 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens192
BOOTPROTO=static
IPADDR=10.4.80.53
PREFIX=24
GATEWAY=10.4.80.254
DNS1=10.4.80.55
DNS2=10.4.80.24

客户端测试域名解析

[root@CN02-ASB05 ~]# dig www.magedu.org

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> www.magedu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53655
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.magedu.org.            IN  A

;; ANSWER SECTION:
www.magedu.org.     86400   IN  A   10.4.80.52

;; AUTHORITY SECTION:
magedu.org.     86400   IN  NS  master.magedu.org.
magedu.org.     86400   IN  NS  slave.magedu.org.

;; ADDITIONAL SECTION:
master.magedu.org.  86400   IN  A   10.4.80.55
slave.magedu.org.   86400   IN  A   10.4.80.24

;; Query time: 1 msec
;; SERVER: 10.4.80.55#53(10.4.80.55)
;; WHEN: Tue Jun 07 14:47:46 CST 2022
;; MSG SIZE  rcvd: 132

[root@CN02-ASB05 ~]# 

客户端测试主从DNS解析容错

#主DNS 停止服务
[root@CN02-ASB06 ~]# systemctl stop  named
#客户端测试解析
[root@CN02-ASB05 ~]# dig www.magedu.org

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> www.magedu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 46267
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.magedu.org.            IN  A

;; AUTHORITY SECTION:
magedu.org.     10800   IN  SOA master.magedu.org. admin.magedu.org. 0 86400 3600 604800 10800

;; Query time: 2 msec
;; SERVER: 10.4.80.24#53(10.4.80.24)
;; WHEN: Tue Jun 07 14:49:31 CST 2022
;; MSG SIZE  rcvd: 92

[root@CN02-ASB05 ~]# 

2.搭建并实现智能DNS

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

查看监听端口

[root@CN02-ASB04 ~]# ss -tnl | grep -iE "21|22|23|80|3306"
LISTEN     0      50           *:3306                     *:*                  
LISTEN     0      5      192.168.122.1:53                       *:*                  
LISTEN     0      128          *:22                       *:*                  
LISTEN     0      128       [::]:23                    [::]:*                  
LISTEN     0      128       [::]:80                    [::]:*                  
LISTEN     0      128       [::]:22                    [::]:*                  
[root@CN02-ASB04 ~]#

添加iptables规则默认是filter表,在INPUT链上添加,只允许外界访问服务器开放的特定端口

[root@CN02-ASB04 ~]# iptables -A INPUT -s 10.4.80.0/24 -p tcp -m multiport --dports 21,22,23,80,3306 -j ACCEPT
[root@CN02-ASB04 ~]# iptables -vnL 
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
23088   29M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 7047 1512K REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
    0     0 ACCEPT     tcp  --  *      *       10.4.80.0/24         0.0.0.0/0            multiport dports 21,22,23,80,3306

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 4 packets, 576 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@CN02-ASB04 ~]# 

4.NAT 原理总结

Netfilter

Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中
Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块
化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝
契合,并允许对数据报进行过滤、地址转换、处理等操作

netfilter 中五个勾子函数和报文流向
Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、
PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具
(iptables)向其写入规则 由信息过滤表(table)组成,包含控制IP包处理的规则集(rules)规则被分组放在链(chain)上

图片.png

三种报文流向

流入本机:PREROUTING --> INPUT-->用户空间进程

流出本机:用户空间进程 -->OUTPUT--> POSTROUTING

转发:PREROUTING --> FORWARD --> POSTROUTING

iptables的组成

iptables由五个表table和五个链chain以及一些规则组成
链chain
内置链:每个内置链对应于一个钩子函数
自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制,只有hook 钩子调用自定义链时,才生效

图片.png

五个内置链 chain

INPUT  OUTPUT FORWARD  PREROUTING POSTROUTING 

五个表table

filter nat  mangle  raw  security

filter 过滤规则,根据预定义的规则过滤符合条件的数据包,默认表
nat network address translation 地址转换规则表
mangle 修改数据标记位规则表
raw 关闭启用的连接跟踪机制,加快封包穿越防火墙的速度
security 用于强制访问控制 (MAC)  网络规则,由linux 安全模块(例如 SELINUX) 实现

优先级由高到低的顺序为:
security -->raw --->mangle --->nat --->filter

表和链的对应关系

图片.png

数据包过滤匹配流程

图片.png

内核中数据包传输过程

当一个数据包进入网卡时,数据包首先进入 PREROUTING 链,内核根据数据包的目的地IP判断是否需要转送出去

如果数据包是进入本机的,数据包会沿着图向下移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。
本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出

如果数据包是要转发出去的,且内核运行转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出

防火墙工具 iptables

由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告
诉内核如何去处理信息包

NAT net address  translation  支持 PREROUTING  INPUT OUTPUT POSTROUTING 四个链 

请求报文: 修改源/目的IP,由定义如何修改

响应报文: 修改源/目标IP ,根据跟踪机制自动实现

NAT的实现分为下面类型:

SNAT: source NAT  支持postrouting  input  让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改源IP

DNAT: destination NAT 支持prerouting  output 把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP

PNAT :port nat  端口和IP都进行修改

SNAT :基于NAT 表的target 适用于固定的公网IP

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

实验网络拓扑

图片.png

SNAT 实现内部主机访问外部互联网

在防火墙主机上配置 SNAT 实现内网主机访问外部互联网上的服务

1.环境要求

vlan规划:
vlan101 NAT 10.4.101.0/24
vlan102 仅主机 10.4.102.0/24

互联网主机 NAT 10.4.101.100/24  注意:不要配置网关(不是真实的互联网环境)
互联网主机 配置 web服务 httpd 或者nginx

防火墙主机需要配置两块网卡:
注意不要配置网关
防火墙主机需要启用ip_forward
防火墙需要配置SNAT
ens224 互联网出口 10.4.101.254/24
ens256 连接企业内网 10.4.102.254/24

企业内网pc 仅主机 10.4.102.100/24 gw 10.4.101.254/24 (DNAT实验时候可配置成web服务器)
企业内网web服务器 10.4.102.100/24 gw 10.4.101.254/24 (DNAT实验时候需要)
企业内网web服务器配置 web服务 httpd 或者nginx (DNAT实验时候需要)

2.配置过程

互联网主机配置

#互联网主机网卡配置
[root@CN02-ASB04 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens224
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=10.4.101.100
PREFIX=24

[root@CN02-ASB04 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.4.80.254     0.0.0.0         UG    100    0        0 ens192
10.4.80.0       0.0.0.0         255.255.255.0   U     100    0        0 ens192
10.4.101.0      0.0.0.0         255.255.255.0   U     101    0        0 ens224
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@CN02-ASB04 ~]# 

#web服务配置
#源码编译安装 httpd  centos7/8  ubuntu18
[root@CN02-ASB04 ~]# yum install httpd-manual  httpd httpd-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.dgut.edu.cn
Package httpd-manual-2.4.6-97.el7.centos.5.noarch already installed and latest version
Package httpd-2.4.6-97.el7.centos.5.x86_64 already installed and latest version
Package httpd-devel-2.4.6-97.el7.centos.5.x86_64 already installed and latest version
Nothing to do
[root@CN02-ASB04 ~]# systemctl status httpd.service 
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2022-06-07 14:45:22 CST; 2 days ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 20955 (httpd)
   Status: "Total requests: 2; Current requests/sec: 0.1; Current traffic: 512 B/sec"
   CGroup: /system.slice/httpd.service
           ├─20955 /usr/sbin/httpd -DFOREGROUND
           ├─20957 /usr/sbin/httpd -DFOREGROUND
           ├─20958 /usr/sbin/httpd -DFOREGROUND
           ├─20959 /usr/sbin/httpd -DFOREGROUND
           ├─20960 /usr/sbin/httpd -DFOREGROUND
           └─20961 /usr/sbin/httpd -DFOREGROUND

Jun 07 14:45:18 CN02-ASB04 systemd[1]: Starting The Apache HTTP Server...
Jun 07 14:45:22 CN02-ASB04 httpd[20955]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::b68:3bbd:e39d:24db. Set the 'ServerName' directive gl...s this message
Jun 07 14:45:22 CN02-ASB04 systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

防火墙主机配置

#ens224 互联网出口
[root@CN02-ASB05 network-scripts]# vim ifcfg-ens224
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=10.4.101.254
PREFIX=24
#ens256 连接企业内网 
[root@CN02-ASB05 network-scripts]# vim ifcfg-ens256
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens256
DEVICE=ens256
ONBOOT=yes
IPADDR=10.4.102.254
PREFIX=24

[root@CN02-ASB05 network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.4.101.0      0.0.0.0         255.255.255.0   U     101    0        0 ens224
10.4.102.0      0.0.0.0         255.255.255.0   U     102    0        0 ens256
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

防火墙主机启用ip_forward
[root@CN02-ASB05 ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@CN02-ASB05 ~]# sysctl -p
net.ipv4.ip_forward = 1

防火墙配置SNAT
[root@CN02-ASB05 ~]# iptables -t nat -A POSTROUTING -s 10.4.102.0/24 -j SNAT --to-source 10.4.101.254
[root@CN02-ASB05 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 21 packets, 5566 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 21 packets, 5566 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 1 packets, 67 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 1 packets, 67 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 SNAT       all  --  *      *       10.4.102.0/24        0.0.0.0/0            to:10.4.101.254
[root@CN02-ASB05 ~]# 

iptables 规则保存

#永久保存iptables 配置规则CentOS 7 8
#使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限

#持久保存规则
[root@CN02-ASB05 ~]# iptables-save  > /etc/sysconfig/iptables

#加载规则
iptables-restore < /etc/sysconfig/iptables

方法1开机自动重载规则
[root@CN02-ASB05 ~]# vim /etc/rc.local 
iptables-restore < /etc/sysconfig/iptables
[root@CN02-ASB05 ~]# chmod u+x /etc/rc.local 

方法2定义 Unit File, CentOS 7,8 可以安装 iptables-services 实现iptables.service
[root@CN02-ASB05 ~]# yum install -y iptables-services

[root@CN02-ASB05 ~]# systemctl  enable --now  iptables.service 

企业内网pc主机配置

[root@CN02-ASB06 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens224 
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=10.4.102.100
PREFIX=24
GATEWAY=10.4.102.254

[root@CN02-ASB06 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.4.102.254    0.0.0.0         UG    101    0        0 ens224
10.4.102.0      0.0.0.0         255.255.255.0   U     101    0        0 ens224
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

企业内网测试访问互联网web服务

内网主机访问互联网主机上的服务

[root@CN02-ASB06 ~]# curl http://192.168.80.4/index.html
图片.png

外网主机不可以访问内网主机
在真实互联网环境下,外网主机是不能直接访问企业内部的服务器的,在此环境下,如果给互联网主机配置上网关 10.4.101.100/24 可以达到访问 10.4.102.0/24 网段的主机,此时防火墙也是路由器直连两个不同的网段。
[root@CN02-ASB04 ~]# ping 10.4.102.100
PING 10.4.102.100 (10.4.102.100) 56(84) bytes of data.

^C
--- 10.4.102.100 ping statistics ---
24 packets transmitted, 0 received, 100% packet loss, time 23001ms

外网服务器日志

#在外网服务器查看到的 web服务器访问 日志 是防火墙主机的 互联网出口 Ip访问了 http 服务
[root@CN02-ASB04 httpd]# tail -f access_log
10.4.101.254 - - [13/Jun/2022:08:22:01 +0800] "GET / HTTP/1.1" 200 13 "-" "curl/7.29.0"
10.4.101.254 - - [13/Jun/2022:08:32:47 +0800] "GET / HTTP/1.1" 200 13 "-" "curl/7.61.1"
10.4.101.254 - - [13/Jun/2022:08:38:51 +0800] "GET /index.html HTTP/1.1" 200 13 "-" "curl/7.61.1"
10.4.101.254 - - [13/Jun/2022:08:39:07 +0800] "HEAD /index.html HTTP/1.1" 200 - "-" "curl/7.61.1"
10.4.101.254 - - [13/Jun/2022:08:39:10 +0800] "GET /index.html HTTP/1.1" 200 13 "-" "curl/7.61.1"
10.4.101.254 - - [13/Jun/2022:08:39:14 +0800] "HEAD /index.html HTTP/1.1" 200 - "-" "curl/7.61.1"

防火墙转换信息

#防火墙主机 查看状态转换信息

[root@firewalld01 ~]# tail -f /proc/net/nf_conntrack
图片.png

2.DNAT实现外网主机访问内网http 服务

1.环境要求

需要主机三台

vlan规划:
vlan101 NAT 10.4.101.0/24
vlan102 仅主机 10.4.102.0/24

互联网主机 NAT 10.4.101.254/24  注意:不要配置网关(不是真实的互联网环境)

防火墙主机需要配置两块网卡:
注意不要配置网关
防火墙主机需要启用ip_forward
防火墙配置DNAT 映射内网http 服务器IP端口
eth192 互联网出口 10.4.101.254/24
eth224 连接企业内网 10.4.102.254/24

企业内网pc 仅主机 10.4.102.100/24 gw 10.4.102.254/24 (DNAT实验时可配置成web服务器)
企业内网web服务器 10.4.102.200/24 gw 10.4.102.254/24 (DNAT实验时候需要)
企业内网web服务器配置 web服务 httpd 或者nginx (DNAT实验时候需要)

2.配置过程

互联网主机配置

#互联网主机网卡配置
[root@CN02-ASB04 httpd]# cat /etc/sysconfig/network-scripts/ifcfg-ens224 
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=10.4.101.100
PREFIX=24
GATEWAY=10.4.101.254

[root@CN02-ASB04 httpd]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.4.80.254     0.0.0.0         UG    100    0        0 ens192
0.0.0.0         10.4.101.254    0.0.0.0         UG    101    0        0 ens224
10.4.80.0       0.0.0.0         255.255.255.0   U     100    0        0 ens192
10.4.101.0      0.0.0.0         255.255.255.0   U     101    0        0 ens224
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

防火墙主机配置

#ens224 互联网出口
[root@CN02-ASB05 network-scripts]# vim ifcfg-ens224
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=10.4.101.254
PREFIX=24
#ens256 连接企业内网 
[root@CN02-ASB05 network-scripts]# vim ifcfg-ens256
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens256
DEVICE=ens256
ONBOOT=yes
IPADDR=10.4.102.254
PREFIX=24

[root@CN02-ASB05 network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.4.101.0      0.0.0.0         255.255.255.0   U     101    0        0 ens224
10.4.102.0      0.0.0.0         255.255.255.0   U     102    0        0 ens256
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

#防火墙主机启用ip_forward
[root@firewalld01 ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@firewalld01 ~]# sysctl  -p 
net.ipv4.ip_forward = 1

#防火墙配置DNAT

[root@firewalld01 ~]#iptables -t nat -A PREROUTING -d 192.168.80.24/24  -p tcp --dport 80 -j DNAT  --to-destination 172.16.0.200:80

[root@firewalld01 ~]# iptables -t nat -nvL
图片.png

iptables 规则保存

#使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限
#定义Unit File, CentOS 7,8 可以安装 iptables-services 实现iptables.service
[root@firewalld01 ~]# yum install -y  iptables-services
[root@firewalld01 ~]# systemctl enable --now iptables

企业内网pc配置为web服务器

[root@CN02-ASB07 ~]# yum install httpd-devel
[root@CN02-ASB07 ~]# vim /var/www/html/index.html
[root@CN02-ASB07 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd.service(8)
[root@CN02-ASB07 ~]# systemctl start httpd
[root@CN02-ASB07 ~]# curl localhost
10.4.102.200

测试访问内网web服务器

#防火墙收到80请求转发到内网的80,防火墙上不监听80端口,因为iptables用的是内核的功能,不监听端口,应用程序在用户空间监听端口

[root@CN02-ASB04 httpd]# while true ; do curl 10.4.101.254/index.html ; sleep 1 ; done
10.4.102.200
10.4.102.200
10.4.102.200
10.4.102.200
10.4.102.200
10.4.102.200
10.4.102.200

内网主机查看 http 访问日志

图片.png