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 
相关推荐
耶啵奶膘1 小时前
uniapp-是否删除
linux·前端·uni-app
_.Switch2 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410832 小时前
文件系统和日志管理
linux·运维·服务器
JokerSZ.2 小时前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
XMYX-02 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
芯盾时代2 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方3 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘3 小时前
NFS服务器
运维·服务器
苹果醋34 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰4 小时前
[linux]docker基础
linux·运维·docker