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

目录

一、NAT

1、NAT概念

2、NAT分类

二、SNAT

1、SNAT概念 

2、SNAT源地址转换过程

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

3.1 配置网关服务器

3.1.1 添加网卡

3.1.2 配置ens33网卡

3.1.3 配置ens36网卡

3.1.4 重启网卡并查看网卡是否生效

3.1.5 开启路由转发功能

3.1.6 配置防火墙策略

3.2 配置内网客户端

3.3 配置外网服务器

3.4 测试

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

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

4.2 测试

三、DNAT

1、DNAT概念 

2、DNAT源地址转换过程

3、DNAT的相关操作

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

3.2 测试


一、NAT

1、NAT概念

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

支持PREROUTING、INPUT、OUTPUT、POSTROUTING四个链

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地址访问外部网络

支持POSTROUTING、INPUT链

SNAT策略的原理:

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

2、SNAT源地址转换过程

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

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

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

3.1 配置网关服务器

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

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
[root@localhost ~]#systemctl start iptables.service
#所有机器下载httpd服务并开启
[root@localhost ~]#yum install -y httpd
[root@localhost ~]#systemctl start httpd
3.1.1 添加网卡

3.1.2 配置ens33网卡
[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网卡
[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 重启网卡并查看网卡是否生效
[root@localhost ~]#systemctl restart network
[root@localhost ~]#ifconfig

3.1.5 开启路由转发功能
[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 配置防火墙策略
#将内网地址通过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 配置内网客户端

[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
#将想要的内容写入外网服务器的网站文件中
[root@localhost ~]#echo "欢迎使用内网服务端" > /var/www/html/index.html

3.3 配置外网服务器

[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会因为无网络而断联,这时候需要使用其他能联网的机器远程登录到外网服务器进行后续操作

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

3.4 测试

#内网客户端使用curl命令访问外网服务器的网站
[root@localhost ~]#curl 11.0.0.11

#查看源内网IP地址172.16.12.12是否转换为外网IP地址:11.0.0.10
[root@localhost ~]#tailf /var/log/httpd/access_log 

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

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

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

#先清空之前配置的防火墙策略
[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 测试

#内网客户端使用curl命令访问外网服务器的网站
[root@localhost ~]#curl 11.0.0.11

#查看源内网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 地址,这样可以将外部请求导向内部服务器

支持PREROUTING 、OUTPUT链

DNAT策略的原理:

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

2、DNAT源地址转换过程

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

3、DNAT的相关操作

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

通过DNAT使外网客户端能够访问公司内网的web服务器

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

#把从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.12

3.2 测试

#查看外网客户端能否使用curl命令访问内网服务器的网站
[root@localhost ~]#curl 11.0.0.10

#查看内网客户端的日志
[root@localhost ~]#tailf /var/log/httpd/access_log 

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值