产生背景
IPv4公网地址资源耗尽
IPv6普及遥遥无期
子网划分杯水车薪
定义
网络地址转换
通过把私有地址转换为公有地址,使私有IP地址主机可以访问互联网,来解决公网地址不够用的问题
私有地址不能上公网的原因归根结底就是回不来包
NAT只要把回不来的问题解决了就行了
PC要访问Server
D:200.2.2.2
S:192.168.1.1
路由器上做一个配置
把公网地址100.1.1.1和私有地址192.168.1.1 进行绑定
100.1.1.1 <->192.168.1.1
只要收到一个数据包,源IP是192.168.1.1的话
我就把它改成绑定的100.1.1.1
D:200.2.2.2
S:100.1.1.1
回包的时候
D:100.1.1.1
S:200.2.2.2
现在包就可以回到路由器
路由器一看目的IP是找自己的,收到以后,检查NAT映射表
把目的IP 100.1.1.1 还原成 之前的192.168.1.1
NAT分类
静态NAT
把公有地址一对一的静态映射给某一条私有地址使用
动态NAT
建立公有地址池,把地址池中的共有地址动态映射给私有地址使用。
本质上也是一对一的映射
NAPT(用的最多)
把公有地址和端口动态映射给私有地址和端口,实现一个公有地址可以供多个私有地址同时使用互联网
转换源IP和源端口,数据回包还原目的IP和目的端口
SNAT(源地址转换)
原理
PC访问外部网站
D:200.2.2.2 :80
S: 192.168.1.1 :1500
路由器先检查数据包的源端口在公网上有没有被占用
然后在设备里进行记录
100.1.1.1 :1500 --> 192.168.1.1 :1500
然后发出的数据包就是
D:200.2.2.2:80
S:100.1.1.1:1500
WEB服务器收到后回包
D:100.1.1.1:1500
S:200.1.1.1:80
当这个包到了路由器以后
路由器一看 DL00.1.1.1:1500
S:200.1.1.1:80
正好满足记录表里的条件
所以把目的IP做还原。还原成之前的192.168.1.1:1500
当有多个设备都要访问外网的时候,就类似上面 1500 1501 依次端口累加
Easy IP
NAPT的一种简单实现形式
适用于公网地址不固定的场景
NAPT简易实现形式
如果说公网地址不固定,则使用Easy IP
公网地址固定,则使用NAPT
原理和NAPT一模一样
直接在接口上配置,不需要指定公网地址池,自动的读公网口的IP地址。
NAT Server
把公网IP的某个固定映射到私网IP的某个端口,让公网上的用户可以主动访问私网中的服务。
转换目的IP和目的端口,数据回包还原源IP和源端口
也称端口映射,DNAT(目的地址转换)
客户端和服务器
肯定是客户端首先请求服务器
外面的人主动进来访问内网的服务器
叫NAT Server
提前在路由器上配置好
100.1.1.1:80 > 192.168.1.3:80
把公网地址 100.1.1.1:80 端口 提前配置 映射私网地址 192.168.1.3: 80
此时 公网上有一台PC 200.3.3.3 想要访问内网Web服务
PC: 首先请求的是公网地址的100.1.1.1:80
D:100.1.1.1:80
S:200.3.3.3:1500
这个包可以直接到达路由器。
到了之后,与路由器的NAT策略进行匹配
发现目的地址可以匹配到
所以改为
D:192.168.1.3:80
S:200.3.3.3:1500
此时这个路由器就可以收到这个包
路由器回包
D:200.3.3.3:1500
S:192.168.1.13:80
这个包再到路由器的时候。路由器发现
源地址和之前提前配置的NAT策略一样。所以进行替换
D:200.3.3.3:1500
S:192.168.1.13:80 > 100.1.1.1:80
然后就可以回去PC
那么问题来了,即使出去不还原也可以到PC,那么为什么还要还原?
PC收到一看,包是这个包,但是我不认识192.168.1.1 我只认识 100.1.1.1 .所以不识别
配置命令
创建NAT公网地址池
[h3c]nat address-group “Group-number”
设置地址池的地址范围
[h3c-address-group1]address “start-ip” “end-ip”
在公网接口上配置NAPT
[h3c-GigabiEthernet0/0]nat outbound ‘acl-number’ address-group ‘group-number’
在公网接口上配置 Easy IP
[h3c-GigabitEthernet0/0]nat outbound ‘acl-number’
在公网接口上配置 Easy IP
[h3c-GigabitEthernet0/0]nat server protocol ‘tcp/udp/icmp’ global ‘global-address’ ‘global-port’ inside ‘inside-address’ ‘inside’