SNAT与DNAT的应用及iptables中MASQUERADE的含义

目录

一、SNAT概述

1.SNAT应用环境——局域网共享上网

2.SNAT工作原理

2.1未作SNAT转换时

2.2进行SNAT转换后

二、配置SNAT策略

1.开启IP路由转发

2.SNAT转换

3.模拟实验

3.1服务端

3.2网关服务器

3.3网关服务器设置iptables规则

3.4客户端

3.5实验结果

三、DNAT概述

1.DNAT工作原理

四、配置DNAT策略

1.DNAT转换

2.模拟实验

2.1服务端

2.2客户端

2.3网关服务器

2.4配置DNAT策略

2.5实验结果

MASQUERADE的含义


一、SNAT概述

SNAT原理:修改数据包的源地址

1.SNAT应用环境——局域网共享上网

将局域网中的IP地址映射到 dns 网关服务器上,将私网IP地址转换成公网IP地址,从而访问位于公网的服务器。

2.SNAT工作原理

        2.1未作SNAT转换时

源主机发送数据包给目的主机,目的主机可以收到数据包,但目的主机发送回包时,数据包无法发送给源主机。如下图所示

        2.2进行SNAT转换后

  1. 将从内网发到外网的数据包的源IP由私网IP转换成公网IP
  2. 将从外网服务器响应返回到内网的数据包的目的IP由公网IP转换成私网IP

二、配置SNAT策略

前置条件:

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

  • Linux网关开启IP路由转发

1.开启IP路由转发

分为两种情况,临时和永久。

临时打开
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                #读取修改后的配置

2.SNAT转换

转换为固定的公网IP地址:
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens33 -j SNAT 
--to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens33 -j SNAT 
--to-source 12.0.0.1-12.0.0.10
 
转换为非固定的公网IP地址(共享动态IP地址):
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens33 -j MASQUERADE

3.模拟实验

        3.1服务端

假设服务器位于公网,IP地址为12.0.0.100/24。
要求开启http服务。

vim /etc/sysconfig/network-scripts/ifcfg-ens33
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=12.0.0.100
NETMASK=255.255.255.0
GATEWAY=12.0.0.50
 
systemctl restart network
 
yum -y install httpd  #下载相关软件

#进入http服务的网页目录
cd /var/www/html                          

#在其中写入一个文件方便后续模拟
echo 'hello world!' > test.html


#开启服务
systemctl start httpd
 

        3.2网关服务器

首先,在虚拟机中设置两张网卡,进行SNAT转换。ens33作为私网IP地址,ens35作为公网IP地址。(其他设备不一定是ens35,按照自己设备查到的名称为准)


vim /etc/sysconfig/network-scripts/ifcfg-ens35

//配置
NAME=ens35
DEVICE=ens35
ONBOOT=yes
IPADDR=12.0.0.50
NETMASK=255.255.255.0
 

vim /etc/sysconfig/network-scripts/ifcfg-ens33

NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.40
NETMASK=255.255.255.0
 
//设置完成后重启网卡
systemctl restart network

        3.3网关服务器设置iptables规则

#安装iptables服务
yum -y install iptables*
#删除iptables规则及nat表中规则
iptables -F && iptables -F -t nat
#查看iptables规则
iptables -nL
 
vim /etc/sysctl.conf        //上面提到的进入文件永久开启IP路由转发
net.ipv4.ip_forward=1    
 
sysctl -p   
 
#允许192.168.88.0网段进入网关服务器转发
iptables -t filter -A FORWARD -s 192.168.88.0/24 -j ACCEPT
#指定出站网卡ens35,将192.168.88.0网段IP地址转换为12.0.0.50
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens35 -j SNAT 
--to 12.0.0.50
 
#完成后使用命令进行查看
iptables -nL -t nat 

3.4客户端

#具体设置如下

vim /etc/sysconfig/network-scripts/ifcfg-ens33
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.20
NETMASK=255.255.255.0
GATEWAY=192.168.88.40
 
#重启网卡
systemctl restart network

3.5实验结果

服务器位于公网,IP地址为12.0.0.100/24。打开客户端浏览器登陆该服务器

三、DNAT概述

DNAT原理:修改数据包的目的地址

1.DNAT工作原理

  • 将外网发来的数据包的目的地址由公网IP或端口转换成私网IP或端口;网关服务器将私网IP转发给内网服务器

  • 将内网服务器发来的应答响应数据包的源地址由私网IP或端口转换成公网IP或端口

四、配置DNAT策略

前提条件:

  • 局域网的服务器能够访问Internet
  • 网关的外网地址有正确的DNS解析记录
  • Linux网关开启IP路由转发

1.DNAT转换

发布内网的web服务,例如:

把从ens35进来的要访问web服务的数据包目的地址转换为 192.168.88.40
iptables -t nat -A PREROUTING -i ens35 -d 12.0.0.50 -p tcp --dport 80 
-j DNAT --to 192.168.88.40
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.50 -p tcp --dport 80 
-j DNAT --to-destination 192.168.88.40
 
发布时修改目标端口
发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行连接
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 
-j DNAT --to 192.168.80.10:22
 

注意:使用DNAT时,同时还有配合SNAT使用,才能实现响应数据包的正确返回

2.模拟实验

2.1服务端

vim /etc/sysconfig/network-scripts/ifcfg-ens33 
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.30
NETMASK=255.255.255.0
GATEWAY=192.168.88.2
 
systemctl restart network
 
yum -y install httpd
#进入http服务的网页目录
cd /var/www/html
#在其中写入一个文件
echo 'hello world!' > test.html
#开启服务
systemctl start httpd

2.2客户端

vim /etc/sysconfig/network-scripts/ifcfg-ens33

NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=12.0.0.200
NETMASK=255.255.255.0
GATEWAY=12.0.0.2
 
systemctl restart network    //重启网卡配置才生效,别忘

2.3网关服务器

vim /etc/sysconfig/network-scripts/ifcfg-ens35

NAME=ens35
DEVICE=ens35
ONBOOT=yes
IPADDR=12.0.0.2
NETMASK=255.255.255.0
 
vim /etc/sysconfig/network-scripts/ifcfg-ens33

NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.2
NETMASK=255.255.255.0
 
systemctl restart network

2.4配置DNAT策略

#外网主机访问发送数据包允许通过
iptables -t nat -A PREROUTING -i ens35 -d 12.0.0.2 -p tcp --dport 8080 
-j DNAT --to 192.168.88.30:80
 
#服务器的回包发送给访问主机
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens35 -j SNAT 
--to 12.0.0.2

2.5实验结果

客户端访问服务器成功

MASQUERADE的含义

MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。

在iptables中有着和SNAT相近的效果,但也有一些区别。

SNAT的使用方法,即可以NAT成一个地址,也可以NAT成多个地址,但是,对于SNAT,不管是几个地址,必须明确的指定要SNAT的ip,举例如下:

1、如下命令表示把所有20.5.0.0网段的数据包snat成192.168.111.3的ip然后发出去:

iptables -t nat -A POSTROUTING -s 20.5.0.0/255.255.255.0 -o eth0 -j snat --to-source 192.168.111.3

2、如下命令表示把所有20.5.0.0网段的数据包snat成192.168.111.3/192.168.111.4/192.168.111.5等几个ip然后发出去

iptables -t nat -A POSTROUTING -s 20.5.0.0/255.255.255.0 -o eth0 -j snat --to-source 192.168.111.3-192.168.111.5

 但是,假如当前系统用的是动态拨号方式,这个时候如果按照现在的方式来配置iptables就会出现问题了,因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的,每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip,这样是非常麻烦的。MASQUERADE主要解决的就是这种问题,因为它可以自动获取当前ip地址来做NAT。
以上方为例:

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

 这样的话不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做snat出去,实现了动态snat地址转换。

  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值