Linux系统之iptables应用SNAT与DNAT

Linux系统之iptables应用SNAT与DNAT

SNAT

1、SNAT的原理介绍

1.1SNAT的应用环境

SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由)

1.2SNAT的原理

SNAT原理:源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映谢

数据包从内网发送到公网时,SNAT会把数据包的源IP由私网IP转换成公网IP

当响应的数据包从公网发送到内网时,会把数据包的目的IP由公网IP转换为私网IP

1.3SNAT转化的前提条件

  • 1.局域网各主机已正确设置IP地址、子网掩码、默认网关地址
  • 2.Linux网关开启IP路由转发
    注意: linxu系统本身是没有转发功能,只有路由发送数据

2、开启SNAT

2.1临时打开

powershell 复制代码
echo 1 >/proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip forward=1

2.2永久打开

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

3、SNAT的转换

3.1固定的公网IP地址

powershell 复制代码
#配置SNAT策略,实现snat功能,将所有192.168.100.0这个网段的ip的源ip改为10.0.0.1
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to 10.0.0.1
                                  可换成单独IP   出站外网网卡            外网IP
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to-source 10.0.0.1-10.0.0.10
                                  内网IP           出站外网网卡                     外网IP或地址池

3.2非固定的公网IP地址(共享动态IP地址)

powershell 复制代码
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE
 
iptables -t nat -A POSTROUTING -s 12.0.0.0/24 -d 192.168.100.0/24 -j MASQUERADE
一个IP地址做SNAT转换,一般可以让内网 100到200 台主机实现上网

DNAT

1、DNAT的原理介绍

1.1应用环境

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

1.2DNAT原理

  • 目标地址转换
  • 修改数据包的目标地址

1.3DNAT转换前提条件

  • 局域网的服务器能够访问Internet
  • 网关的外网地址有正确的DNS解析记录
    Linux网关开启IP路由转发
powershell 复制代码
vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1 
sysct1 -p

2、DNAT的转换

2.1发布内网的Web服务

powershell 复制代码
#把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.80.11
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 80 -j DNAT --to 192.168.80.11
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 80-j DNAT --to-destination 192.168.80.11
				 入站|外网网卡 | 外网ip											             内网服务器ip
 
iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80-j DNAT --to 192.168.80.11-192.168.80.20

SNAT和DNAT实验

PC2:

先添加一块网卡,并将该网卡设置为仅主机模式

powershell 复制代码
systemctl stop firewalld  //关闭防火墙
setenforce 0  //关闭shellinux
powershell 复制代码
ip a //查看网卡信息
powershell 复制代码
cd /etc/sysconfig/network-scripts/
//进入到网卡配置信息目录
cp ifcfg-ens33  ifcfg-ens36
//拷贝ens33的配置文件,并命名为ens36
powershell 复制代码
vim ifcfg-ens36 //进入到ens36的配置文件中进行修改
powershell 复制代码
systemctl restart network  //重新启动网卡
powershell 复制代码
ping 12.0.0.1  //查看一下网卡是否设置成功


永久打开路由转发功能:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1    #将此行写入配置文件
sysctl -p  #读取修改后的配置
powershell 复制代码
iptables -F //清除链内规则
iptables -t nat -A POSTROUTING -s 192.168.91.0/24 -o ens36 -j SNAT --to 12.0.0.1 
//将源地址为192.168.190.0段的私网地址全部  转化为网关地址

PC3

powershell 复制代码
vim /etc/sysconfig/network-scripts/ifcfg-ens33
//进入网卡配置信息文件



PC1

powershell 复制代码
ifconfig ens33 12.0.0.10/24 //设置网卡的ip地址
ping 12.0.0.1   //ping一下pc2查看是否连通
powershell 复制代码
yum -y install httpd  //yum安装http
powershell 复制代码
systemctl start httpd   //启动http
systemctl status httpd  //查看http的状态
powershell 复制代码
cd /var/www/html  //切换到/var/www/html目录
vim index.html  //创建index.html文件,并向其中添加内容"从山峦到海洋"
systemctl stop firewalld  //关闭防火墙
setenforce 0  //关闭shellinux


PC2

powershell 复制代码
curl 192.168.190.101   //请求web服务器,连接pc3
powershell 复制代码
iptables -t nat -A PREROUTING -i ens36 -d 12.0.0/24 -p tcp --dport 80 -j DNAT --to 192.168.190.101///将源地址为12.0.0.0段的公网地址全部转化为网关地址


pc1

powershell 复制代码
curl 12.0.0.1 //连接PC2的ip地址12.0.0.1

可以看到PC2创建的内容

相关推荐
QXWZ_IA32 分钟前
边坡监测预算有限时的建设顺序:虚拟基准站与成本账
网络·数据库
水饺编程1 小时前
第2章:Linux 基础,解压缩【.tar.bz2】压缩包文件
linux·c语言·汇编
Y3815326621 小时前
用 httpx 写 SerpBase 异步客户端:连接池与超时配置
运维·服务器·数据库
Zevalin爱灰灰1 小时前
Linux入门第二部分(ARM裸机篇) 第二章 Cortex-A7 MPCore架构与ARM汇编基础
linux·汇编·arm开发·嵌入式
倔强的石头1061 小时前
【Linux指南】进程通信系列(七):System V 信号量 —— 同步互斥的内核原语
linux·运维·服务器
GeW1 小时前
从"补短板"到"强优势"Linux与数据库认证成为产业跃迁人才支点
linux·数据库
PellyKoo3 小时前
【Ubuntu】GTX 1080 Ti 显卡占用为0但功率高达60W的排查与解决
linux·运维·ubuntu
聪明蛋子哟4 小时前
大模型应用“最后一公里”:从Prompt工程到MCP协议,如何实现跨系统的高可用集成?
网络·prompt
Fruiticecake4 小时前
epoll 回显服务器是怎么工作的:从 accept 队列到就绪链表,以及它和 select / poll 的区别
linux
captain3764 小时前
MyBatis Plus(1)
java·服务器·mybatis