This commit is contained in:
2025-08-27 14:11:40 +08:00
parent ac04d1bdb4
commit 721fb07e34
1310 changed files with 0 additions and 42760 deletions

View File

@@ -1,176 +0,0 @@
# 06.NAT
## 1. NAT技术背景
![image-20200313173713144](06.NAT/image-20200313173713144.png)
- 私有IP地址的定义极大程度的缓解了IPv4地址紧缺的问题。
- 私有IP地址可以在本地局域网、私有网络内部随意使用但是这些地址在公网上是不可被路由的因此私有IP地址无法直接访问公网。
- NAT网络地址转换技术能够将数据包中的IP地址进行转换。
## 2. 私有IPv4地址空间
10.0.0.0 -10.255.255.255
172.16.0.0 -172.31.255.255
192.168.0.0 -192.168.255.255
## 3. NAT优缺点
| 优点 | 缺点 |
| :----------------------------------: | :-----------------------------------: |
| 节省IP地址空间 | 增加转发延迟 |
| 解决IP地址重叠问题 | 丧失端到端的寻址能力 |
| 增加网络的连入Internet的弹性 | 某些应用不支持NAT |
| 网络变更的时候减少IP重编址带来的麻烦 | 需要一定的内存空间支持动态存储NAT表项 |
| 对外隐藏内部地址,增加网络安全性 | 需要耗费一定CPU内存资源进行NAT操作 |
## 4. NAT术语
| 术语 | 英文 | 解释 |
| -------- | -------------- | ---------------- |
| 内部本地 | inside local | 转换之前源地址 |
| 外部本地 | outside local | 转换之前目的地址 |
| 内部全局 | inside global | 转换之后源地址 |
| 内部全局 | outside global | 转换之后目的地址 |
`inside`表示源地址,`outside`表示目的地址
`local`表示转换之前,`global`表示转换之后
![image-20200313174718881](06.NAT/image-20200313174718881.png)
## 5. 静态NAT
一对一映射为每个内部的地址指定一个公网IP地址。
这种方法主要用在内网中存在需要对公网提供服务的服务器的场景类似的例子有WEB服务器、邮件服务器、FTP服务器等
### 5.1 配置命令
```
Router(config)# ip nat inside source static local-ip global-ip
Router(config-if)# ip nat inside
Router(config-if)# ip nat outside
Router# show ip nat translations
```
![image-20200313175949235](06.NAT/image-20200313175949235.png)
上图所示R1作为服务器内部网络的路由器拥有公网IP地址`100.12.12.2`,如果想要发布内部的服务到公网那么需要进行如下配置。
```
int e0/0
ip nat outside
int e0/1
ip nat inside
ip nat inside source static 192.168.1.2 100.12.12.10
```
这样配置之后当pc访问`100.12.12.10`就相当于访问服务器,完全忽视掉路由器的存在。
不过这样做比较浪费IP地址因为一台服务器占用一整个IP地址如果服务器数量比较多这样就需要租用多个IP地址。
最好的做法是端口的一对一映射,这样的做法比较常见。
![image-20200313180907649](06.NAT/image-20200313180907649.png)
上图中两台服务器其实只需要一个端口号对外提供服务即可并不需要完整的使用一整个IP地址所以可以在R1上进行如下配置。
```
int e0/0
ip nat outside
int e0/1
ip nat inside
ip nat inside source static tcp 192.168.1.2 80 interface e0/0 80
ip nat inside source static tcp 192.168.1.3 8888 interface e0/0 8888
```
## 6. 基于地址池的源地址转换
定义一个IP地址池里面放了多个公网IP地址然后分配给内网需要上公网的主机用。
这样的做法个人认为比较土豪而且并与下面提到的PAT比起来并没有任何优势反而安全性有问题。容易暴露IP造成短时间内的不安全。
### 6.1 配置
```
Router(config)# ip nat pool namestart-ip end-ip {netmasknetmask|prefix-lengthprefix-length}
Router(config-if)# access-list acl-numpermit source[source-wildcard]
Router(config-if)# ip nat inside source list acl-numpool name
Router(config-if)# ip nat inside
Router(config-if)# ip nat outside
```
![image-20200313182205813](06.NAT/image-20200313182205813.png)
上图中内部网络的两台PC在访问服务器的时候会借用地址池里面的地址进行访问不过当地址池的地址小于内部主机地址数量的时候会出现后面发起访问的PC无法获取转换地址导致无法上网。
R1上的核心配置如下
```
ip nat pool natpool 100.12.12.100 100.12.12.102 netmask 255.255.255.0
access-list 1 permit 192.168.1.0 0.0.0.255
ip nat inside source list 1 pool natpool
int e0/0
ip nat outside
int e0/1
ip nat inside
```
## 7. PAT
对数据包的源地址和端口均进行转换,通过这种转换,可以使多个内部本地地址同时共享同一个公网地址 。
这种NAT也是现在用的最多的无论是企业还是家庭网络因为成本的原因都是一个公网IP地址需要承担内部网络众多主机的转换需求。
![image-20200313182952513](06.NAT/image-20200313182952513.png)
观察PC1去访问服务器的时候地址的转换情况我们会发现源IP地址被路由器替换为出接口的IP地址并且端口号也有可能会被替换具体的看你需要的端口号是不是被占用。
当数据到达服务器之后服务器就可以对数据包的源IP地址进行回复了数据包回到路由器上之后路由器再对照之前的NAT转换记录将数据包发回`192.168.1.2:1234`,从而完成通信。
```
access-list 1 permit 192.168.1.0 0.0.0.255
ip nat inside source list 1 interface e0/0 overload
int e0/0
ip nat outside
int e0/1
ip nat inside
```
## 8. TCP负载均衡
通过静态NAT部分的介绍我们知道路由器可以承担为路由器发布服务的功能当我们访问路由器IP的时候路由器可以帮助我们将请求转发到内部的服务器上。
我们可以将内部的服务相同用于冗余的服务器地址作为地址池这样当我们从外部访问路由器IP地址的时候路由器就可以将池中的服务器轮流作为回应的设备从而实现负载均衡减少单台服务器的压力。
![image-20200313183829721](06.NAT/image-20200313183829721.png)
如上图PC第一次访问`100.12.12.2`地址的时候,是`server1`进行回应。当PC第二次访问`100.12.12.2`的时候,是`server2`回应。
R1的关键配置如下:
```
access-list 1 permit 100.12.12.2 # 用于匹配目的IP地址
ip nat pool natpool 192.168.1.2 192.168.1.3 netmask 255.255.255.0 type rotary
# 这边设置的池类型是rotary,意思是旋转的,为了更好的看到实验效果
# 默认的池类型是match-host也就是同一个源IP地址始终是同一台服务器响应
ip nat inside destination list 1 pool natpool
```
## 9. NAT维护命令
清除所有动态NAT表项
```
Router# clear ip nat translation *
```
清除特定的NAT表项
```
Router# clear ip nat translation ?
```