NAT
NAT的基本原理
NAT的定义
由来
解决IPv4短缺问题
现在
简化网络ip地址管理,提高完全性
定义
Network address translator
NAT的分类
传统的/单向出站的NAT
对应iptables 的SNAT
- 基本的NAT
- 网络地址/端口转换
双向NAT
对应 iptables DNAT,在公共地址与私有地址之间有一一映射关系。
常见的应用场景是把内网的服务器发不到外网。
- 发布一台内网服务器到外网
- IPv4 与 IPv6 地址空间之间的双向地址映射
两次NAT
- 执行双向的源和目的 地址转换,但源和目的 地址在两个方向上都被转换
SNAT 与 Masquerade 的工作机制
SNAT
一般用来解决内网用户上网的问题
- 客户机将一个数据包发给运行NAT的计算机,数据包修改前(src:192.168.1.5:[1024<随机<65535], dst:61.62.63.65:80)
- 运行NAT的计算机修改数据包的src ip为NAT的外网地址:125.100.2.1,然后发给web server(61.62.63.65:80)。由于只有一个外网ip,还需要把数据包的源端口,NAT把自己的随机端口替换源端口,用map记录映射。
- 外部的web server 收到包后返回一个应答消息给NAT服务器(dst:125.100.2.1:[NAT的随机端口] )
- 运行NAT的服务器收到包后,检查它的map信息以确定目标主机,然后修改包头信息为(dst:192.168.1.5:[原来客户机的端口])把包发给客户机。
Masquerade 是SNAT的特例
Masquerade从指定的网卡上自动获得当前ip地址来做SNAT
DNAT的工作机制
NAT的优缺点
SNAT与DNAT的应用
iptables
源NAT的语法结构
标准SANT
iptables [-t table] {-A|-C|-D} chain rule-specification
iptables -t nat -A POSTROUTING -o <out intface> -j SNAT --to-source <address> [port]
Masquerade 的源NAT
iptables -t nat -A POSTROUTING -o <out intface> -j MASQUERADE --to-port <port>
SNAT:局域网共享一个公网IP接入lnternel,好处如
1、保护内网用户安全,因为公网地址总有一些人恶意扫描,而内网地址在公网没有路由所以无法被扫描,能被扫描的只有防火墙这一台,这样就减少了被攻击的可能。
2、Ipv4地址匮乏,很多公司只有一个ipv4地址,但是却有几百个用户需要上网,这个时候就需要使用SNAT。
3、省钱,公网地址付费,使用SNAT只需要一个公网ip就可以满足几百人同时上网。
DNAT:向internel发布内网服务器
在内网中有服务器,如果想让公网用户访问有有两种方法。
配置双网卡,一网卡对内,一网卡对外;一般是高访问量的web服务器,为了避免占用网关的流量才这样做,使用不是很广泛。
内网web服务器,或是ftp服务器,为了用户在公网也可以访问,有不想买公网ip地址,采用DNAT方案。
SNAT
企业内部的主机A想访问互联网上的主机C,首先将请求数据包(源:ipA,目标:ipC)发送到防火墙所在主机B,B收到后将数据包源地址改为本机公网网卡的ip(源:ipA,目标:ipB),然后经互联网发送给C;C收到后将回应包(源:ipC,目标:ipB)转发给C的路由器,经互联网将回应包转发给B,B收到回应包后修改其目的地址,即回应包改为(源:ipC,目标:ipA)然后将数据包转发给A。
在这个过程中,修改了请求报文的源地址,叫做SNAT(source NAT POSTROUTING),用于局域网访问互联网。
不能在防火墙B的prerouting链上设置转换源地址的防火墙策略,因为若在B的prerouting链上设置转换源地址的防火墙策略,此时还未检查路由表,还不知道要到达数据包中目标主机需经过本机的哪个网卡接口,即还不知道需将源地址替换为哪个公网网卡的ip,需在postrouting设置转换源地址的防火墙策略。
实验环境:(本实验中用172.18.0.0/16网段模拟公网ip)
局域网主机A:192.168.25.106黄色提示符 白色字
防火墙B:eth0 192.168.25.107 eth1 172.18.0.107绿色提示符 白色字
互联网主机C:172.18.0.108紫色提示符 白色字
实验主机A B C
本实验中,A是局域网主机,将数据包转发至防火墙主机B,B实际上也充当了路由器的作用。
实际环境中,B与C之间会有多个路由器,本实验只是为了说明SNAT的工作原理,不再考虑这些因素。
nat表共有4个链:INPUT、OUTPUT、PREROUTING、POSTROUTING
查看路由表 iptables -vnL -t nat
添加 SNAT 规则
iptables -t nat -A POSTROUTING -s 172.16.200.0/24 -j SNAT --to-source 172.16.200.12
原文链接:https://blog.csdn.net/beanewself/article/details/78317626