zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Linux防火墙iptables之SNAT与DNAT

2023-04-18 16:57:48 时间

目录

SNAT策略及应用

SNAT策略概述

开启SNAT的命令

临时打开

永久打开

SNAT转换1:固定的公网IP地址

SNAT转换2:非固定的公网IP地址(共享动态IP地址)

SNAT案例

实验准备

配置网关服务器(192.168.217.254/12.0.0.254)的相关配置

配置外网服务器(12.0.0.12)的相关配置

修改客户端

ping一下网关和外网服务器

开启ip转发功能

实验内外网访问

配置网关服务器的iptables规则

小知识扩展

DNAT策略与应用

DNAT应用环境

DNAT原理

DNAT转换前提条件

DNAT转换1∶ 发布内网的Web服务

DNAT转换2∶ 发布时修改目标端口

DNAT案例

修改客户端

修改内网服务器

在网关服务器添加iptables规则

测试外网是否能访问内网

规则的备份及还原

tcpdump—Linux抓包


SNAT策略及应用

SNAT策略概述

SNAT 应用环境

局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由

SNAT原理

源地址转换,Source Network Address Translation

修改数据包的源地址

SNAT转换前提条件

局域网各主机已正确设置IP地址、子网掩码、默认网关地址

Linux网关开启IP路由转发

开启SNAT的命令

查看当前服务器的路由表

临时打开

echo 1 >/proc/sys/net/ipv4/ip_forward

sysctl -w net.ipv4.ip forward=1

永久打开

vim /etc/ sysctl. conf
net. ipv4.ip_ forward = 1                #将此行写入配置文件
 
sysctl -P                #读取修改后的配置

SNAT转换1:固定的公网IP地址

#配置SNAT策略,实现snat功能,将所有192.168.217.0这个网段的ip的源ip改为10.0.0.1
iptables -t nat -A POSTROUTING -s 192.168.217.0/24 -o ens33 -j SNAT --to 10.0.0.1
                                                         可换成单独IP   出站外网网卡                  外网IP

iptables -t nat -A POSTROUTING -s 192.168.217.0/24 -o ens33 -j SNAT --to-source 10.0.0.1-10.0.0.10
                                                                   内网IP   出站外网网卡                                            外网IP或地址池

SNAT转换2:非固定的公网IP地址(共享动态IP地址)

iptables -t nat -A POSTROUTING -s 192.168.127.0/24 -o ens33 -j MASQUERADE

SNAT案例

实验准备

配置网关服务器(192.168.217.254/12.0.0.254)的相关配置

添加一块网卡

复制并修改ens36卡

#切换至网卡配置文件所在目录
[root@localhost network-scripts]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens36

修改ens33网卡

修改ens36网卡

重启网卡

配置外网服务器(12.0.0.12)的相关配置

修改ens33网卡

重启网卡

如果有多张网卡,单独重启一张网卡

ifdown ens33 ; ifup ens33

安装阿帕奇服务

yum install httpd -y

如果安装不上的话,搭个本地仓库

修改客户端

ping一下网关和外网服务器

外网服务器ping不通的话去网关服务器修改内核的配置文件

开启ip转发功能

修改内核的配置文件

vim /etc/sysctl.conf 

net. ipv4.ip_ forward = 1      #将此行写入配置文件

sysctl -p                               #读取修改后的配置

实验内外网访问

登陆外网服务器

查看外网的http访问日志,跟踪一下

配置网关服务器的iptables规则

安装iptables,关闭防火墙和selinux,开启iptables

[root@localhost network-scripts]#yum install -y iptables*
@localhost network-scripts]#systemctl stop firewalld.service 
[root@localhost network-scripts]#setenforce 0
[root@localhost network-scripts]#systemctl start iptables.service

查看网关服务器的iptables规则并清除

iptables -nL                   #查看规则
iptables -nL -t nat         #查看规则
iptables -F                   #清除iptables的规则
iptables -F -t nat         #清除iptables的规则

iptables -t -nat -A POSTROUTING   修改源地址  -s  指定局域网网段网关  -o  出站网卡 -j 控制类型  --to  指定要转换成的公网ip 

客户端重新访问外网服务器,再查看外网的http访问日志

实现了地址转换

小知识扩展

一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网。

专业的事情要让专业的设备去干,让专业的硬件防火墙或专业的路由器干会更好

DNAT策略与应用

DNAT应用环境

在Internet中发布位于局域网内的服务器

DNAT原理

目标地址转换,Destination Network Address Translation
修改数据包的目标地址

DNAT转换前提条件

局域网的服务器能够访问Internet

网关的外网地址有正确的DNS解析记录

Linux网关开启IP路由转发

vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1 
sysctl -p

DNAT转换1∶ 发布内网的Web服务

iptables -t nat -A PREROUTING (修改目的地址) -i 指定从哪个网卡进入数据 -d 指定外网来的数据包的目的ip -p 指定tcp协议 --dport 数据包的目的端口 -j DNAT --to 端口


iptables -t nat -A PREROUTING (修改目的地址) -i 指定从哪个网卡进入数据 -d 指定外网来的数据包的目的ip -p 指定tcp协议 --dport 数据包的目的端口 -j DNAT --to 端口
#把从ens36进来的要访问web服务的数据包目的地址转换为 192.168.217.20:80

iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 8080 -j DNAT --to 192.168.217.20:80

DNAT转换2∶ 发布时修改目标端口

#发布局域网内部的OpenSSH服务器, 外网主机需使用80端口进行连接
ciptables -t nat -A POSTROUTING -s 192.168.217.80/24 -o ens36 -j SNAT --to 12.0.0.254

DNAT案例

修改客户端

修改内网服务器

在网关服务器添加iptables规则

#先清空规则

[root@localhost yum.repos.d]#iptables -F -t nat

#添加规则

测试外网是否能访问内网

在内网服务器中重启httpd服务

[root@localhost network-scripts]# systemctl restart httpd
[root@localhost network-scripts]# cd /var/www/html  
[root@localhost html]# vim index.html      更改网页内容

在内网服务器上实时跟踪一下 

规则的备份及还原

备份 

重定向输出

删除规则并查看

实现快速还原,重定向输入从文件读取

保存到默认配置文件当中

iptables-save >/etc/sysconfig/iptables      重定向输入到默认配置文件当中

清楚规则关掉iptables

再查看nat

已经成功了

tcpdump—Linux抓包

tcpdump tcp-i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

(1)tcp∶ ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型

(2)-i ens33 ∶只抓经过接口ens33的包

(3)-t ∶不显示时间戳

(4)-s 0 ∶ 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包

(5)-c 100 ∶只抓取100个数据包

(6)dst port ! 22 ∶不抓取目标端口是22的数据包

(7)src net 192.168.1.0/24 ∶数据包的源网络地址为192.168.1.0/24。Net:网段,host:主机

(8)-w ./target.cap ∶ 保存成cap文件,方便用ethereal (即wireshark)分析