前言
为了我们的安全策略,也是为了扩展让多个内网ip可以公用一个公网ip来进行上网。nat技术已经是一门非常成熟,且无法忽视的技术了
NAT(Network AddressTrnslation网络地址转换)
首先说说局域网内封包的传送,
1. 先经过 NAT table 的 PREROUTING 链;
2. 经路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;
3. 再经过 Filter table 的 FORWARD 链;
4. 通过 NAT table 的 POSTROUTING 链,最后传送出去。
SNAT:即源地址转换
能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题,路由器也就使用此技术,使用 POSTROUTING ?
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens33 -j SNAT --to-source 218.29.30.31
局域网各主机已正确设置IP地址、子网掩码、默认网关地址2.Linux网关开启IP路由转发
linxu系统本身是没有转发功能只有路由发送数据临时打开:
echo 1 > /proclsys/net/ipv4/ip_forrd
sysctl -w net.ipv4.ip_forward=1
永久打开:
vim letcl sysct1.conf
net.ipv4.ip_forward = 1#将此行写入配置文件
sysctl -p #将取修改后的配置
注:还有一种方式静态路由,这个就比较麻烦
SNAT转换
1:固定的公网IP地址:
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to 10.0.0.1或
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to-source 10.0.0.1-10.0.0.10
内网IP出站外网网卡
外网IP或地址池
SNAT转换2:
非固定的公网IP地址(共享动态IP地址):
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
小知识扩展:
一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网。
DNAT:目地地址转换
则能够让外网用户访问局域网内不同的服务器。使用 PREROUTING
DNAT转换前提条件:
1.局域网的服务器能够访问Internet
2.网关的外网地址有正确的DNS解析记录
3. Linux网关开启IP路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1sysctl -p
DNAT转换1:
发布内网的web服务
#把从ens33进来的要访问web服务的数据包目的地址转换为192.168.100.100.
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to
0192.168.100.13
或
iptables -t nat -A PREROUTNG -i ens37 -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.13
入站
外网IP
内网服务器IP
回包
iptables -t nat -A POSTROUTING -s 192.168.100.13 -o ens37 -j SNAT --to 10.0.0.1
可以现场做个域名解析·
总结
SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;反之,当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT
|