SNAT-源地址转换、DNAT-目的地址转换
SNAT
典型应用场景
- snat实现共享上网,即通过SNAT实现局域网多台主机可以通过一个有效的公网ip地址访问外部网络
- 内网访问外网:当内部网络中的主机需要访问外部网络时,内部主机的私有IP地址需要被转换为公共IP地址,以便外部网络正确识别和响应。这种情况下,SNAT将内部主机的私有IP地址替换为路由器或防火墙的公共IP地址,使得外部网络能够正确响应数据包。例如带动局域网主机上网,公司有很多台电脑,都需要上网,这时就可以在防火墙中配置一个SNAT地址转换,某个网段进入防火墙后通过SNAT修改源地址信息,修改为防火墙的公网地址,由防火墙去互联网环境中请求数据,最后返回给公司电脑,带动局域网上网。
- 负载均衡:在负载均衡场景中,当负载均衡设备作为代理服务器转发请求时,为了避免外部服务器直接与内部服务器通信,通常会将源IP地址替换为负载均衡设备的IP地址。这样可以隐藏内部服务器的真实IP地址,提高安全性。
- 保护内部网络:有时候内部网络希望隐藏真实的IP地址,以保护内部网络的安全。通过SNAT,可以将内部主机的IP地址替换为一个公共IP地址,从而隐藏了内部网络的拓扑结构,增强了网络安全性。
- 访问控制:SNAT也可以用于实施访问控制策略,例如限制特定IP地址范围的主机访问外部网络,或者将特定IP地址范围的主机的流量路由到不同的网络出口。
SNAT实现以及具体使用
SNAT策略只能用在nat表的POSTROUTING链,使用iptables编写SNAT策略时,需要结合–to-source IP地址来指定修改后的源地址。
1.防火墙开启IP转换的功能
无论使用哪种类型的地址转换,防火墙主机一定要开启IP转换的功能。
临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward
永久开启
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
2.源地址转换:通过SNAT源地址转换实现共享上网
如上图所示,公司网段192.168.10.0想要通过防火墙公网地址上网,当数据包进入防火墙时修改源地址信息,公司电脑通过防火墙去上网,会经过的链路有PREROUTING、FORWARD、POSTROUTING,通过防火墙出去修改源地址,很明显需要在POSTROUTING链去添加规则。
[root@sunrj-1 ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.10.1
解释:将源地址为192.168.10.0/24的转换为防火墙的公网地址172.16.10.1。
3.伪装:不能保证固定公网地址如何使用SNAT源地址转换
在某些情况下,防火墙公网IP不是固定的,针对这种需求、iptables命令提供了一个名为MASQUERADE(伪装)的数据包控制类型,MASQUERADE相当于SNAT的一个特例,同样用来修改数据包源IP地址,只不过它能够自动获取外网接口的IP地址,而无须使用–to-source指定固定的IP地址。
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
DNAT
应用场景
所谓的DNAT目标地址转换指的是修改请求包中的目标地址,很多情况下只有一个公网地址,但是内网服务器有几百台,想要通过一个公网地址访问到内网的所有服务器,就需要用到DNAT目标地址转换的功能了,接收到用户发送的数据包后,修改
数据包中的目标地址,根据来源转发到具体的某台内网服务器中,如下图所示。
DNAT地址转换的应用场景:
- 端口映射。
- IP地址映射。
DNAT实现以及具体使用
1.防火墙主机一定要开启IP转换的功能。
临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward
永久开启
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
2.通过DNAT目标地址转换实现IP地址/端口映射
案例描述:
通过公司防火墙的公网地址,映射内网所有主机的22号端口,即使用一个公网地址根据不同的端口转发至不同主机的ssh服务上。
访问防火墙的888端口实际访问的是内网主机192.168.30.21。
访问防火墙的999端口实际访问的是内网主机192.168.30.22。
防火墙规则如下。
[root@ipsec-1 ~]# iptables -t nat -A PREROUTING -d 192.168.20.20 -p tcp --dport 888 -j DNAT --to-destination 192.168.30.21:22
[root@ipsec-1 ~]# iptables -t nat -A PREROUTING -d 192.168.20.20 -p tcp --dport 999 -j DNAT --to-destination 192.168.30.22:22
未完结 待完善