RFC 1918 为私有网络预留出了三个IP 地址块,如下:
A 类:10.0.0.0~10.255.255.255
B 类:172.16.0.0~172.31.255.255
C 类:192.168.0.0~192.168.255.255
上述三个范围内的地址不会在因特网上被分配,局域网内部一般使用上述网段的私有地址,不要配公有地址,如果私有网络和公有网络分配了相同的ip地址,这种情况称为地址重叠,两个重叠的地址之间是不能通信的,因为他们互相认为对方的主机所在的为互联网。
在早期一些专用网络中,是不和互联网相连的,但是现在又想和互联网相连,我们知道互联网公有地址是有限的,如果每台主机都申请一个公网地址,不仅费用高昂,而且造成资源的浪费,这时我们就可以使用NAT方法,使用这种方法需在路由器安装nat软件,路由器要连接一个公网的ip地址,这样局域网内的主机与外界通信都要在NAT路由器上把地址转换成一个公网ip,因此能与因特网连接。
局域网的网关在转发报文时,将源IP地址(原本为Client的地址)转换为自己的IP地址,并修改Port以区分同一局域网的不同主机上的不同PC。Server在接收到报文时,根据源IP(Client网关的IP),可以确定Client所在的局域网,这种方式称为动态的SNAT。
如果因特殊要求需要外网访问内网,需要转换目的地址,Server在接收到经过SNAT的报文时,根据源IP定位到Client所在局域网网关,以所接收报文的源IP为目的地址,将回复报文发送给Client所在局域网网关。该网关接收到报文后,根据端口号发现报文是发给本局域网中的Client主机的,因此修改目的IP和目的Port, 把报文转发给局域网内Client,这种方式称为DNAT。
优点:
NAT不仅解决了公网IP 不足的问题还能隐藏IP,Server端看到的是局域网的公网IP,能有效避免网络攻击。
实现:
防火墙的iptables有四表五链和一些规则组成,四个表分别是table、filter、nat、raw
filter表:过滤表规则,根据定义的规则过滤符号条件的数据包
nat表:地址转换规则表
mangle 表:修改数据标记位的规则表
raw 表:关闭nat表上启用的链接跟踪机制,加速封包穿越防火墙速度
优先级顺序从高到低: raw-->mangle-->nat-->filter
五个内置链条:input 、output、forward、prerouting、postrouting
我们可以通过防火墙来实现NAT,前提是防火墙要开启路由转发功能vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
SNAT
DNAT
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]
例:iptables -t nat -A PREROUTING -d 172.17.250.200 -p tcp --dport 22 -j DNAT --to-destination 192.168.159.200