SNAT 策略及应用
• SNAT(Source Network Address Translation,源地址转换)是Linux防火墙的一种地址转换操作,也是iptables命令中的一种数据包控制类型,其作用是根据指定条件修改数据包的源IP地址

SNAT 策略概述
随着internet网络的快速发展,IPv4可支持的可用IP地址资源逐渐匮乏,大部分企业面临着局域网内的主机接入internet的需求,从而通过SNAT策略来解决局域网共享上网的问题,可得以缓解。而解决IPv4地址匮乏的是 (IPv6)

工作原理
• 当只开启路由转发,未设置地址转换的情况
从局域网内的PC访问Ineternet的数据包经过网关转发后其源IP地址保持不变,但是当Internet中的主机收到这样的请求数据包是,响应数据包则无法正确返回,从而导致访问失败(私有地址不能再Internet中正常路由)

• 当开启路由转发,并设置SNAT转换的情况
从局域网内的PC访问Ineternet的数据包经过网关时,会先进行路由选择,若发现该数据包需要从外网接口向外转发,则将其源IP地址修改为网关的外网接口地址,然后才发送给目标主机(相当于从网关服务器的公网IP地址提交数据访问请求,目标主机也可以正确返回响应数据包)

SNAT策略的应用
SNAT的典型应用是为局域接口IP地址网共享上网提供接入策略,处理数据包的切入时机是在路由选择之后(POSTROUTING)进行,其关键操作是将局域网外发数据包的源IP地址(局域网内的私用地址)修改为网关服务器的外网接口IP地址

SNAT策略只能用在nat表的POSTROUTING链,使用iptables命令编写SNAT策略时,需要结合 “–to-source IP 地址” 选项来指定修改后的源IP地址

共享固定IP地址上网实例

实例环境:

• linux网关通过两块网卡ens33,ens37分别连接Internet和局域网,其中ens33的IP地址为192.168.100.134(虚拟机,假设是公网),ens37的IP地址192.168.99.254
• 所有局域网PC的默认网关为192.168.99.254
• 要求192.168.99.0/24的网段的PC能够正常访问Internet

打开网关的路由转发
IP转发是实现路由功能的关键所在,对应文件为/proc文件系统中的ip_forward设置,当值为1时表示启动,为0表示关闭。
若要使用linux主机作为网关设备,必须开启路由转发。
以下设置永久打开路由转发功能,修改sysctl.conf配置文件

也可以临时开启路由转发,如下
echo 1 > /proc/sys/net/ipv4/ip_forward
或者
sysctl -w net.ipv4.ip_forward=1

正确设置SNAT策略
将源地址更改为网关的公网IP地址

可以同过iptables -t nat -L POSTROUTING 来查看

验证结果

共享动态IP地址上网
在某些情况下,网关的外网IP地址可能并不是固定的,如果使用ADSL宽带接入时。应对这种情况,iptables命令提供了一个名为MASQUERADE(伪装)的数据包控制类型
同样用来修改(伪装)的数据包控制类型,能过自动获取外网接口的IP地址
若要使用MASQUERADE伪装策略,只需去掉SNAT策略中的“–to-source IP 地址”,改用“-j MASQUERADE”指定数据包控制类型 ---------接口名称通常为ppp0,ppp1等

iptables -T NAT -A POSTROUTING -s 192.168.99.0/24 -o ppp0 -j MASQUERADE

如果网关使用固定的公网IP地址,最好选择SNAT策略而不是MASQUERADE策略,以减少不必要的系统开销
思科模拟器模拟SNAT
8第–步:筛选出感兴趣的流量
9 Router(config)#ip access-list standard 1
10 Router(config-std-nac1)#permit any
11第二步:定义地址池
12 Router(config)#ip nat pool mypo 222.210.1.10 222.210.1.10 netmask 255.255.255.0
13第三步:
14定义SNAT的方向
15 Router(confi g)#i nterface f0/0
16 Router(config-if)#ip nat inside
17 Router(config-if)#exit
18 Router(confi g)#interface f0/1
19 Router(config-if)#ip nat outside
20第四步:
21应用策略到接口
22 Router(config)#ip nat inside source list 1 poo1 mypo

在这里插入图片描述

Logo

更多推荐