SNAT原理

本文深入解析SNAT(源地址转换)策略,阐述其在解决IPv4地址匮乏问题上的作用,详细说明SNAT的工作原理,包括如何通过修改源IP地址使局域网内的设备能够共享上网。同时,提供了在Linux环境下配置SNAT的具体步骤和实例。

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

在这里插入图片描述

SNAT即源网络地址转换(Source Network Address Translation),其典型应用是为局域网接口IP地址网共享上网提供接入策略,关键操作是将局域网外发数据包的源IP地址(局域网内的私用地址)修改为网关服务器的外网接口IP地址 [^2]。 SNAT原理是,在路由选择之后(POSTROUTING)对数据包进行处理,将局域网外发数据包的源IP地址修改为网关服务器的外网接口IP地址。在SNAT转换地址的过程中,网关服务器会根据之前建立的SNAT映射,将响应数据包正确返回局域网中的源主机。只要连接的第一个包被SNAT处理了,那么这个连接及对应数据流的其他包也会自动地被进行SNAT处理。同时,Internet中的服务器并不知道局域网PC的实际IP地址,中间的转换完全由网关主机完成,一定程度上起到了保护内部网络的作用 [^1][^2]。 SNAT的使用方法涉及使用`iptables`命令进行配置。用私网地址直接上网存在有去无回的问题,因为互联网上没有私网地址的路由,报文返回时没有路由。SNAT只是源地址替换,可能存在多台机器同时请求,是私有对公有、多对一的关系;但回来时是公对私、一对多,若端口不做映射,多台机器可能启动同一个端口。内部私有网络地址不要配置公有地址,因为会屏蔽外面真实的公有地址。以下是一些`iptables`配置SNAT的示例: - 对于专线情况: ```bash iptables -t nat -A POSTROUTING -s 192.168.37.0/24 -j SNAT --to-source 172.16.0.7 ``` - 对于拨号上网(公网地址会变动)情况: ```bash iptables -t nat -A POSTROUTING -s 192.168.37.0/24 -j MASQUERADE ``` 还可以使用`iptables`自定义链,示例如下: ```bash # 定义自定义链 iptables -N TOINTERNET # 允许特定网段的ICMP请求 iptables -I TOINTERNET -s 192.168.37.0/24 -p icmp --icmp-type 8 -j ACCEPT # 允许特定网段的TCP 80端口请求 iptables -I TOINTERNET -s 192.168.37.0/24 -p tcp --dport 80 -j ACCEPT # 将自定义链关联到系统的FORWARD链 iptables -I FORWARD -j TOINTERNET ``` 另外,可将`iptables`规则文件保存在`/etc/sysconfig/iptables`,`iptables`服务启动时会自动还原规则,命令如下: ```bash iptables-save > /etc/sysconfig/iptables ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值