NAT网络地址转换

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的配置

实验拓扑

img

1
2
3
4
5
6
7
8
9
10
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地址池

  1. 网关有一个公网IP地址池可供内网私有IP地址使用
  2. 公网IP地址池先到先得,后到的没有地址的就无法通信

配置示例

1
2
3
4
5
6
7
8
9
10
11
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中的地址

检查配置结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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)

  1. 大多时候,一个公网IP需要供多个内网地址上网,所以需要用到PAT
  2. 一个IP地址有65536个端口号,去掉保留的端口号,还有数万个端口,而一次网络通信只需要一个端口号,并不需要独占整个IP。
  3. 通信的时候,只需要有一个IP:端口号的组合,就可以接受对方的回复,所以PAT是将不同的内网访问请求映射到同一个IP地址的不同端口号上
  4. 除了PAT其他的NAT形式都支持外网主动访问内网,PAT内网访问外网会在NAT表中产生随机端口映射,而外网访问内网却不会产生任何的映射,也访问不了。
  5. NAT表会短暂的记录私有IP:端口号与公有IP:端口号的映射关系,当外网有回复的时候,可以准确的将公有IP:端口号转为私有IP:端口号

配置示例

clear ip nat translation *
# 在清理上面实验环境的时候,遇到地址池无法删除,可以先输入上面的命令来清理nat表
1
2
3
4
5
6
7
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地址分配给多个内网主机使用

检查配置结果

1
2
3
4
5
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负载均衡

  1. 转换目的IP地址的行为,也被称为DNAT。上面配的都是SNAT。
  2. 用于公司内部多台服务器提供相同服务,当流量访问网关公网IP时,网关会将目的IP地址动态的换成内网的私有IP。

实验拓扑

img

建议配置步骤

  1. 先将运营商(R3)配置完毕
  2. 再把用户网关(R2)和用户(R1)配置完毕
  3. 把企业网关(R6)的PAT配置完毕,将企业的服务器(R4&R5)可以访问R3,并且开启vty
  4. 配置企业网关(R6),让用户(R1)可以轮询的访问企业服务器(R4&R5)
  5. 将运营商(R3)配置为DNS服务器,给用户提供域名解析服务

以下配置不按顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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

检验结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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]

端口映射

  1. 将网关IP地址的某个端口对应内网私有IP的某个端口静态映射
  2. 一个IP地址可以有多个内网地址共享,外网访问的时候通过端口号区分不同的服务
1
2
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

验证结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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]
评论
加载中,最新评论有1分钟缓存...