Linux防火墙:SNAT和DNAT地址转换操作

目录

一、NAT

1、NAT概念

2、NAT分类

二、SNAT

1、SNAT概念

2、SNAT源地址转换过程

3、已知外网地址的SNAT操作

[3.1 配置网关服务器](#3.1 配置网关服务器)

[3.1.1 添加网卡](#3.1.1 添加网卡)

[3.1.2 配置ens33网卡](#3.1.2 配置ens33网卡)

[3.1.3 配置ens36网卡](#3.1.3 配置ens36网卡)

[3.1.4 重启网卡并查看网卡是否生效](#3.1.4 重启网卡并查看网卡是否生效)

[3.1.5 开启路由转发功能](#3.1.5 开启路由转发功能)

[3.1.6 配置防火墙策略](#3.1.6 配置防火墙策略)

[3.2 配置内网客户端](#3.2 配置内网客户端)

[3.3 配置外网服务器](#3.3 配置外网服务器)

[3.4 测试](#3.4 测试)

4、未知或外网地址不固定时的SNAT操作

[4.1 重新配置网关服务器的iptables规则](#4.1 重新配置网关服务器的iptables规则)

[4.2 测试](#4.2 测试)

三、DNAT

1、DNAT概念

2、DNAT源地址转换过程

3、DNAT的相关操作

[3.1 重新配置网关服务器的iptables规则](#3.1 重新配置网关服务器的iptables规则)

[3.2 测试](#3.2 测试)


一、NAT

1、NAT概念

在Linux 的 iptables 中,NAT(Network Address Translation)用于修改数据包的源或目标 IP 地址,以实现网络地址转换。它允许将私有网络内部的 IP 地址映射到公共网络中使用的 IP 地址,从而使得内部网络可以与外部网络进行通信

2、NAT分类

  • **SNAT(Source NAT):**也称为源地址转换,它用于修改数据包的源 IP 地址。当数据包离开本地网络时,它会被替换成路由器的外部接口 IP 地址,从而隐藏了内部网络的真实 IP 地址
  • DNAT(Destination NAT):也称为目标地址转换,它用于修改数据包的目标 IP 地址。当数据包进入本地网络时,它会被重写为指向内部主机的 IP 地址,这样可以将外部请求导向内部服务器
  • MASQUERADE:这是一种特殊形式的 SNAT,它用于动态地将内部私有 IP 地址映射到外部公共 IP 地址。MASQUERADE 适用于连接到 Internet 的场景,其中内部主机的 IP 地址通常是动态分配的
  • REDIRECT:这种类型的 NAT 用于将数据包重定向到同一台机器上的不同端口。这在端口转发和代理服务器设置中非常有用

二、SNAT

1、SNAT概念

**SNAT(Source NAT),**也称为源地址转换,源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访问外部网络,即内网的多部主机可以通过一个有效的公网ip地址访问外部网络

SNAT策略的原理:

  • 源地址转换
  • 修改数据包的源地址

2、SNAT源地址转换过程

  • 数据包从内网发送到公网时,SNAT会把数据包的源地址由私网IP转换成公网IP
  • 当相应的数据包从公网发送到内网时,会把数据包的目的地址由公网IP转换为私网IP
  • 当内网有多台主机访问外网时,SNAT在转换时会自动分配端口,不同内网主机会通过端口号进行区分

3、已知外网地址的SNAT操作

运用SNAT策略将局域网中的客户端IP封装为网关服务器的外网IP,访问web服务器的http服务

3.1 配置网关服务器

前提:关闭所有机器的firewalld防火墙和核心防护,开启iptables防火墙

bash 复制代码
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
[root@localhost ~]#systemctl start iptables.service
bash 复制代码
#所有机器下载httpd服务并开启
[root@localhost ~]#yum install -y httpd
[root@localhost ~]#systemctl start httpd
3.1.1 添加网卡
3.1.2 配置ens33网卡
bash 复制代码
[root@localhost ~]#cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]#vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=172.16.12.10
NETMASK=255.255.255.0
GATEWAY=172.16.12.2
3.1.3 配置ens36网卡
bash 复制代码
[root@localhost ~]#cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]#vim ifcfg-ens36
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=11.0.0.10
NETMASK=255.255.255.0
GATEWAY=11.0.0.10
3.1.4 重启网卡并查看网卡是否生效
bash 复制代码
[root@localhost ~]#systemctl restart network
[root@localhost ~]#ifconfig
3.1.5 开启路由转发功能
bash 复制代码
[root@localhost ~]#sysctl -a|grep ip_forward
[root@localhost ~]#echo "net.ipv4.ip_forward = 1">>/etc/sysctl.conf
[root@localhost ~]#sysctl -p
3.1.6 配置防火墙策略
bash 复制代码
#将内网地址通过ens36网口,都转为11.0.0.10的外网地址
[root@localhost ~]#iptables -t nat -A POSTROUTING -s 172.16.12.0/24 -o ens36 -j SNAT --to 11.0.0.10
#在出口的地方加指定POSTROUTING,指定源网段 172.16.12.0/24,指定出口网卡ens36
[root@localhost ~]#iptables -t nat -vnL

3.2 配置内网客户端

bash 复制代码
[root@localhost ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=172.16.12.12 
NETMASK=255.255.255.0
GATEWAY=172.16.12.10
[root@localhost ~]#systemctl restart network
bash 复制代码
#将想要的内容写入外网服务器的网站文件中
[root@localhost ~]#echo "欢迎使用内网客户端" > /var/www/html/index.html

3.3 配置外网服务器

bash 复制代码
[root@localhost ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=11.0.0.11 
NETMASK=255.255.255.0
GATEWAY=11.0.0.10
[root@localhost ~]#systemctl restart network

当修改完ens33网卡后,外网服务器的xshell会因为无网络而断联,这时候需要使用其他能联网的机器远程登录到外网服务器进行后续操作

bash 复制代码
#将想要的内容写入外网服务器的网站文件中
[root@localhost ~]#echo "欢迎使用外网服务器" > /var/www/html/index.html

3.4 测试

bash 复制代码
#内网客户端使用curl命令访问外网服务器的网站
[root@localhost ~]#curl 11.0.0.11
bash 复制代码
#查看源内网IP地址172.16.12.12是否转换为外网IP地址:11.0.0.10
[root@localhost ~]#tailf /var/log/httpd/access_log 

4、未知或外网地址不固定时的SNAT操作

4.1 重新配置网关服务器的iptables规则

首先,其他配置与已知外网地址的SNAT操作一样,只需要改变网关服务器的防火墙测略即可

bash 复制代码
#先清空之前配置的防火墙策略
[root@localhost ~]#iptables -t nat -F
#如果外网地址未知或不固定的时候可以设置伪装
[root@localhost network-scripts]#iptables -t nat -A POSTROUTING -s 172.16.12.0/24 -o ens36 -j MASQUERADE

4.2 测试

bash 复制代码
#内网客户端使用curl命令访问外网服务器的网站
[root@localhost ~]#curl 11.0.0.11
bash 复制代码
#查看源内网IP地址172.16.12.12是否转换为外网IP地址:11.0.0.10
[root@localhost ~]#tailf /var/log/httpd/access_log 

三、DNAT

1、DNAT概念

DNAT(Destination NAT):也称为目标地址转换,它用于修改数据包的目标 IP 地址。当数据包进入本地网络时,它会被重写为指向内部主机的 IP 地址,这样可以将外部请求导向内部服务器

DNAT策略的原理:

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

2、DNAT源地址转换过程

  • 数据包从外网发送到内网时,DNAT会把数据包的目标地址由公网IP转换成私网IP
  • 当相应的数据包从内网发送到公网时,会把数据包的源地址由私网IP转换为公网IP

3、DNAT的相关操作

3.1 重新配置网关服务器的iptables规则

通过DNAT将外网服务器的提供的httpd服务映射到网关服务器ens36网卡,且端口为80上

首先,其他配置与之前的操作一样,只需要改变网关服务器的防火墙测略即可

bash 复制代码
#把从ens36进来的要访问web服务的数据包目的地址转换为172.16.12.12
#指定目的地址为网关服务器的ens36外网网卡的IP地址,将外网服务器的地址映射到网关服务器的内网IP
#指定目的端口为html:80  这里可以修改映射为其它端口,加强安全性
[root@localhost ~]#iptables -t nat -A PREROUTING -i ens36 -d 11.0.0.10 -p tcp --dport 80  -j DNAT --to 172.16.12.10

3.2 测试

bash 复制代码
#查看外网服务端能否使用curl命令访问内网客户端的网站
[root@localhost ~]#curl 172.16.12.12
bash 复制代码
#查看内网客户端的日志
[root@localhost ~]#tailf /var/log/httpd/access_log 
相关推荐
阑梦清川9 分钟前
简明linux系统编程--互斥锁--TCP--UDP初识
linux·udp·tcp·互斥锁·信号·解锁·加锁
hardStudy_h13 分钟前
Linux——常用系统设置和快捷键操作指令
linux·运维·服务器
我叫啥都行39 分钟前
计算机基础知识复习9.7
运维·服务器·网络·笔记·后端
XF鸭1 小时前
TCP 和 UDP 协议的区别?
linux
qq 1778036222 小时前
智能新时代,游戏盾守护顺畅体验
运维·服务器·网络·游戏·云计算·ddos·ip
Flying_Fish_roe2 小时前
linux-安全管理-防火墙与网络安全
linux·数据库·oracle
不见长安见晨雾2 小时前
Linux:vim编辑技巧
linux·编辑器·vim
神秘的土鸡3 小时前
Linux中使用Docker容器构建Tomcat容器完整教程
linux·运维·服务器·docker·容器·tomcat
shuxianshrng3 小时前
大气网格化精细化监管监测系统
大数据·服务器·windows·经验分享
friklogff3 小时前
【C#生态园】构建你的C#操作系统:框架选择与实践
服务器·开发语言·c#