NAT简介
- 私有IP地址的定义极大程度的缓解了IPv4地址紧缺的问题。
- 私有IP地址可以在本地局域网、私有网络内部随意使用,但是这些地址在公网上是不可被路由的,因此私有IP地址无法直接访问公网。
- NAT网络地址转换技术能够将数据包中的IP地址进行转换。
私有IP地址范围
A. 10.0.0.0 ~ 10.255.255.255 /8
B. 172.16.0.0 ~ 172.16.31.255 /12
C. 192.168.0.0 ~ 192.168.255.255 /16
NAT名词
术语 | 解释 |
---|---|
内部本地 | 源IP地址在转换前 |
外部本地 | 目的IP地址在转换前 |
内部全局 | 源IP地址在转换后 |
外部全局 | 目的IP地址在转换后 |
内部 = 源IP
外部 = 目的IP
本地 = 转换前
全局 = 转换后
静态NAT
- 内部局域网一般都是私有IP地址,但是网关可以有公网的IP地址
- 内部的路由器要访问外部网络,网关做了NAT后,会将源IP(私有IP地址)转换为公网IP地址,并且本地产生NAT表记录。
- 当外部数据回流时,网关会根据NAT表记录,将目的IP地址替换为私有IP地址,实现对内对外的地址转换。
静态NAT的配置
实验拓扑
interface Ethernet0/0
ip nat inside # 将接口配置为地址转换的内部接口
interface Ethernet0/1
ip nat outside # 将接口配置为地址转换的外部接口
ip nat inside source static 192.168.12.1 23.23.23.1
# 如果内部接口源IP地址是192.168.12.1就转换为23.23.23.1出去
# 如果外部接口收到目的地是去往23.23.23.1,就转为192.168.12.1发往内部接口
R2#show ip nat translations # 查看nat的映射表
Pro Inside global Inside local Outside local Outside global
--- 23.23.23.1 192.168.12.1 --- ---
动态NAT地址池
- 网关有一个公网IP地址池可供内网私有IP地址使用
- 公网IP地址池先到先得,后到的没有地址的就无法通信
配置示例
interface Ethernet0/0
ip nat inside
interface Ethernet0/1
ip nat outside
# inside和outside必须要定义,并且别写错了
ip nat pool nat_pool 23.23.23.100 23.23.23.103 prefix-length 24
# 设置一个地址池名字叫nat_pool,池里面放着公网IP范围
access-list 1 permit 192.168.12.0 0.0.0.255
# 配置一个ACL用来匹配流量中的源IP地址
ip nat inside source list 1 pool nat_pool
# 当流量的源IP地址符合ACL 1,就将其替换为pool nat_pool中的地址
检查配置结果
interface Ethernet0/0
ip address 192.168.12.100 255.255.255.0 secondary
ip address 192.168.12.101 255.255.255.0 secondary
ip address 192.168.12.102 255.255.255.0 secondary
ip address 192.168.12.103 255.255.255.0 secondary
ip address 192.168.12.104 255.255.255.0 secondary
ip address 192.168.12.1 255.255.255.0
# 可以在R1接口上配置多个第二地址来模拟多台设备
R1(config-if)#do ping 23.23.23.3 so 192.168.12.100
.!!!!
R1(config-if)#do ping 23.23.23.3 so 192.168.12.101
.!!!!
R1(config-if)#do ping 23.23.23.3 so 192.168.12.102
.!!!!
R1(config-if)#do ping 23.23.23.3 so 192.168.12.103
.U.U.
# 地址池取完了以后,就没办法上网了
R2#sh ip nat tr
Pro Inside global Inside local Outside local Outside global
--- 23.23.23.100 192.168.12.1 --- ---
--- 23.23.23.101 192.168.12.100 --- ---
--- 23.23.23.102 192.168.12.101 --- ---
--- 23.23.23.103 192.168.12.102 --- ---
端口地址转换(PAT)
- 大多时候,一个公网IP需要供多个内网地址上网,所以需要用到PAT
- 一个IP地址有65536个端口号,去掉保留的端口号,还有数万个端口,而一次网络通信只需要一个端口号,并不需要独占整个IP。
- 通信的时候,只需要有一个IP:端口号的组合,就可以接受对方的回复,所以PAT是将不同的内网访问请求映射到同一个IP地址的不同端口号上
- 除了PAT其他的NAT形式都支持外网主动访问内网,PAT内网访问外网会在NAT表中产生随机端口映射,而外网访问内网却不会产生任何的映射,也访问不了。
- NAT表会短暂的记录私有IP:端口号与公有IP:端口号的映射关系,当外网有回复的时候,可以准确的将公有IP:端口号转为私有IP:端口号
配置示例
clear ip nat translation *
# 在清理上面实验环境的时候,遇到地址池无法删除,可以先输入上面的命令来清理nat表
interface Ethernet0/0
ip nat inside
interface Ethernet0/1
ip nat outside
access-list 1 permit 192.168.12.0 0.0.0.255
ip nat inside source list 1 interface Ethernet0/1 overload
# 加上overload参数,可以将一个IP地址分配给多个内网主机使用
检查配置结果
R2#sh ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 23.23.23.2:47793 192.168.12.3:47793 23.23.23.3:23 23.23.23.3:23
tcp 23.23.23.2:30927 192.168.12.4:30927 23.23.23.3:23 23.23.23.3:23
tcp 23.23.23.2:30058 192.168.12.5:30058 23.23.23.3:23 23.23.23.3:23
TCP负载均衡
- 转换目的IP地址的行为,也被称为DNAT。上面配的都是SNAT。
- 用于公司内部多台服务器提供相同服务,当流量访问网关公网IP时,网关会将目的IP地址动态的换成内网的私有IP。
实验拓扑
建议配置步骤
- 先将运营商(R3)配置完毕
- 再把用户网关(R2)和用户(R1)配置完毕
- 把企业网关(R6)的PAT配置完毕,将企业的服务器(R4&R5)可以访问R3,并且开启vty
- 配置企业网关(R6),让用户(R1)可以轮询的访问企业服务器(R4&R5)
- 将运营商(R3)配置为DNS服务器,给用户提供域名解析服务
以下配置不按顺序
R1
ip domain lookup
ip name-server 23.23.23.3
interface Ethernet0/0
ip address 192.168.12.1 255.255.255.0
ip route 0.0.0.0 0.0.0.0 192.168.12.2
=======================================
R2
interface Ethernet0/0
ip address 192.168.12.2 255.255.255.0
ip nat inside
interface Ethernet0/1
ip address 23.23.23.2 255.255.255.0
ip nat outside
ip nat inside source list 1 interface Ethernet0/1 overload
ip route 0.0.0.0 0.0.0.0 Ethernet0/1
access-list 1 permit 192.168.12.0 0.0.0.255
=======================================
R3
ip dns server
ip host baidu.com 36.36.36.6
interface Ethernet0/0
ip address 23.23.23.3 255.255.255.0
interface Ethernet0/1
ip address 36.36.36.3 255.255.255.0
=======================================
R4
interface Ethernet0/0
ip address 192.168.1.4 255.255.255.0
ip route 0.0.0.0 0.0.0.0 192.168.1.6
line vty 0 4
password cisco
login
transport input telnet
=======================================
R5
interface Ethernet0/0
ip address 192.168.1.5 255.255.255.0
ip route 0.0.0.0 0.0.0.0 192.168.1.6
line vty 0 4
password cisco
login
transport input telnet
=======================================
R6
interface Ethernet0/0
ip address 36.36.36.6 255.255.255.0
ip nat outside
interface Ethernet0/1
ip address 192.168.1.6 255.255.255.0
ip nat inside
ip nat pool inside_pool 192.168.1.4 192.168.1.5 prefix-length 24 type rotary
ip nat inside source list 1 interface Ethernet0/0 overload
ip nat inside destination list 2 pool inside_pool
ip route 0.0.0.0 0.0.0.0 Ethernet0/0
access-list 1 permit 192.168.1.0 0.0.0.255
access-list 2 permit 36.36.36.6
检验结果
R1#telnet baidu.com
Translating "baidu.com"...domain server (23.23.23.3) [OK]
Trying baidu.com (36.36.36.6)... Open
User Access Verification
Password:
R5>q
[Connection to baidu.com closed by foreign host]
R1#telnet baidu.com
Trying baidu.com (36.36.36.6)... Open
User Access Verification
Password:
R4>q
[Connection to baidu.com closed by foreign host]
端口映射
- 将网关IP地址的某个端口对应内网私有IP的某个端口静态映射
- 一个IP地址可以有多个内网地址共享,外网访问的时候通过端口号区分不同的服务
ip nat inside source static tcp 192.168.1.4 23 interface Ethernet0/0 40023
ip nat inside source static tcp 192.168.1.5 23 interface Ethernet0/0 50023
验证结果
R1#telnet 36.36.36.6 40023
Trying 36.36.36.6, 40023 ... Open
User Access Verification
Password:
R4>q
[Connection to 36.36.36.6 closed by foreign host]
R1#telnet 36.36.36.6 50023
Trying 36.36.36.6, 50023 ... Open
User Access Verification
Password:
R5>q
[Connection to 36.36.36.6 closed by foreign host]