随着Internet的发展和网络应用的增多,有限的IPv4公有地址已经成为制约网络发展的瓶颈。为解决这个问题,NAT(NetworkAddressTranslation,网络地址转换)技术应需而生。
NAT技术主要用于实现内部网络的主机访问外部网络。一方面NAT缓解了IPv4地址短缺的问题,另一方面NAT技术让外网无法直接与使用私有地址的内网进行通信,提升了内网的安全性。
随着互联网用户的增多,IPv4的公有地址资源显得越发短缺。
同时IPv4公有地址资源存在地址分配不均的问题,这导致部分地区的IPv4可用公有地址严重不足。
为解决该问题,使用过渡技术解决IPv4公有地址短缺就显得尤为必要。
公有地址:由专门的机构管理、分配,可以在Internet上直接通信的IP地址。
私有地址:组织和个人可以任意使用,无法在Internet上直接通信,只能在内网使用的IP地址。
A、B、C类地址中各预留了一些地址专门作为私有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
NAT:对IP数据报文中的IP地址进行转换,是一种在现网中被广泛部署的技术,一般部署在网络出口设备,例如路由器或防火墙上。
NAT的典型应用场景:在私有网络内部(园区、家庭)使用私有地址,出口设备部署NAT,对于“从内到外”的流量,网络设备通过NAT将数据包的源地址进行转换(转换成特定的公有地址),而对于“从外到内的”流量,则对数据包的目的地址进行转换。
通过私有地址的使用结合NAT技术,可以有效节约公网IPv4地址。
静态NAT:每个私有地址都有一个与之对应并且固定的公有地址,即私有地址和公有地址之间的关系是一对一映射。
支持双向互访:私有地址访问Internet经过出口设备NAT转换时,会被转换成对应的公有地址。同时,外部网络访问内部网络时,其报文中携带的公有地址(目的地址)也会被NAT设备转换成对应的私有地址。
在接口视图下配置静态NAT
[Huawei-GigabitEthernet0/0/0] nat static global 公网地址 inside 私网地址
在系统视图下配置静态NAT
[Huawei] nat static global 公网地址 inside 私网地址
在接口下开启静态NAT功能
[Huawei-GigabitEthernet0/0/0] nat static enable
查看静态NAT
display nat static
在路由器AR1上配置
[AR1]nat static global 200.100.1.5 inside 192.168.1.2 \\将内部地址192.168.1.2转换为外部地址200.100.1.5
[AR1]nat static global 200.100.1.6 inside 192.168.1.3 \\将内部地址192.168.1.3转换为外部地址200.100.1.6
[AR1-GigabitEthernet0/0/1]nat static enable \\在g0/0/1下开启静态nat
测试连通性
测试成功
动态NAT:静态NAT严格地一对一进行地址映射,这就导致即便内网主机长时间离线或者不发送数据时,与之对应的公有地址也处于使用状态。为了避免地址浪费,动态NAT提出了地址池的概念:所有可用的公有地址组成地址池。
当内部主机访问外部网络时临时分配一个地址池中未使用的地址,并将该地址标记为“In Use”。当该主机不再访问外部网络时回收分配的地址,重新标记为“Not Use”。
创建地址池
[Huawei] nat address-group 地址池编号 起始地址 结束地址
配置地址转换的ACL规则
[Huawei] acl 规则编号
[Huawei-acl-basic-规则编号 ] rule permit source 源地址 通配符
接口视图下配置带地址池的NAT Outbound
[Huawei-GigabitEthernet0/0/0] nat outbound 规则编号 address-group 地址池编号 [no-pat]
注:no-pat指不进行端口转换
在路由器AR1上配置
[AR1]nat address-group 1 200.100.1.5 200.100.1.10 \\创建NAT地址池1,范围从200.100.1.5到200.100.1.10
[AR1]acl 2000 \\创建基本ACL 2000
[AR1-acl-basic-2000]rule 5 permit source 192.168.1.0 0.0.0.255 \\添加规则:允许192.168.1.0/24网段通行
[AR1-GigabitEthernet0/0/1]nat outbound 2000 address-group 1 no-pat \\在g0/0/1接口出方向上应用ACL 2000 和NAT地址池1,不进行端口转换
测试连通性
连通性没有问题
再查看抓包
可以看出主机1使用了200.100.1.5-200.100.1.9这5个地址,而主机2使用了200.100.1.5-200.100.1.9这5个地址
测试成功。
动态NAT选择地址池中的地址进行地址转换时不会转换端口号,即No-PAT(No-PortAddressTranslation,非端口地址转换),公有地址与私有地址还是1:1的映射关系,无法提高公有地址利用率。
NAPT(Network Address and Port Translation,网络地址端口转换):从地址池中选择地址进行地址转换时不仅转换IP地址,同时也会对端口号进行转换,从而实现公有地址与私有地址的1:n映射,可以有效提高公有地址利用率。
接口视图下配置带地址池的NAT Outbound
[Huawei-GigabitEthernet0/0/0] nat outbound 规则编号 address-group 地址池编号
首先在上面的实验基础上进行修改AR1的配置,去掉no-pat
[AR1-GigabitEthernet0/0/1]undo nat outbound 2000 address-group 1 no-pat
[AR1-GigabitEthernet0/0/1]nat outbound 2000 address-group 1 \\在g0/0/1接口出方向上应用ACL 2000 和NAT地址池1
再进行测试
观察发现,和动态NAT不同的是,配置NAPT后,ping测试时只会使用一个地址,节省了地址数量。
在路由器AR1上配置
[AR1-GigabitEthernet0/0/1]undo nat outbound 2000 address-group 1 \\在g0/0/1下禁用原来的NAPT应用
[AR1]undo nat address-group 1 \\删除地址池1
[AR1]nat address-group 1 200.100.1.5 200.100.1.5 \\配置地址池1,添加200.100.1.5这1个地址
[AR1-GigabitEthernet0/0/1]nat outbound 2000 address-group 1 \\在g0/0/1接口下应用NAPT
在路由器AR2上配置
[AR2]user-interface vty 0 4 \\进入用户接口视图
[AR2-ui-vty0-4]authentication-mode password \\验证方式为密码
Please configure the login password (maximum length 16):12345
[AR2-ui-vty0-4]protocol inbound telnet \\启用telnet登录
[AR2-ui-vty0-4]user privilege level 15 \\修改权限等级为15
在路由器AR3上配置
[AR3]ip route-static 0.0.0.0 0 192.168.1.1 \\配置一条默认路由
抓取AR1和AR2的g0/0/0口,并且在AR3上 telnet AR2进行测试
观察发现,内网地址192.168.1.4转换为了200.100.1.5,然后telnet源端口49918转换为808
测试成功。
EasyIP:实现原理和NAPT相同,同时转换IP地址、传输层端口,区别在于EasyIP没有地址池的概念,使用接口地址作为NAT转换的公有地址。
EasyIP适用于不具备固定公网IP地址的场景:如通过DHCP、PPPoE拨号获取地址的私有网络出口,可以直接使用获取到的动态地址进行转换。
在路由器AR1上配置
[AR1]dhcp enable \\开启DHCP功能
[AR1-GigabitEthernet0/0/1]undo ip address \\删除原有IP地址
[AR1-GigabitEthernet0/0/1]ip address dhcp-alloc \\开启DHCP客户端
[AR1-GigabitEthernet0/0/1]undo nat outbound 2000 address-group 1 \\删除原有NAPT配置
[AR1-GigabitEthernet0/0/1]nat outbound 2000 \\配置Easy ip
在路由器AR2上配置
[AR2]dhcp enable \\开启DHCP功能
[AR2-GigabitEthernet0/0/0]dhcp select interface \\在接口g0/0/0上应用DHCP功能
使用PC1进行ping测试
测试可以ping通,再查看抓包
可以看出获取到的地址是200.100.1.254,测试成功
NATServer:指定[公有地址:端口]与[私有地址:端口]的一对一映射关系,将内网服务器映射到公网,当私有网络中的服务器需要对公网提供服务时使用。
外网主机主动访问[公有地址:端口]实现对内网服务器的访问。
在路由器AR1上配置
//配置telnet服务器
[AR1]user-interface vty 0 4
[AR1-ui-vty0-4]authentication-mode password
Please configure the login password (maximum length 16):12345
[AR1-ui-vty0-4]protocol inbound telnet
[AR1-ui-vty0-4]user privilege level 15
//配置Easy IP
[AR1]acl 2000
[AR1-acl-basic-2000]rule 5 permit source 192.168.1.0 0.0.0.255
[AR1-GigabitEthernet0/0/1]nat outbound 2000
//配置端口IP映射-NAT Server,将外部的IP地址和自定义端口8023映射到内部192.168.1.2的telnet服务(23号端口)
[AR1-GigabitEthernet0/0/1]nat server protocol tcp global current-interface 8023 inside 10.1.99.99 telnet
在路由器AR2上配置
//配置telnet服务器
[AR2]user-interface vty 0 4
[AR2-ui-vty0-4]authentication-mode password
Please configure the login password (maximum length 16):12345
[AR2-ui-vty0-4]protocol inbound telnet
[AR2-ui-vty0-4]user privilege level 15
在路由器AR3上配置
//配置telnet服务器
[AR3]user-interface vty 0 4
[AR3-ui-vty0-4]authentication-mode password
Please configure the login password (maximum length 16):12345
[AR3-ui-vty0-4]protocol inbound telnet
[AR3-ui-vty0-4]user privilege level 15
//配置一条默认路由
[AR3]ip route-static 0.0.0.0 0 192.168.1.1
测试
1 AR1 telnet AR2和AR3
测试成功
2 AR2 telnet AR1
测试成功
3 AR3 telnet AR1和AR2
测试成功
4 AR2 telnet AR3
telnet成功,现在我们观察抓包情况
在AR2的G0/0/0上
目标地址是200.100.1.1,而端口是我们自定义的8023
在AR3的G0/0/0上
映射为,目标地址是192.168.1.2,而端口是telnet的标准端口23。
测试成功。