Compare commits
75 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9bbb15c141 | ||
|
|
586ee457f7 | ||
|
|
f16fbafe0c | ||
|
|
04c4d2ebbb | ||
|
|
2e0d0efec9 | ||
|
|
77e5faa614 | ||
|
|
d4d0c19224 | ||
|
|
ab858a38d8 | ||
|
|
271e9ce30d | ||
|
|
54c97d3b5d | ||
|
|
81c08d9cf7 | ||
|
|
6fc715b4bc | ||
|
|
a5d77b126b | ||
|
|
3500eee5a0 | ||
|
|
53baa20a06 | ||
|
|
1d7c32922c | ||
|
|
1a1084fc68 | ||
|
|
ce80ad4ce2 | ||
|
|
76fdf1c3ff | ||
|
|
eca758ffec | ||
|
|
95cf266d2b | ||
|
|
748c53530a | ||
|
|
b0d463268e | ||
|
|
e32b846be2 | ||
|
|
90b6b1d241 | ||
|
|
0b5ee08fcb | ||
|
|
932ad827ca | ||
|
|
756607e94d | ||
|
|
eb3da86fe9 | ||
|
|
85ccc5ef97 | ||
|
|
f5593228db | ||
|
|
5fa3560f61 | ||
|
|
26dc81441e | ||
|
|
1f61719592 | ||
|
|
7d6886d710 | ||
|
|
95253846ac | ||
|
|
00e4e9b815 | ||
|
|
2e80684739 | ||
|
|
5b34159aaf | ||
|
|
f111c4e356 | ||
|
|
07bdd213fb | ||
|
|
3c25e7260c | ||
|
|
2fea84899d | ||
|
|
48ff4fe4d2 | ||
|
|
9fc31f798f | ||
|
|
f9132a55d8 | ||
|
|
c4cf827863 | ||
|
|
3cffd7d4dd | ||
|
|
cb7e5ca4c7 | ||
|
|
7f8b5889f6 | ||
|
|
936e30683b | ||
|
|
fe41f10b27 | ||
|
|
9cc043af2f | ||
|
|
fa834ca263 | ||
|
|
76ebae887a | ||
|
|
971f9191c2 | ||
|
|
7515e8b098 | ||
|
|
0592aad61d | ||
|
|
00c4bb1ec5 | ||
|
|
7ca2d216d7 | ||
|
|
ad81469740 | ||
|
|
8100bc5228 | ||
|
|
92123dfe25 | ||
|
|
aa46426e3a | ||
|
|
c1b0704361 | ||
|
|
5c2fca7ff9 | ||
|
|
06627a6543 | ||
|
|
c5780d1dc3 | ||
|
|
1107b8712d | ||
|
|
88f7dd4058 | ||
|
|
73c9dbe2ca | ||
|
|
83ebcff9c8 | ||
|
|
94a375ee73 | ||
|
|
1422b87fb7 | ||
|
|
95ffa9c797 |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 225 KiB |
|
Before Width: | Height: | Size: 225 KiB |
|
Before Width: | Height: | Size: 225 KiB |
|
Before Width: | Height: | Size: 225 KiB |
|
Before Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 250 KiB |
|
Before Width: | Height: | Size: 250 KiB |
|
Before Width: | Height: | Size: 219 KiB |
6
.gitignore
vendored
@@ -1,2 +1,4 @@
|
||||
_book
|
||||
node_modules
|
||||
book
|
||||
epub
|
||||
pdf
|
||||
/index.html
|
||||
|
||||
109
README.md
@@ -1,56 +1,20 @@
|
||||
# 60 天通过 CCNA 考试
|
||||
|
||||
# 60 天通过 CCNA 考试 🖧
|
||||
|
||||
**Cisco CCNA in 60 Days**
|
||||
|
||||
* Github: [github.com/gnu4cn/ccna60d](https://github.com/gnu4cn/ccna60d)
|
||||
* Gitlab: [gitlab.com/unisko/ccna60d](https://gitlab.com/unisko/ccna60d/)
|
||||
* Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
* PDF 版本:[ccna60d.pdf](https://github.com/gnu4cn/ccna60d/tree/9e798f46959af227e50de97213941157c220a70b/ccna60d.pdf)
|
||||
|
||||
___
|
||||
- Github: [github.com/gnu4cn/ccna60d](https://github.com/gnu4cn/ccna60d)
|
||||
|
||||
**推荐模拟器**
|
||||
|
||||
<p align="center">
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/8/8f/GNS3_logo.png" />
|
||||
</p>
|
||||
- Gitlab: [gitlab.com/unisko/ccna60d](https://gitlab.com/unisko/ccna60d/)
|
||||
|
||||
<p align="center">
|
||||
<a href="https://www.gns3.com/software/download">GNS3 下载</a>
|
||||
</p>
|
||||
|
||||
- [ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
___
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以捐赠译者:
|
||||
|
||||
|
||||
<p align="center">
|
||||
<img src="images/633086908.jpg" />
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<i>图 0-1 - 赞助译者 - <b>支付宝</b> 付款码</i>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="images/611739062.jpg" />
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<i>图 0-2 - 赞助译者 - <b>微信</b> 付款码</i>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="images/btc-qrcode.png" />
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<i>图 0-3 - 赞助译者 - <b>Bitcoin</b> 付款码</i>
|
||||
</p>
|
||||
|
||||
## 捐赠记录
|
||||
|
||||
_2017-08-03_
|
||||
@@ -59,10 +23,15 @@ _2017-08-03_
|
||||
|
||||
_2017-05-21_
|
||||
|
||||
* “远”通过支付宝进行了捐赠,并留言“60天通过ccna对我帮助很大期待更新”
|
||||
* “远”通过支付宝进行了捐赠,并留言 “60 天通过 ccna 对我帮助很大期待更新”
|
||||
|
||||
## 更新记录
|
||||
|
||||
_2023-03-28_
|
||||
|
||||
* 迁移到 [mdbook](https://rust-lang.github.io/mdBook/) 部署
|
||||
|
||||
|
||||
_2020-10-27_
|
||||
|
||||
* 生成PDF版本
|
||||
@@ -81,3 +50,59 @@ _2017-07-14_
|
||||
|
||||
* 完成第36天--EIGRP 章节的修订,EIGRP已无问题
|
||||
|
||||
|
||||
|
||||
|
||||
## 在本地阅读
|
||||
|
||||
在本地阅读本书,需要安装 `mdbook` 程序。根据操作系统的不同,安装 `mdbook` 程序有所不同。
|
||||
|
||||
|
||||
### 在 Linux 系统上
|
||||
|
||||
```console
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
cargo install mdbook
|
||||
```
|
||||
|
||||
### 在 Windows 上
|
||||
|
||||
在 “Powershell(管理员)”("Administrator: Windows Powershell") 中,先安装 `choco`
|
||||
|
||||
```powershell
|
||||
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
|
||||
```
|
||||
|
||||
经由 `choco` 安装 `msys2`
|
||||
|
||||
```powershell
|
||||
choco install -y msys2
|
||||
```
|
||||
|
||||
在 `msys2` 中安装 `mdbook`
|
||||
|
||||
```console
|
||||
pacman -S mingw-w64-x86_64-mdbook
|
||||
```
|
||||
|
||||
安装好 `mdbook` 后, 带一些命令行参数和开关运行服务器:
|
||||
|
||||
```console
|
||||
mdbook serve ~/rust-lang-zh_CN -p 8080 -n 127.0.0.1 --open
|
||||
```
|
||||
|
||||
> 注:当在 Windows 系统上时,咱们要在 `msys2` 的终端窗口中运行此命令。
|
||||
|
||||
此时,将在操作系统的默认浏览器中,打开本书。
|
||||
|
||||
___
|
||||
|
||||
**推荐模拟器**
|
||||
|
||||
<p align="center">
|
||||
<img src="./src/images/GNS3_logo.png" alt="GNS3 logo" />
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://www.gns3.com/software/download">GNS3 下载(Linux, Windows, MacOS)</a>, <a href="GNS3_tutorial.md">GNS3入门教程</a>
|
||||
</p>
|
||||
|
||||
31
SUMMARY.md
@@ -1,31 +0,0 @@
|
||||
# Table of contents
|
||||
|
||||
* [60 天通过 CCNA 考试](README.md)
|
||||
* [第1天, 网络、线缆、OSI及TCP模型](d01-networks-cables-osi-and-tcp-models.md)
|
||||
* [第2天, CSMA/CD, 交换和虚拟局域网](d02-csma-cd-switching-and-vlans.md)
|
||||
* [第3天, 中继、DTP 及 VLAN 间路由](d03-trunking-dtp-and-inter-vlan-routing.md)
|
||||
* [第4天, 路由器和交换机安全](d04-router-and-switch-security.md)
|
||||
* [第5天, IP 地址分配](d05-ip-addressing.md)
|
||||
* [第6天, 网络地址转换](d06-nat.md)
|
||||
* [第7天, 互联网协议版本6](d07-ipv6.md)
|
||||
* [第8天, IPv4与IPv6共存的网络环境](d08-integrating-ipv4-and-ipv6-network-environments.md)
|
||||
* [第9天, 访问控制清单](d09-acl.md)
|
||||
* [第10天, 路由的一些概念](d10-routing-concepts.md)
|
||||
* [第11天, 静态路由](d11-static-routing.md)
|
||||
* [第12天, OSPF基础知识](d12-ospf-basics.md)
|
||||
* [第13天, OSPF版本3](d13-ospfv3.md)
|
||||
* [第14天, DHCP及DNS](d14-dhcp-and-dns.md)
|
||||
* [第15天, 一二层排错](d15-layer_1-and-layer_2-troubleshooting.md)
|
||||
* [第31天, 生成树协议](d31-spanning-tree-protocol.md)
|
||||
* [第32天, 快速生成树协议](d32-rapid-spanning-tree-protocol.md)
|
||||
* [第33天, 以太网通道及链路聚合协议](d33-etherchannels-and-link-aggregation-protocols.md)
|
||||
* [第34天, 第一跳冗余协议](d34-first-hop-redundancy-protocols.md)
|
||||
* [第35天, 启动与IOS](d35-booting-and-ios.md)
|
||||
* [第36天, EIGRP](d36-eigrp.md)
|
||||
* [第37天,EIGRP故障排除](d37-troubleshooting-eigrp.md)
|
||||
* [第38天,IPv6下的EIGRP](d38-eigrp-for-ipv6.md)
|
||||
* [第39天,开放最短路径优先协议](d39-ospf.md)
|
||||
* [第40天,系统日志、简单网络管理协议与NetFlow软件](d40-syslog-snmp-and-netflow.md)
|
||||
* [第41天,广域组网](d41-wide-area-networking.md)
|
||||
* [第42天,帧中继与点对点协议](d42-frame-relay-and-ppp.md)
|
||||
|
||||
1
baidu_verify_code-OpQ6lQjNMQ.html
Normal file
@@ -0,0 +1 @@
|
||||
341fd0d423d4a6e41995735db87cbb7d
|
||||
34
book.json
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"author": "Translated by Peng Hailin, laxers@gmail.com",
|
||||
"description": "这是一本 CCNA 教程",
|
||||
"generator": "xfoss.com 网站",
|
||||
"links": {
|
||||
"sharing": {
|
||||
"weibo": null
|
||||
},
|
||||
"sidebar": {
|
||||
"60天通过CCNA考试": "https://ccna60d.xfoss.com/"
|
||||
}
|
||||
},
|
||||
"pdf": {
|
||||
"fontSize": 12,
|
||||
"margin": {
|
||||
"bottom": 12,
|
||||
"left": 16,
|
||||
"right": 12,
|
||||
"top": 18
|
||||
},
|
||||
"paperSize": "a4"
|
||||
},
|
||||
"plugins" : [
|
||||
"highlight-code",
|
||||
"livereload",
|
||||
"lunr",
|
||||
"sharing",
|
||||
"fontsettings",
|
||||
"theme-comscore"
|
||||
],
|
||||
"pluginsConfig": {
|
||||
}
|
||||
|
||||
}
|
||||
22
book.toml
Normal file
@@ -0,0 +1,22 @@
|
||||
[book]
|
||||
authors = ["Lenny Peng"]
|
||||
language = "zh"
|
||||
multilingual = false
|
||||
src = "src"
|
||||
title = "CCNA60D Chinese, 中文版 CCNA 60 days"
|
||||
description = "CCNA in 60 days Chinese, 中文版 CCNA 60 days"
|
||||
|
||||
[preprocessor.pagetoc]
|
||||
[output.html]
|
||||
additional-css = ["theme/pagetoc.css"]
|
||||
additional-js = ["theme/pagetoc.js"]
|
||||
git-repository-url = "https://github.com/gnu4cn/ccna60d"
|
||||
git-repository-icon = "fa-github"
|
||||
google-analytics="G-V49YMMPZJN"
|
||||
|
||||
[output.html.print]
|
||||
enable = false
|
||||
|
||||
[output.epub]
|
||||
|
||||
[output.pdf]
|
||||
621
d06-NAT.md
@@ -1,621 +0,0 @@
|
||||
# 第6天 网络地址转换
|
||||
|
||||
**Network Address Translation**
|
||||
|
||||
___
|
||||
|
||||
Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。
|
||||
|
||||
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 [捐赠译者](https://github.com/gnu4cn/buy-me-a-coffee)。
|
||||
|
||||
___
|
||||
|
||||
## 第六天的任务
|
||||
|
||||
- 阅读今天的课文
|
||||
- 回顾昨天的课文内容
|
||||
- 完成今天的实验
|
||||
- 阅读 ICND1 记诵指南
|
||||
- 在网站[subnetting.org](http://www.subnetting.org) 上花15分钟
|
||||
|
||||
网络地址转换是另一个生僻内容(another strange subject),思科把网络地址转换拆分到ICND1和ICND2两个大纲中了。
|
||||
|
||||
今天你会学到下面这些知识。
|
||||
|
||||
- NAT基础
|
||||
- 对NAT的配置和验证
|
||||
- NAT故障排除
|
||||
|
||||
今天的课程涵盖了ICND1大纲的以下要求。
|
||||
|
||||
+ 弄清NAT的基本操作
|
||||
- NAT的目的
|
||||
- NAT地址池
|
||||
- 静态NAT
|
||||
- 一对一的NAT
|
||||
- NAT过载,Overloading
|
||||
- 源地址NAT
|
||||
- 单向NAT
|
||||
- 按需求配置并验证NAT
|
||||
|
||||
## NAT基础,NAT Basics
|
||||
|
||||
想象一下如果网络不是以IP地址运行,而是按颜色来运作。蓝色和黄色有无限的供应,其它颜色却是短缺的。网络分开成使用蓝色和黄色的许多用户,因为这两种颜色可以随意使用。而蓝色用户需要频繁地前往外部网络,那么就需要去买点绿色凭据,在蓝色用户需要与外部网络上的主机通信时,路由器可以用其将蓝色用户的凭据进行替换。路由器此时会像下面这样做。
|
||||
|
||||

|
||||
|
||||
*图6.1 -- 内部凭据被替换成了外部凭据*
|
||||
|
||||
| 内部凭据 | 外部凭据 |
|
||||
| -- | -- |
|
||||
| 蓝色1号 | 绿色1号 |
|
||||
| 蓝色2号 | 绿色2号 |
|
||||
| 蓝色3号 | 绿色3号 |
|
||||
|
||||
在各台蓝色设备完成与外部的连接后,对应的绿色凭据会释放给其它蓝色设备使用。这么做的好处在于**外部设备无法看到内部凭据编号**,且**有助于留下互联网上十分有限的可用凭据**。
|
||||
|
||||
我们看到,NAT不仅保护了网络IP地址,同时也是节约地址的另一种方法。**NAT是在路由器或者防火墙上实现的**,那么,代替上面的颜色,你会看到下面这样的情况。
|
||||
|
||||

|
||||
|
||||
*图6.2 -- 内部地址被替换成外部地址*
|
||||
|
||||
| 内部地址 | 外部地址 |
|
||||
| -- | -- |
|
||||
| `192.168.1.1` | `200.100.1.5` |
|
||||
| `192.168.1.3` | `200.100.1.7` |
|
||||
|
||||
根据特定的需求,**在路由器上配置NAT有三种方式**。CCNA考试要求你掌握所有三种方式。
|
||||
|
||||
为了配置NAT,要先告诉路由器,有哪些内部和外部接口。这是因为事实上可以将众多内部地址替换成某个NAT地址池中的地址(a pool of NAT addresses),或者最起码替换成单一的NAT地址, 并在路由器上的两个以太网接口之间完成NAT。
|
||||
|
||||
正如前面说的,对于考试和现实需求来说,通常都会将私有互联网地址转换成互联网上的可路由的地址(routable addresses on the Internet)。这在家庭宽带路由器上就能见到,其通常会给笔记本电脑一个`192.168.1`范围的IP,而在连接到ISP的接口上有着一个可路由的地址。
|
||||
|
||||
NAT令到私有网络上的主机可以访问互联网上的资源,或是可以访问到其它公共网络。NAT是一个IETF标准,其让局域网的内部流量使用一个IP地址集合,这些地址通常就是RFC 1918中所定义的私有地址空间,对于外部流量,又使用另一个地址集合,这些地址通常是公开注册的IP地址空间。
|
||||
|
||||
NAT为进入和发出的流量去改装数据包的头部,并对每个会话进行跟踪。理解NAT的关键,同时也是NAT故障排除的关键,就是对NAT的有关术语有扎实理解。你应熟悉下面这些NAT名词。
|
||||
|
||||
- NAT内部接口
|
||||
- 内部本地地址
|
||||
- 内部全球地址
|
||||
- NAT外部接口
|
||||
- 外部本地地址
|
||||
- 外部全球地址
|
||||
|
||||
上面NAT术语中的**内部接口,是指由该组织所控制的管理域的边界接口(the border interface of the administrative domain controlled by the organization)。而并不非得要是内部网络上的主机所使用的默认网关**。
|
||||
|
||||
而**内部本地地址则是某台内部网络上的主机的IP地址**。在**多数情况下,内部本地地址都是一个`RFC 1918`地址**(也就是不可路由地址,比如`192.168.x.x`或`172.16.x.x`等等)。该地址被转换成外部全局地址,那么**外部全局地址通常就是来自一个公开分配的或是经注册的地址池了**。要记住的是,尽管如此,**内部本地地址也可以是一个公网地址**。
|
||||
|
||||
**内部全局地址,则是内部主机在其呈现在外部世界时的地址**。一旦内部IP地址被转换过后,对公网或是其它任何外部网络及主机来说,它就成为了一个内部全局地址了。
|
||||
|
||||
与内部接口对应,**外部接口是指不受该组织所控制的管理域的边界**。换句话说,外部接口是连接外部网络的,连接的网络可以是互联网或其它任何的外部网络,比如友商网络等。任何处于外部接口外侧的主机,都不属于本地组织的管理之下。
|
||||
|
||||
**外部本地地址是某台外部主机呈现给内部主机的IP地址**。最后,**外部全局地址又是一个合法的、可在互联网上使用的公网地址**。外部本地地址和外部全局地址都是分配自一个全球可路由网络地址空间。
|
||||
|
||||
为搞清楚这些概念,图6.3表示了两台主机之间的一个会话中各种地址的使用。中间的网关上开启了NAT。
|
||||
|
||||

|
||||
|
||||
*图6.3 -- 理解NAT的各种内部外部地址*
|
||||
|
||||
NAT内部和外部的分址,是一个经典的考试问题,所以还需在回头看几次这里的内容。
|
||||
|
||||
## 配置并验证NAT,Configuring and Verifying NAT
|
||||
|
||||
在思科IOS上对网络地址转换的配置和验证是一个简单的事情。在配置NAT时,要执行下面这些操作。
|
||||
|
||||
- 使用接口配置命令`ip nat inside`将一个或多个的接口指定为内部接口。
|
||||
|
||||
- 使用接口配置命令`ip nat outside`将某个接口指定为外部接口。
|
||||
|
||||
- 配置一条访问控制清单(access control list, ACL), 其将匹配所有需要转换的流量。此访问控制清单可以是标准、扩展的命名ACL或编号ACL(a standard or an extended named or numbered ACL)。
|
||||
|
||||
- 作为可选项,使用全局配置命令`ip nat pool <name> <start-ip> <end-ip> [netmaske <mask> | prefix-length <length>]`, 配置一个全球地址池(a pool of global addresses)。这会定义出一个内部本地地址将会转换成的内部全球地址池。
|
||||
|
||||
- 使用全局配置命令`ip nat inside source list <ACL> [interface | pool] <name> [overload]`,全局性地配置上NAT。
|
||||
|
||||
> Farai 指出 -- “请看看命令`ip nat inside source static`, 可以在[www.howtonetwork.net/public/698.cfm](http://www.howtonetwork.net/public/698.cfm)免费查阅。”
|
||||
|
||||
下面的输出给出了一种思科IOS软件下配置NAT(动态NAT)的方式。可以看出,该配置使用了可用的`description`和`remark`两种特性,来帮助管理员更容易地对网络进行管理和故障排除。
|
||||
|
||||
```console
|
||||
R1(config)#interface FastEthernet0/0
|
||||
R1(config-if)#description ‘Connected To The Internal LAN’
|
||||
R1(config-if)#ip address 10.5.5.1 255.255.255.248
|
||||
R1(config-if)#ip nat inside
|
||||
R1(config-if)#exit
|
||||
R1(config)#interface Serial0/0
|
||||
R1(config-if)#description ‘Connected To The ISP’
|
||||
R1(config-if)#ip address 150.1.1.1 255.255.255.248
|
||||
R1(config-if)#ip nat outside
|
||||
R1(config-if)#exit
|
||||
R1(config)#access-list 100 remark ‘Translate Internal Addresses Only’
|
||||
R1(config)#access-list 100 permit ip 10.5.5.0 0.0.0.7 any
|
||||
R1(config)#ip nat pool INSIDE-POOL 150.1.1.3 150.1.1.6 prefix-length 24
|
||||
R1(config)#ip nat inside source list 100 pool INSIDE-POOL
|
||||
R1(config)#exit
|
||||
```
|
||||
|
||||
按照这个配置,命令`show ip nat translations`就可以用来对路由器上具体进行的转换进行查看,如下面的输出所示。
|
||||
|
||||
```console
|
||||
R1#show ip nat translations
|
||||
Pro Inside global Inside local Outside local Outside global
|
||||
icmp 150.1.1.4:4 10.5.5.1:4 200.1.1.1:4 200.1.1.1:4
|
||||
icmp 150.1.1.3:1 10.5.5.2:1 200.1.1.1:1 200.1.1.1:1
|
||||
tcp 150.1.1.5:159 10.5.5.3:159 200.1.1.1:23 200.1.1.1:23
|
||||
```
|
||||
|
||||
在路由器上配置NAT时,通常有以下三个选择。
|
||||
|
||||
- 对一个内部地址,用一个外部地址进行替换(静态NAT,static NAT)
|
||||
- 对多个内部地址,用两个以上的外部地址进行替换(动态NAT,dynamic NAT)
|
||||
- 将多个内部地址,用多个外部端口进行转换(这就是**端口地址转换**,或者叫**单向NAT**, Port Address Translation or one-way NAT)
|
||||
|
||||
### 静态NAT
|
||||
|
||||
**Static NAT**
|
||||
|
||||
在网络内部一些有一台web服务器时,就要将某个特定内部地址,替换成另一个外部地址了。如此时仍然进行动态分址,就没有办法到达该特定目的地址,因为它总是变动的。
|
||||
|
||||
>Farai指出,“对那些需要经由互联网可达的所有服务器,比如e-mail或FTP服务器,都要使用静态NAT(如下面的图6.4所示)”
|
||||
|
||||

|
||||
|
||||
**图6.4 -- 在用的静态NAT**
|
||||
|
||||
| 内部地址 | 外部NAT地址 |
|
||||
| -- | -- |
|
||||
| `192.168.1.1` | `200.1.1.1` |
|
||||
| `192.168.2.1` | `200.1.1.2` |
|
||||
|
||||
对上面的网络,配置应像下面这样。
|
||||
|
||||
```console
|
||||
Router(config)#interface f0/0
|
||||
Router(config-if)#ip address 192.168.1.1 255.255.255.0
|
||||
Router(config-if)#ip nat inside
|
||||
Router(config)#interface f0/1
|
||||
Router(config-if)#ip address 192.168.2.1 255.255.255.0
|
||||
Router(config-if)#ip nat inside
|
||||
Router(config)#interface s0/0
|
||||
Router(config-if)#ip nat outside
|
||||
Router(config-if)#exit
|
||||
Router(config)#ip nat inside source static 192.168.1.1 200.1.1.1
|
||||
Router(config)#ip nat inside source static 192.168.2.1 200.1.1.2
|
||||
```
|
||||
|
||||
命令`ip nat inside`和`ip nat outside`,告诉路由器哪些是内侧NAT接口,哪些是外侧的NAT接口。而命令`ip nat inside source`命令,就定义了那些静态转换,想要多少条就可以有多少条的该命令,那么就算你掏钱买的那些公网IP地址有多少个,就写上多少条吧。在思科公司,笔者曾解决有关此类问题的大量主要的配置错误,就是找不到`ip nat inside`及`ip nat outside`语句!考试中可能会碰到那些要求找出配置错误的问题。
|
||||
|
||||
强烈建议将上述命令敲入到某台路由器中去。本书中有很多的NAT实验,但是在阅读理论章节的同时,你敲入得越多,那么这些信息就能越好地进入你的大脑。
|
||||
|
||||
### 动态NAT或NAT地址池
|
||||
|
||||
通常会用到一组可路由地址,或是一个可路由地址池。一对一的NAT映射,有其局限性,首当其冲的就是成本高,其次路由器上有着多行的配置。动态NAT允许为内部主机配置一或多个的公网地址组。
|
||||
|
||||
路由器会维护一个内部地址到外部地址对应的清单,而最后该表格中的转换会超时(Your router will keep a list of the internal addresses to external addresses, and eventually the translation in the table will time out)。可以修改此超时值,但请找Cisco 技术支持工程师(a Cisco TAC engineer)的建议去修改。
|
||||
|
||||

|
||||
|
||||
*图6.5 -- 到一个NAT公网可路由地址池的内部私有地址*
|
||||
|
||||
当路由器上的内部主机发出到外部的连接时,如执行命令`show ip nat translations`, 就会看到下面的包含类似信息的图表。
|
||||
|
||||
| 内侧地址 | 外侧NAT地址 |
|
||||
| -- | -- |
|
||||
| `192.168.1.3` | `200.1.1.11` |
|
||||
| `192.168.1.2` | `200.1.1.14` |
|
||||
|
||||
在上面的图6.5中,让内部地址使用的是一个从`200.1.1.1`到`200.1.1.16`的地址池。下面是要实现该目的的配置文件。这里就不再给出路由器接口地址了。
|
||||
|
||||
```console
|
||||
Router(config)#interface f0/0
|
||||
Router(config-if)#ip nat inside
|
||||
Router(config)#interface s0/1
|
||||
Router(config-if)#ip nat outside
|
||||
Router(config)#ip nat pool poolname 200.1.1.1 200.1.1.16 netmask 255.255.255.0
|
||||
Router(config)#ip nat inside source list 1 pool poolname
|
||||
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
|
||||
```
|
||||
|
||||
该ACL用于告诉路由器哪些地址要转换,哪些地址不要转换。而该子网掩码实际上是反转的,叫做反掩码,在第九天会涉及。所有NAT地址池都需要一个名字,而在本例中,它简单地叫做“poolname”。源列表引用自那个ACL(the source list refers to the ACL), **经译者在GNS3上测试,动态NAT仍然是一对一的地址转换**。
|
||||
|
||||
### NAT Overload/端口地址转换/单向NAT
|
||||
|
||||
**NAT Overload/Port Address Translation/One-Way NAT**
|
||||
|
||||
IP地址处于紧缺之中,在有着成千上万的地址需要路由时,将花一大笔钱(**静态NAT、动态NAT都无法解决此问题**)。在此情况下,可以使用**NAT overload方案**(如图6.6), 该方案又被思科叫做**端口地址转换(Port Address Translation, PAT)**或**单向NAT**。PAT巧妙地允许将某端口号加到某个IP地址,作为与另一个使用该IP地址的转换区分开来的方式。每个IP地址有多达 `65000` 个可用端口号。
|
||||
|
||||
尽管**这是超出CCNA考试范围的,但了解PAT如何处理端口号,会是有用的**。在每个思科文档中,都将每个公网IP地址的可用端口号分为`3`个范围,分别是`0-511`、`512-1023`和`1024-65535`。PAT给每个UDP和TCP会话都分配一个独特的端口号。它会尝试给原始请求分配同样的端口值,但如果原始的源端口号已被使用,它就会开始从某个特别端口范围的开头进行扫描,找出第一个可用的端口号,分配给那个会话。
|
||||
|
||||

|
||||
|
||||
*图6.6 -- NAT Overload*
|
||||
|
||||
此时,命令`show ip nat translations`给出的表格,将会显示下面这样的IP地址及端口号。
|
||||
|
||||
| 内侧地址 | 外侧NAT地址(带有端口号) |
|
||||
| -- | -- |
|
||||
| `192.168.1.1` | `200.1.1.1:30922` |
|
||||
| `192.168.2.1` | `200.1.1.2:30975` |
|
||||
|
||||
而要配置PAT,需要进行如同动态NAT的那些同样配置,还要在地址池后面加上关键字 `overload`。
|
||||
|
||||
```console
|
||||
Router(config)#interface f0/0
|
||||
Router(config-if)#ip nat inside
|
||||
Router(config)#interface s0/1
|
||||
Router(config-if)#ip nat outside
|
||||
Router(config)#ip nat pool poolname 200.1.1.1 200.1.1.1 netmask 255.255.255.0
|
||||
Router(config)#ip nat inside source list 1 pool poolname overload
|
||||
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
|
||||
```
|
||||
|
||||
这该很容易记住吧!
|
||||
|
||||
>Farai指出 -- “以多于一个IP方式使用PAT,就是对地址空间的浪费,因为路由器会使用第一个IP地址,并为每个随后的连接仅增大端口号。这就是为何通常将PAT配置为该接口上的超载(overload)。”
|
||||
|
||||
## NAT故障排除
|
||||
|
||||
**Troubleshooting NAT**
|
||||
|
||||
NAT故障中十次有九次,都是由于路由器管理员忘记了把`ip nat outside`或`ip nat inside`命令加到路由器接口上。事实上,几乎总是存在这个问题!接下来最频繁的错误包括不正确的ACL,以及某个拼写错误的地址池名称(地址池是区分大小写的)。
|
||||
|
||||
使用命令`debug ip nat [detailed]`,可以在路由器上对NAT转换进行调试,又可以使用命令`sh ip nat translations`,来查看NAT地址池。
|
||||
|
||||
## 第六天问题
|
||||
|
||||
1. NAT converts the `_______` headers for incoming and outgoing traffic and keeps track of each session.
|
||||
2. The `_______` address is the IP address of an outside, or external, host as it appears to inside hosts.
|
||||
3. How do you designate inside and outside NAT interfaces?
|
||||
4. Which show command displays a list of your NAT table?
|
||||
5. When would you want to use static NAT?
|
||||
6. Write the configuration command for NAT `192.168.1.1` to `200.1.1.1`.
|
||||
7. Which command do you add to a NAT pool to enable PAT?
|
||||
8. NAT most often fails to work because the `_______` command is missing.
|
||||
9. Which `debug` command shows live NAT translations occurring?
|
||||
|
||||
## 第六天问题的答案
|
||||
|
||||
1. Packet.
|
||||
2. Outside local.
|
||||
3. With the `ip nat inside` and `ip nat outside` commands.
|
||||
4. The `show ip nat translations` command.
|
||||
5. When you have a web server (for example) on the inside of your network.
|
||||
6. `ip nat inside source static 192.168.1.1 200.1.1.1`.
|
||||
7. The `overload` command.
|
||||
8. The `ip nat inside` or `ip nat outside` command.
|
||||
9. The `debug ip nat [detailed]` command.
|
||||
|
||||
## 第六天的实验
|
||||
|
||||
### 静态NAT实验
|
||||
|
||||
**Static NAT Lab**
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
**静态NAT实验拓扑图**
|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何配置静态NAT。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 将IP地址`192.168.1.1 255.255.255.0`加入到路由器`A`,并修改`hostname`为`Router A`。把IP地址`192.168.1.2 255.255.255.0`加入到路由器`B`。在正确的一侧加上时钟速度(`clock rate`),然后分别自`A`往`B`和自`B`往`A`进行`ping`测试。如需提示,请回顾先前的那些实验。
|
||||
|
||||
2. 在路由器`A`上需要加入一个IP地址,以模拟LAN上的一台主机。**通过一个环回接口,可以实现这个目的**。
|
||||
|
||||
```console
|
||||
RouterA#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterA(config)#interface Loopback0
|
||||
RouterA(config-if)#ip add 10.1.1.1 255.0.0.0
|
||||
RouterA(config-if)#
|
||||
```
|
||||
|
||||
3. 为进行测试,需要告诉`Router B`将发往任何网络的任何流量,都发往`Router A`。通过一条静态路由完成这个。
|
||||
|
||||
```console
|
||||
RouterB#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterB(config)#ip route 0.0.0.0 0.0.0.0 Serial0/1/0
|
||||
RouterB(config)#
|
||||
```
|
||||
|
||||
4. 要测试该条静态路由是否工作,通过从`Router A`上的环回接口对`Router B`进行`ping`操作。
|
||||
|
||||
```console
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.2
|
||||
Repeat count [5]:
|
||||
Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 10.1.1.1
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
Packet sent with a source address of 10.1.1.1
|
||||
!!!!!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
|
||||
RouterA#
|
||||
```
|
||||
|
||||
5. 在`Router A`上配置一个静态NAT条目。使用NAT,将地址`10.1.1.1`, 在其离开该路由器时,转换成`172.16.1.1`。同样需要告诉路由器哪个是NAT的内部接口,哪个是外部接口。
|
||||
|
||||
```console
|
||||
RouterA#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterA(config)#int Loopback0
|
||||
RouterA(config-if)#ip nat inside
|
||||
RouterA(config-if)#int Serial0/1/0
|
||||
RouterA(config-if)#ip nat outside
|
||||
RouterA(config-if)#
|
||||
RouterA(config-if)#ip nat inside source static 10.1.1.1 172.16.1.1
|
||||
RouterA(config)#
|
||||
```
|
||||
|
||||
6. 打开NAT调试,如此就可以看到转换的进行。此时再执行另一个扩展`ping`操作(自`L0`接口的),并查看NAT表。因为IOS的不同,你的输出可能与我的不一样。
|
||||
|
||||
```console
|
||||
RouterA#debug ip nat
|
||||
IP NAT debugging is on
|
||||
RouterA#
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.2
|
||||
Repeat count [5]:
|
||||
Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 10.1.1.1
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
Packet sent with a source address of 10.1.1.1
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [11]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [11]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [12]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [12]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [13]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [13]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [14]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [14]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [15]
|
||||
!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/46/110 ms
|
||||
RouterA#
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [15]
|
||||
RouterA#show ip nat translations
|
||||
Pro Inside global Inside local Outside local Outside global
|
||||
icmp 172.16.1.1:10 10.1.1.1:10 192.168.1.2:10 192.168.1.2:10
|
||||
icmp 172.16.1.1:6 10.1.1.1:6 192.168.1.2:6 192.168.1.2:6
|
||||
icmp 172.16.1.1:7 10.1.1.1:7 192.168.1.2:7 192.168.1.2:7
|
||||
icmp 172.16.1.1:8 10.1.1.1:8 192.168.1.2:8 192.168.1.2:8
|
||||
icmp 172.16.1.1:9 10.1.1.1:9 192.168.1.2:9 192.168.1.2:9
|
||||
--- 172.16.1.1 10.1.1.1 --- ---
|
||||
RouterA#
|
||||
```
|
||||
|
||||
7. 记住,路由器随后很快就会清除该NAT转换,为其它IP地址使用这个/这些NAT地址而对其进行清理。
|
||||
|
||||
```console
|
||||
NAT: expiring 172.16.1.1 (10.1.1.1) icmp 6 (6)
|
||||
NAT: expiring 172.16.1.1 (10.1.1.1) icmp 7 (7)
|
||||
```
|
||||
|
||||
>译者注: 通过本实验,要注意三个问题:一是**可路由地址可以是外部接口同一网段的地址,也可以不是**;二是**NAT超时问题,该参数可以设置**;三是**环回接口的使用, 常用来模拟LAN中的计算机**。
|
||||
|
||||
### NAT地址池/动态NAT实验
|
||||
|
||||
**NAT Pool Lab**
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
**NAT地址池/动态NAT实验拓扑图**
|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何配置一个NAT地址池(动态NAT)。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 将IP地址`192.168.1.1 255.255.255.0`加入到路由器`A`,并修改`hostname`为`Router A`。把IP地址`192.168.1.2 255.255.255.0`加入到路由器`B`。在正确的一侧加上时钟速度(`clock rate`),然后分别自`A`往`B`和自`B`往`A`进行`ping`测试。如需提示,请回顾先前的那些实验。
|
||||
|
||||
2. 需要给`RouterA`添加两个IP地址来模拟LAN上的主机。通过两个环回接口,可以达到这个目的。这两个IP地址将位处不同子网,但都以`10`地址开头。
|
||||
|
||||
```console
|
||||
RouterA#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterA(config)#interface Loopback0
|
||||
RouterA(config-if)#ip add 10.1.1.1 255.255.255.0
|
||||
RouterA(config-if)#int l1 ← short for Loopback1
|
||||
RouterA(config-if)#ip address 10.2.2.2 255.255.255.0
|
||||
RouterA(config-if)#
|
||||
```
|
||||
|
||||
3. 为了进行测试,需要告诉`RouterB`将到任何网络的任何流量,都发往`RouterA`。用一条静态路由完成这点。
|
||||
|
||||
```console
|
||||
RouterB#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterB(config)#ip route 0.0.0.0 0.0.0.0 Serial0/1/0
|
||||
RouterB(config)#
|
||||
```
|
||||
|
||||
4. 在`RouterA`上,从环回接口向`RouterB`发出`ping`操作,以此来测试该静态路由是否工作。
|
||||
|
||||
```console
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.2
|
||||
Repeat count [5]:
|
||||
Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 10.1.1.1
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
Packet sent with a source address of 10.1.1.1
|
||||
!!!!!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
|
||||
RouterA#
|
||||
```
|
||||
|
||||
5. 在`RouterA`上配置一个NAT地址池。在本实验中,使用地址池`172.16.1.1`到`172.16.1.10`。任何以`10`开头的地址,都将成为一个NAT。记住你**必须**指定NAT的内部和外部接口,否则NAT就不会工作。
|
||||
|
||||
```console
|
||||
RouterA#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
RouterA(config)#int l0
|
||||
RouterA(config-if)#ip nat inside
|
||||
RouterA(config)#int l1
|
||||
RouterA(config-if)#ip nat inside
|
||||
RouterA(config-if)#int Serial0/1/0
|
||||
RouterA(config-if)#ip nat outside
|
||||
RouterA(config-if)#exit
|
||||
RouterA(config)#ip nat pool 60days 172.16.1.1 172.16.1.10 netmask 255.255.255.0
|
||||
RouterA(config)#ip nat inside source list 1 pool 60days
|
||||
RouterA(config)#access-list 1 permit 10.1.1.0 0.0.0.255
|
||||
RouterA(config)#access-list 1 permit 10.2.1.0 0.0.0.255
|
||||
RouterA(config)#
|
||||
```
|
||||
|
||||
**命令`ip nat pool`创建出地址池。需要给地址池一个自己选择的名称。而命令`netmask`告诉路由器应用到地址池上的网络掩码**。
|
||||
|
||||
**命令`source list`告诉路由器查看的ACL。该条ACL告诉路由器哪些网络将与NAT地址池进行匹配和转换**。
|
||||
|
||||
6. 打开NAT调试,如此才可以看到转换的发生。接着执行扩展`ping`(自`L0`和`L1`发出的),并查看NAT表。因为IOS平台的不同,你的输出可能和下面的不一样。将会看到NAT地址池中的两个地址正在用到。
|
||||
|
||||
```console
|
||||
RouterA#debug ip nat
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.2
|
||||
Repeat count [5]:Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 10.1.1.1
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
Packet sent with a source address of 10.1.1.1
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [26]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [16]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [27]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [17]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [28]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [18]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [29]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [19]
|
||||
NAT: s=10.1.1.1->172.16.1.1, d=192.168.1.2 [30]
|
||||
!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 17/28/32 ms
|
||||
RouterA#
|
||||
NAT*: s=192.168.1.2, d=172.16.1.1->10.1.1.1 [20]
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.2
|
||||
Repeat count [5]:
|
||||
Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 10.2.2.2
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
|
||||
Packet sent with a source address of 10.2.2.2
|
||||
NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [31]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [21]
|
||||
NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [32]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [22]
|
||||
NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [33]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [23]
|
||||
NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [34]
|
||||
!
|
||||
NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [24]
|
||||
NAT: s=10.2.2.2->172.16.1.2, d=192.168.1.2 [35]
|
||||
!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
|
||||
RouterA#
|
||||
NAT*: s=192.168.1.2, d=172.16.1.2->10.2.2.2 [25]
|
||||
RouterA#show ip nat trans
|
||||
Pro Inside global Inside local Outside local Outside global
|
||||
icmp 172.16.1.1:16 10.1.1.1:16 192.168.1.2:16 192.168.1.2:16
|
||||
icmp 172.16.1.1:17 10.1.1.1:17 192.168.1.2:17 192.168.1.2:17
|
||||
icmp 172.16.1.1:18 10.1.1.1:18 192.168.1.2:18 192.168.1.2:18
|
||||
icmp 172.16.1.1:19 10.1.1.1:19 192.168.1.2:19 192.168.1.2:19
|
||||
icmp 172.16.1.1:20 10.1.1.1:20 192.168.1.2:20 192.168.1.2:20
|
||||
icmp 172.16.1.2:21 10.2.2.2:21 192.168.1.2:21 192.168.1.2:21
|
||||
icmp 172.16.1.2:22 10.2.2.2:22 192.168.1.2:22 192.168.1.2:22
|
||||
icmp 172.16.1.2:23 10.2.2.2:23 192.168.1.2:23 192.168.1.2:23
|
||||
icmp 172.16.1.2:24 10.2.2.2:24 192.168.1.2:24 192.168.1.2:24
|
||||
icmp 172.16.1.2:25 10.2.2.2:25 192.168.1.2:25 192.168.1.2:25
|
||||
RouterA#
|
||||
```
|
||||
|
||||
### NAT Overload实验
|
||||
|
||||
**NAT Overload Lab**
|
||||
|
||||
重复先前的实验。这次,在引用地址池时,将`overload`命令加到该配置行的后面。这会指示路由器使用PAT。去掉`Loopback1`。**请注意,正如Farai指出的那样,在真实世界中,地址池通常只会有一个地址,否则在外部接口上会超载**(Please note that as Farai says, in the real world, your pool will usually have only one address or you will overload your outside interface)。
|
||||
|
||||
```console
|
||||
RouterA(config)#ip nat inside source list 1 pool 60days overload
|
||||
```
|
||||
|
||||
我已经为方便而使用思科Packet Tracer,完成了上面的实验,所以你通常会碰到与我的输出所不一致的输出。下面是一个PAT实验的示例输出。从中可以看出,路由器给每个转换都加上了一个端口号。不幸的是,在NAT地址池实验中,会看到相似的编号,这是一个PAT的混淆之处。
|
||||
|
||||
```console
|
||||
RouterA#show ip nat tran
|
||||
Inside global Inside local Outside local Outside global
|
||||
10.0.0.1:8759 172.16.1.129:8759 192.168.1.2:8759 192.168.1.2:8759
|
||||
```
|
||||
969
d07-IPv6.md
@@ -1,969 +0,0 @@
|
||||
# 第7天 互联网协议版本6
|
||||
|
||||
__Internet Protocol version 6, IPv6__
|
||||
|
||||
___
|
||||
|
||||
Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。
|
||||
|
||||
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 [捐赠译者](https://github.com/gnu4cn/buy-me-a-coffee)。
|
||||
|
||||
___
|
||||
|
||||
## 第七天任务
|
||||
|
||||
- 阅读下面的课文理论部分
|
||||
- 阅读ICND1记诵指南
|
||||
|
||||
IPv6已经开发了很多年,且已在全世界网络中投入使用(与IPv4共同运行)。许多网络工程师在面对不得不学习一种新的分址方式时,表现出了他们的恐惧,笔者也曾听他们中的许多人说希望在IPv6成为一项必备技能之前能够退休。
|
||||
|
||||
恐惧是站不住脚的,是没有有事实依据的。IPv6是一种对用户友好格式,一旦对其熟悉了,就会发现其是IPv4的改良,而你可能会优先选用IPv6。**CCNA考试中IPv6占了很大部分**; 为此,需要**掌握其工作原理**,及**如何配置IPv6地址**,**掌握其有关标准**,并**应用IPv6来满足网络的各项需求**。
|
||||
|
||||
今天将会学到下面这些知识点。
|
||||
|
||||
- IPv6的历史
|
||||
- IPv6分址格式
|
||||
- 应用IPv6
|
||||
- IPv6子网划分
|
||||
|
||||
本模块对应了以下CCNA大纲要求。
|
||||
|
||||
- 拿出恰当的IPv6分址方案,以满足某个LAN/WAN环境的分址要求
|
||||
+ 正确描述IPv6的各种地址
|
||||
- 全球单播地址, Global Unicast addresses
|
||||
- 多播地址, Multicast addresses
|
||||
- 本地链路地址, Link-Link addresses
|
||||
- 本地唯一地址,Unique-Local addresses
|
||||
- 扩展唯一识别符,Extended Unified Identifier 64, EUI-64
|
||||
- 自动配置地址(autoconfiguration)
|
||||
|
||||
## IPv6历史
|
||||
|
||||
**History of IPv6**
|
||||
|
||||
### 满足目标吗?
|
||||
|
||||
**Fit for Purpose?**
|
||||
|
||||
在Tim Berners-Lee爵士于`1989`年发明WWW时,他无法预测到该技术对世界的巨大影响。个人计算机曾经贵得高攀不起,此外,除非能够负担得起昂贵的WAN连接费用,否则就没有方便的长距离通信方法。那时也没有大家共同遵循的通信模型。
|
||||
|
||||
那时,某些事需要一些变化,以IP这种新型分址标准的的形式,变革发生了。业界从犯下的大量失误中终有收获,并在对商业需求的回应下,IETF早在`1998`年就发布了众多IPv6标准中最早的一些标准。
|
||||
|
||||
并不会有一个日期,能够整个地从IPv4转变为IPv6;而是网络将会逐渐地变为同时运行IPv4和IPv6, 并最终IPv4会滚粗。当下,全部互联网流量的近`1%`运行在IPv6上(来源:Yves Poppe, IPv6 -- A 2012 Report Card)。
|
||||
|
||||
### 为何要迁移
|
||||
|
||||
**Why Migrate?**
|
||||
|
||||
笔者已经指出,在IPv4发明时,互联网不是由普罗大众所使用的,也没有使用的必要。那时还没有网站,没有电子商务,没有移动网络,没有社交媒体。就算买得起PC,拿来也干不了什么事。现在的情况是几乎所有人都在线上了。我们使用互联网来完成日常工作,很多业务都依赖互联网而存在。很快我们又会使用移动装置来管理我们的汽车及家庭安防,来打开咖啡机,设置空调,设定电视录制爱看的电视剧等等。
|
||||
|
||||
这些事情已经在发生当中,不光在欧洲和美国,在那些有着数十亿人口的快速发展中国家,比如印度和中国,都在发生着。IPv4就是不能胜任了,就算勉强可以,也没有足够的地址来满足需求。
|
||||
|
||||
下面是迁移到IPv6所能带来的一些好处。
|
||||
|
||||
- 简化了的IPv6数据包头部
|
||||
- 更大的地址空间
|
||||
- IPv6层次化的分址方法
|
||||
- IPv6的扩展性扩充性
|
||||
- IPv6消除了广播
|
||||
- 无状态的自动配置
|
||||
- 集成移动能力
|
||||
- 集成了安全增强
|
||||
|
||||
我喜欢从其**数据包层的探究,来分析IPv6, 同时也会去探究IPv6中可用的许多种类型的包头部**,但限于篇幅,同时考试中也不会考到这两点,所以就不包含这两方面的内容了。而着重在为考试和成为一名思科工程师,所需要掌握的内容上。
|
||||
|
||||
### 十六进制计数
|
||||
|
||||
**Hex Numbering**
|
||||
|
||||
这里很有必要回顾一下有关十六进制计数的内容。
|
||||
|
||||
我们知道十进制数有着从`0`到`9`的`10`个数字。二进制则有从`0`到`1`的`2`个数字。那么十六进制就有从`0`到`F`的`16`个数字。这些地址分别叫做基数`10`、基数`2`和基数`16`的地址。
|
||||
|
||||
可以发现各个计数系统都是从`0`开始的,就像下面这样。
|
||||
|
||||
十进制 -- `0,1,2,3,4,5,6,7,8,9`
|
||||
二进制 -- `0,1`
|
||||
十六进制 -- `0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F`
|
||||
|
||||
在写下这些地址时,可能不会意识到是在使用那些从右往左的列;最右边的列是权重为`1`的列,接下来的列,是权重为计数基数的前一列序号次幂的列。如同下表所示。
|
||||
|
||||
| 计数基数 | `N`乘计数基数的`3`次幂 | `N`乘计数基数的`2`次幂 | `N`乘计数基数的`1`次幂 | `N`乘`1` |
|
||||
| -- | -- | -- | -- | -- |
|
||||
| `10` -- 十进制 | `1000` | `100` | `10` | `1` |
|
||||
| `2` -- 二进制 | `8` | `4` | `2` | `1` |
|
||||
| `16` -- 十六进制 | `4096` | `256` | `16` | `1` |
|
||||
|
||||
可以看出每一位都从其右边的那位继承了数值。十进制基数是`10`乘`1`。二进制是`1`, 同时`1`乘了计数系统的`2`。如对三种计数系统的最后一个十六进制数位进行比较,就会发现将十六进制作为IPv6分址首选格式的原因了。
|
||||
|
||||
| 十进制 | 二进制 | 十六进制 |
|
||||
| -- | -- | -- |
|
||||
| `0` | `0000` | `0` |
|
||||
| `1` | `0001` | `1` |
|
||||
| `2` | `0010` | `2` |
|
||||
| `3` | `0011` | `3` |
|
||||
| `4` | `0100` | `4` |
|
||||
| `5` | `0101` | `5` |
|
||||
| `6` | `0110` | `6` |
|
||||
| `7` | `0111` | `7` |
|
||||
| `8` | `1000` | `8` |
|
||||
| `9` | `1001` | `9` |
|
||||
| `10` | `1010` | `A` |
|
||||
| `11` | `1011` | `B` |
|
||||
| `12` | `1100` | `C` |
|
||||
| `13` | `1101` | `D` |
|
||||
| `14` | `1110` | `E` |
|
||||
| `15` | `1111` | `F` |
|
||||
|
||||
为提供足够的地址来满足我们在今后许多年的需求,IPv6已被设计成可以提供数以百亿亿的地址。为做到这点,计数范围从`32`位二进制数,扩展到`128`位。每`4`位可用一个十六进制数位表示(这可从上面的图表看出)。逻辑上推断就是`2`个十六进制位给出的是`8`位二进制数,也就是一个字节。
|
||||
|
||||
一个IPv6地址有`128`位长,又被分为`8`组的`16`位,在以完整格式写出时,用冒号将每组分开。每`4`位十六进制数的范围是`0000`到`FFFF`,其中F是十六进制计数方法中最高的数。
|
||||
|
||||
| 第`8`组 | 第`7`组 | 第`6`组 | 第`5`组 | 第`4`组 | 第`3`组 | 第`2`组 | 第`1`组 |
|
||||
| -- | -- | -- | -- | -- | -- | -- | -- |
|
||||
| `0000` | `0000` | `0000` | `0000` | `0000` | `0000` | `0000` | `0000` |
|
||||
| to | to | to | to | to | to | to | to |
|
||||
| `FFFF` | `FFFF` | `FFFF` | `FFFF` | `FFFF` | `FFFF` | `FFFF` | `FFFF` |
|
||||
|
||||
## IPv6分址
|
||||
|
||||
**IPv6 Addressing**
|
||||
|
||||
我们已经知道,IPv6用到`128`位的地址。因为**此种地址格式不同于我们所熟悉的IPv4地址格式,在初次见到时通常会犯迷糊**。但是,一旦掌握了,那么就知道其逻辑和结构都十分简单。**这些`128`位的IPv6地址,使用了十六进制数值**(也就是说,`0`到`9`以及字母`A`到`F`)。**而在IPv4中,子网掩码既可以用CIDR表示法表示**(比如`/16`或`/32`), **也可以用点分十进制表示法表示**(dotted-decimal notation, 比如`255.255.0.0`或`255.255.255.255`), 但**在IPv6中,子网掩码只用CIDR表示法表示**,因为IPv6地址的长度很长。全球范围内的`128`位IPv6地址,由下面`3`部分组成。
|
||||
|
||||
- 由服务商分配的前缀,the provider-assigned prefix
|
||||
- 站点前缀,the site prefix
|
||||
- 接口或主机ID,the interface or host ID
|
||||
|
||||
所谓服务商分配的前缀,也被称作**全球地址空间**(the global address space),是一个**48位**的前缀,又被分为下面的`3`部分。
|
||||
|
||||
- `16`位保留的IPv6全球前缀,the 16-bit reserved IPv6 global prefix
|
||||
- `16`位服务商持有的前缀,the 16-bit provider-owned prefix
|
||||
- `16`位服务商分配给其客户的前缀,the 16-bit provider-assigned prefix
|
||||
|
||||
**IPv6全球前缀,用于表示IPv6全球地址空间**(the IPv6 global address space)。**所有IPv6全球互联网地址,都位于从`2000::/16`到`3FFF::/16`的范围**。而`16`位**服务商持有的IPv6前缀,是IANA分配给服务商,且归其所有的**。ISP持有前缀,处于`0000::/32`到`FFFF::/32`范围。
|
||||
|
||||
**接下来的`16`位,表示由实际服务提供商从其分到前缀地址空间中,再分配给某个组织的IPv6前缀**。该前缀处于`0000::/48`到`FFFF::/48`范围。于是,前`48`位就共同构成了IPv6地址第一部分 -- 服务提供商分配的前缀,如下图7.1所示。
|
||||
|
||||

|
||||
|
||||
*图7.1 -- `48`位服务提供商分配的IPv6前缀*
|
||||
|
||||
在`48`位服务商分配的前缀之后,紧接着的`16`位就是**站点前缀**。站点前缀的子网掩码长度是`/64`, 该子网掩码已经包括了之前的`48`位服务商分配的前缀。**此前缀长度允许在每个站点前缀中有`2`的`64`次幂个地址**。图7.2演示了该`16`位站点前缀。
|
||||
|
||||

|
||||
|
||||
*图7.2 -- `16`位的IPv6站点前缀*
|
||||
|
||||
而在站点前缀之后,接下来的`64`位就用于接口或主机的分址了。**IPv6地址的接口或主机ID部分,表示了某个IPv6子网上的某台网络设备或主机**。至于确定接口或主机地址的不同方式,在今天的课程稍后会详细讲到。图7.3说明了IPv6的这些前缀是如何分配的。
|
||||
|
||||

|
||||
|
||||
*图7.3 -- IPv6前缀的分配*
|
||||
|
||||
参考图7.3, 客户一旦收到由ISP提供的`/48`前缀,就可以该前缀范围内,对站点前缀和主机或接口地址进行自由分配了。基于可用的地址空间全部容量,任何单一机构客户,只需一个的服务商分配前缀,机构网络上的所有设备就保证可以分配到一个唯一IPv6全球地址。因此,IPv6绝对不需要NAT这样的技术。
|
||||
|
||||
### IPv6地址表示法
|
||||
|
||||
**IPv6 Address Representation**
|
||||
|
||||
IPv6地址可像下面这三种方式进行表示。
|
||||
|
||||
- 首选的或者说完整地址表示/形式
|
||||
- 压缩的表示法
|
||||
- 带有一个嵌入了IPv4地址的IPv6地址
|
||||
|
||||
尽管在以文本格式表示`128`位IPv6地址时,**首选形式或表示法是最常用的方式**,**熟悉其它两种IPv6地址表示法**也很重要。下面会对这三种方式进行说明。
|
||||
|
||||
### 首选形式
|
||||
|
||||
**The Prefered Form**
|
||||
|
||||
**IPv6地址的首选表示法**(the prefered representation for an IPv6 address),有着最长的格式,又被称作**IPv6地址的完整形式**(the complete form of an IPv6 address)。此格式表示法使用`32`个十六进制字符,以构成一个IPv6地址。通过将某地址写作共八组的十六进制字段,用冒号将这`8`个字段分开(比如,`3FFF:1234:ABCD:5678:020C:CEFE:FEA7:F3A0`)。
|
||||
|
||||
每个`16`位字段,由4个十六进制字符表示,那么每个字符就表示了`4`位。每个`16`位十六进制字段,可以是`0x0000`和`0xFFFF`之间的值,但就如同今天后面讲到的那样,**第一组的一些数值已被保留,那么所有可能的数值都不被使用**(as will be described later in this module, different values have been reserved for use in the first `16` bits, so all possible values are not used)。在书写IPv6地址时,**十六进制字符不区分大小写**。也就是说,`2001:ABCD:0000`和`2001:abcd:0000`是完全一样的。IPv6地址表示法的完整形式,在下图7.4中有演示。
|
||||
|
||||

|
||||
|
||||
*图7.4 -- IPv6地址表示法的首选形式*
|
||||
|
||||
下面的这些IPv6地址,是完整形式下的有效IPv6地址实例。
|
||||
|
||||
- `0000:0000:0000:0000:0000:0000:0000:0001`
|
||||
- `2001:0000:0000:1234:0000:5678:af23:bcd5`
|
||||
- `3FFF:0000:0000:1010:1A2B:5000:0B00:DE0F`
|
||||
- `fec0:2004:ab10:00cd:1234:0000:0000:6789`
|
||||
- `0000:0000:0000:0000:0000:0000:0000:0000`
|
||||
|
||||
### 压缩的表示法
|
||||
|
||||
**Compressed Representation**
|
||||
|
||||
压缩的表示法,允许以两种压缩方式之一,对IPv6地址进行压缩。第一种压缩方式,允许使用**一对**冒号(`::`), 对**一个有效IPv6地址中的那些由`0s`构成的连续`16`位字段的连续的`0`值,或者IPv6地址中前面的`0s`**,进行压缩。在使用这种方式时,**务必要记住,双冒号在一个IPv6地址中,只能使用一次**。
|
||||
|
||||
在用到压缩格式时,各个节点及各台路由器,负责去对双冒号两侧的位数进行计数,以判断出该双冒号究竟表示了多少个`0s`。表7.1显示了那些IPv6地址的首选形式及其压缩表示法。
|
||||
|
||||
*表7.1 -- 首选和压缩形式下的完整IPv6地址*
|
||||
|
||||
| 完整IPv6地址表示法 | 压缩的IPv6地址表示法 |
|
||||
| -- | -- |
|
||||
| `0000:0000:0000:0000:0000:0000:0000:0001` | `::0001` |
|
||||
| `2001:0000:0000:1234:0000:5678:af23:bcd5` | `2001::1234:0:5678:af23:bcd5` |
|
||||
| `3FFF:0000:0000:1010:1A2B:5000:0B00:DE0F` | `3FFF::1010:1A2B:5000:B00:DE0F` |
|
||||
| `FEC0:2004:AB10:00CD:1234:0000:0000:6789` | `FEC0:2004:AB10:CD:1234::6789` |
|
||||
| `0000:0000:0000:0000:0000:FFFF:172.16.255.1` | `::FFFF:172.16.255.1` |
|
||||
| `0000:0000:0000:0000:0000:0000:172.16.255.1` | `::172.16.255.1` |
|
||||
| `0000:0000:0000:0000:0000:0000:0000:0000` | `::` |
|
||||
|
||||
跟前面指出的那样,在单个的IPv6地址中,双冒号不能多于一次地使用。比如说,如要对这个完整IPv6地址`2001:0000:0000:1234:0000:0000:af23:bcd5`以压缩形式表示,那么你就只能使用双冒号一次,就算在该地址中有两组连续的`0`字符串。那么,在尝试将该地址压缩成`2001::1234::af23:bcd5`,就被看成是非法的;但是此IPv6地址既可以压缩成`2001::1234:0:0:af23:bcd5`, 也可以压缩成`2001:0:0:1234::af23:bcd5`, 取决于自己喜好。
|
||||
|
||||
第二种IPv6压缩地址表示法,对于**单个的`16`位字段,及前导`0s`,可从该IPv6地址中省略成单个的`0`**。在使用该方法时,如某个`16`位字段都是`0`, 那么就必须用一个`0`来表示此字段。在这种情况下,并非所有的`0`都能省略。表7.2中展示了首选形式的IPv6地址,以及它们怎样通过第二种IPv6压缩形式表示法进行压缩。
|
||||
|
||||
*表7.2 -- 以替代的压缩形式表示的完整IPv6地址*
|
||||
|
||||
| 完整IPv6地址表示法 | 压缩IPv6地址表示法 |
|
||||
| -- | -- |
|
||||
| `0000:0123:0abc:0000:04b0:0678:f000:0001` | `::123:abc:0:4b0:678:f000:1` |
|
||||
| `2001:0000:0000:1234:0000:5678:af23:bcd5` | `2001::1234:0:5678:af23:bcd5` |
|
||||
| `3FFF:0000:0000:1010:1A2B:5000:0B00:DE0F` | `3FFF::1010:1A2B:5000:B00:DE0F` |
|
||||
| `fec0:2004:ab10:00cd:1234:0000:0000:6789` | `fec0:2004:ab10:cd:1234::6789` |
|
||||
| `0000:0000:0000:0000:0000:FFFF:172.16.255.1` | `::FFFF:172.16.255.1` |
|
||||
| `0000:0000:0000:0000:0000:0000:172.16.255.1` | `::172.16.255.1` |
|
||||
| `0000:0000:0000:0000:0000:0000:0000:0000` | `::` |
|
||||
|
||||
这里就有了两种以压缩形式表示完整IPv6地址的方法,要记住,**两种方法之间并不互相排斥**。也就是说,在表示一个IPv6地址时,可以同时使用这两种方法。当某个完整IPv6地址既包含了连续`0s`字符串,又在其它字段中有前导`0s`时,这经常会用到。表7.3展示了一些既包含了连续`0s`字符串,又有前导`0s`的一些IPv6地址的完整形式,以及如何将这些地址表示成压缩形式。
|
||||
|
||||
*表7.3 -- 使用了两种压缩格式方法的完整IPv6地址*
|
||||
|
||||
| 完整IPv6地址表示法 | 压缩IPv6地址表示法 |
|
||||
| -- | -- |
|
||||
| `0000:0000:0000:0000:1a2b:000c:f123:4567` | `::1a2b:c:f123:4567` |
|
||||
| `FEC0:0004:AB10:00CD:1234:0000:0000:6789` | `FEC0:4:AB10:CD:1234::6789` |
|
||||
| `3FFF:0c00:0000:1010:1A2B:0000:0000:DE0F` | `3FFF:c00:0:1010:1A2B::DE0F` |
|
||||
| `2001:0000:0000:1234:0000:5678:af23:00d5` | `2001::1234:0:5678:af23:d5` |
|
||||
|
||||
### 带有一个嵌入的IPv4地址的IPv6地址
|
||||
|
||||
**IPv6 Addresses with an Embedded IPv4 Address**
|
||||
|
||||
这是**第三种IPv6地址表示法,用于在IPv6地址内部使用一个IPv4地址**。尽管这也是有效的IPv6地址,但请记住这种方法是不赞成的做法,同时也在考虑废弃这种方法,因为该方法仅适用于从IPv4到IPv6的过渡。
|
||||
|
||||
## IPv6地址的不同类型
|
||||
|
||||
**The Different IPv6 Address Types**
|
||||
|
||||
**IPv4支持4中不同类别的地址,分别是任意播(Anycast)、广播(Broadcast)、多播(Multicast)及单播(Unicast)地址**。尽管在本教程之前的模块中并未用到任意播一词, 但要记住,**任意播地址并非特殊类型的地址**。相反,**一个任意播地址简单地就是一个分配给多个接口的IP地址**。常见的使用了任意播的技术包括IP多播应用(IP Multicast implementations),以及`6to4`中继应用(`6to4` relay implementation)。
|
||||
|
||||
>**注意:** `6to4`是一种IPv4迁移到IPv6的过渡机制。对于CCNA考试来说,只需知道有这么个东西就行了。
|
||||
|
||||
在任意播寻址方式下,**设备使用从路由协议度量值上看离它们最近的那个公共地址**(the common address)。假如该主要地址不可达时,就会使用下一个最近的地址(with Anycast adressing, devices use the common address that is closest to them based on routing protocol metric. The next closest address is then used in the event that the primary address is no longer reachable)。此概念在下图7.5中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图7.5 -- 理解任意播寻址方式*
|
||||
|
||||
在图7.5中,`R1`和`R2`都有一个配置了公共地址`15.1.1.254/32`的环回接口`Loopback 254`。该前缀此时会经由EIGRP进行通告。默认情况下,`R1`和`R2`都会经由它们各自的相应环回接口,优先选择`15.1.1.254/32`前缀,因为该前缀是一个直接连接的子网。因此,两台路由器上所使用的公共地址绝不会发生冲突。
|
||||
|
||||
假定是在一般EIGRP度量值计算下,则`R3`和`R5`都会优先选择`R1`通告的那个任意播地址(the Anycast address), 这是由于其有着较小的内部网关协议(Interior Gateway Protocol, IGP)度量值(due to the lower IGP metric)。同样`R4`和`R6`则会优先选择R3通告的那个任意播地址,也是由于其有着较小的IGP度量值。要是`R1`或`R3`中的某台失效,网络中的路由器就会使用由剩下的那台路由器通告的任意播地址了。某个组织在应用任意播分址时,既可以使用`RFC 1918`中定义的地址空间中的某个单播地址(私有地址),也可以使用其公网地址块中的某个单播地址。
|
||||
|
||||
> **注意:** 当前的CCNA考试并不要求你采用任何的任意播分址或解决方案。但熟悉此概念是必要的。在完成路由章节的学习后,你将更为明白。*译者注:*关于任意播,可以参看[wikipedia.org/wiki/Anycast](https://en.wikipedia.org/wiki/Anycast),简单地说,任意播是一种冗余方法,可用来做负载均衡、加快访问速度。
|
||||
|
||||
在CCNA层次,IPv4的广播、多播及单播地址都无需更为详尽地阐述,本课程及本模块都不会对它们进行更为详细的说明。与IPv4支持这四种类型的地址相比,IPv6废除了广播地址,同时取而代之的仅支持以下类型的地址。
|
||||
|
||||
- 本地链路地址,Link-Local addresses
|
||||
- 站点本地地址,Site-Local addresses
|
||||
- 可聚合全球单播地址,Aggregatable Global Unicast addresses
|
||||
- 多播地址,Multicast addresses,已被废除,取而代之的是本地唯一地址(Unique-Local addresses, ULAs)
|
||||
- 任意播地址,Anycast addresses
|
||||
- 环回地址,Loopback addresses
|
||||
- 未指明的地址,Unspecified addresses,`::/128`
|
||||
|
||||
### 本地链路地址
|
||||
|
||||
**Link-Local Addresses**
|
||||
|
||||
**IPv6本地链路地址只能用在本地链路上**(也就是一个设备间所共享的网段),**是在某个接口上开启了IPv6时,自动分配给接口的**。这些地址分配自本地链路前缀(the Link-Local prefix)**`FE80::/10`**。记住`FE80::/10`等价于`FE80:0:0:0:0:0:0:0/10`, 又可以表示为`FE80:0000:0000:0000:0000:0000:0000:0000/10`。为了构成该地址,从第`11`到`64`位被设置为`0`, 同时接口的`EUI-64`(Extended Unique Identifier 64,64位扩展唯一标识)给追加到本地链路地址上去,作为下一顺位的`64`位(the lower-order `64` bits)。**EUI-64是由IEEE分配给接口产商的`24`位ID(Organization Unified Identifier, OUI),以及产商分配给其产品的`40`位值构成**。本模块稍后会更为详细地说明`EUI-64`分址。图7.6演示了本地链路地址的格式。
|
||||
|
||||

|
||||
|
||||
*图7.6 -- IPv6本地链路分址*
|
||||
|
||||
**本地链路地址是唯一的,一旦分配给了某个接口,就不再改变**。这就是说,某个接口在分配了一个公网IPv6地址后(比如,`2001:1000::1/64`),就算该公网IPv6前缀发生改变(变成`2001:2000::1/64`),本地链路地址也是不会改变的。这允许主机或路由器在IPv6全球互联网地址改变时,对其邻居始终保持可达。而**IPv6路由器是不会转发那些以本地链路地址作为源或目的地址的数据包,到其它IPv6路由器的**。
|
||||
|
||||
### 站点本地地址
|
||||
|
||||
**Site-Local Addresses**
|
||||
|
||||
站点本地地址是**那些仅在某个站点内部使用的地址**。与本地链路地址不同,必须**在网络设备上手动为其配置站点本地地址**。这些地址就是在IPv6中,与RFC 1918所定义的私有IPv4地址等价的地址,对于那些没有可全球路由IPv6地址空间的组织,可以使用这些地址。在IPv6互联网上,这些地址是不可路由的。
|
||||
|
||||
尽管在IPv6上进行NAT是可能的,但绝不建议这么做。理由就是有着大得多的IPv6地址(hence, the reason for the much larger IPv6 addresses)。站点本地地址是由`FEC0::/10`前缀、该前缀之后的54位子网ID,以及同样的为本地链路地址所用到的EUI-64格式的接口ID组成。与本地链路地址中设置为0的54位相比,站点本地地址中的54位,被用于构建不同的IPv6前缀(最多2的54次幂个)。下图7.7演示了站点本地地址的格式。
|
||||
|
||||

|
||||
|
||||
*图7.7 -- IPv6站点本地分址*
|
||||
|
||||
尽管在本章节中有对IPv6站点本地地址进行说明,同时在思科IOS软件中仍有对其的支持,但要知道**这些地址已被RFC 3879(废弃站点本地地址,Deprecating Site Local Addresses)所废弃**。与此同时,**RFC 4193(唯一本地IPv6单播地址,Unique Local IPv6 Unicast Addresses)又阐述本地唯一地址(Unique-Local addresses, ULAs)**, 本地唯一地址提供了站点本地地址的功能,它们在IPv6全球互联网上也是不可路由的,仅能在某个站点内部路由。
|
||||
|
||||
本地唯一地址分配自`FC00::/7`这个IPv6地址块,该地址块又被划分成两个`/8`的地址块,分别作为分配组和随机组(the assigned and random groups)。那么这两组就分别是`FC00::/8`和`FD00::/8`了。`FC00::/8`这个地址块是由一个分配机构(an allocation authority)管理其使用到的`/48s`,同时`FD00::/8`地址块则是通过在其后追加上随机生成的`40`位字符串,得到的一个有效`/48`地址块的。
|
||||
|
||||
### 可聚合全球单播地址
|
||||
|
||||
**Aggregatable Global Unicast Addresses**
|
||||
|
||||
**可聚合全球单播地址,就是那些用于一般IPv6流量传输、IPv6互联网的IPv6地址了**。这些地址与IPv4中用到的公网地址相似。而从网络分址角度看,每个IPv6全球单播地址都**是由三个主要部分构成的**:自服务商处收到的前缀(`48`位长)、站点前缀(`16`位长),以及主机部分(`64`位长)。这就构成了IPv6中所用到的`128`位地址了。
|
||||
|
||||
如同本模块前面提到的,服务商分配的前缀,是由IPv6服务提供商分配给作为其客户的某家组织的。默认情况下,这些前缀用到`/48`的前缀长度。此外,这些前缀又是从该服务提供商所拥有的IPv6地址空间中分配的(也就是`/32`前缀长度)。每家服务提供商都将有着其自己的IPv6地址空间,同时由一家服务提供商分配的IPv6前缀,不能在另一家的网络上使用。
|
||||
|
||||
而在某个站点内部,管理员此时就能通过用于子网划分的第`49`到`64`位,将服务提供商分配的`48`位前缀,划分成`64`位的站点前缀,从而可以得到`65535`个不同的,可在其网络中使用的子网。IPv6地址的主机部分表示该IPv6子网上的某台网络设备或主机。而这又是通过IPv6地址的低`64`位表示的(this is represented by the low-order 64 bits of the IPv6 address)。
|
||||
|
||||
IPv6的可聚合全球单播地址,是由互联网号码分配局(the Internet Assigned Numbers Authority, IANA)分配的,这些地址处于IPv6前缀`2000::/3`中。此前缀允许的可聚合全球单播地址范围是从`2000`到`3FFF`,如下表7.4所示。
|
||||
|
||||
*表7.4 -- IPv6可聚合全球单播地址*
|
||||
|
||||
| 说明 | 地址 |
|
||||
| -- | -- |
|
||||
| 范围中的第一个地址 | `2000:0000:0000:0000:0000:0000:0000:0000` |
|
||||
| 范围中的最后一个地址 | `3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF` |
|
||||
| 二进制标记 | 高位序的三位被设置为`001` |
|
||||
|
||||
在本模块编写时,`2000::/3`IPv6地址块中,仅分配使用了`3`个子网。这三个子网如下表7.5所示。
|
||||
|
||||
*表7.5 -- 由IANA所分配的IPv6可聚合全球单播地址*
|
||||
|
||||
| IPv6全球前缀 | 二进制表示法 | 说明 |
|
||||
| -- | -- | -- |
|
||||
| `2001::/16` | `0010 0000 0000 0001` | 全球IPv6互联网(单播) |
|
||||
| `2002::/16` | `0010 0000 0000 0000` | `6to4`迁移前缀 |
|
||||
| `3FFE::/16` | `0010 1111 1111 1110` | `6bone`前缀 |
|
||||
|
||||
> **注意:** 6to4迁移地址和6bone前缀将在本课程的后面说明。
|
||||
|
||||
在IPv6全球可聚合单播地址范围,保留了一个叫做**ORCHID**(`RFC 4843`中定义的覆盖可路由加密散列标识、Overlay Routable Cryptographic Hash Identifiers defined in RFC 4843)特别的实验范围。ORCHID是用于加密散列标识的不可路由IPv6地址。这些地址使用IPv6前缀`2001:10::/28`。关于ORCHID地址的细节,是超出当前CCNA考试要求范围的,本模块或本课程都不会包含。
|
||||
|
||||
### 多播地址
|
||||
|
||||
**Multicast Addresses**
|
||||
|
||||
IPv6中用到的多播地址,是从`FF00::/8`这个IPv6前缀中得到的。IPv6中的多播和IPv4中的多播,运行的方式是不一样的。**IPv6中重度使用到IP多播**,并用IP多播替换了一些诸如地址解析协议(Address Resolution Protocol, ARP)这样的IPv4协议。此外,IPv6中还用多播来完成前缀通告及其重编号(prefix advertisements and renumbering), 以及重复地址侦测(Duplicate Address Detection, DAD)等。本模块后面会对这些概念进行说明。
|
||||
|
||||
**IPv6中的多播数据包**,不是通过使用TTL值来将其限制在本地网段上。代之以**使用多播地址内部的范围字段(the Scope filed),定义出其范围**。网段上的IPv6节点,都侦听着多播包,甚至也会发出多播包来交换信息。这样,IPv6网段上所有节点,都知道在其同一网段上所有其它邻居节点了。下图7.8中演示了IPv6网络中用到的多播地址格式。
|
||||
|
||||

|
||||
|
||||
*图7.8 -- IPv6多播分址*
|
||||
|
||||
如同图7.8中所演示的那样,IPv6多播地址格式与其它之前学到的IPv6地址略有不同。IPv6多播地址的前`8`位表示多播前缀`FF::/8`。IPv6多播地址的标志字段(the Flag field)用于指明多播地址类型 -- 是永久的还是临时的。
|
||||
|
||||
**IPv6永久多播地址是由IANA分配的,而IPv6临时地址则可用于多播预部署的测试**(Permanent IPv6 Multicast addresses are assigned by IANA, while temporary IPv6 Multicast addresses can be used in pre-deployment Multicast testing)。标志字段所包含的值可以是表7.6中所示的两个。
|
||||
|
||||
*表7.6 -- IPv6永久及临时多播地址*
|
||||
|
||||
| 多播地址类型 | 二进制表示法 | 十六进制值 |
|
||||
| -- | -- | -- |
|
||||
| 永久 | `0000` | `0` |
|
||||
| 临时 | `0001` | `1` |
|
||||
|
||||
多播地址中接下来的4位表示**多播范围**。在IPv6多播分址中,该字段是一个**用于限制多播数据包发往网络其它区域的_强制_字段**(this field is a mandatory field that restricts Multicast packets from being sent to other areas in the network)。该字段本质上提供了与IPv4中所用到的TTL字段一样的功能。但是,**在IPv6中,范围的类型有好几种**,下表7.7中列出了这些类型。
|
||||
|
||||
*表7.7 -- IPv6多播地址范围的类型*
|
||||
|
||||
| 范围类型 | 二进制表示法 | 十六进制值 |
|
||||
| -- | -- | -- |
|
||||
| 本地接口,Interface-Local | `0001` | `1` |
|
||||
| 本地链路,Link-Local | `0010` | `2` |
|
||||
| 本地子网, Subnet-Local | `0011` | `3` |
|
||||
| 本地管理域范围,Admin-Local | `0100` | `4` |
|
||||
| 本地站点范围,Site-Local | `0101` | `5` |
|
||||
| 组织范围,Organization | `1000` | `8` |
|
||||
| 全球范围,Global | `1110` | `E` |
|
||||
|
||||
在这些IPv6多播前缀中,又**保留了一些地址**。这些保留地址称作多播指定地址(Multicast Assigned addresses), 如下表7.8中所示。
|
||||
|
||||
*表7.8 -- 保留的IPv6多播地址*
|
||||
|
||||
| 地址 | 范围 | 说明 |
|
||||
| -- | -- | -- |
|
||||
| `FF01::1` | 主机 | 所有在本地接口范围内的主机 |
|
||||
| `FF01::2` | 主机 | 所有在本地接口范围内的路由器 |
|
||||
| `FF02::1` | 本地链路 | 所有在本地链路范围内的主机 |
|
||||
| `FF02::2` | 本地链路 | 所有在本地链路范围内的路由器 |
|
||||
| `FF05::2` | 站点 | 所有在本地站点范围内的路由器 |
|
||||
|
||||
除了这些地址外,对路由器接口和网络主机上配置的每个单播和任意播地址,都自动启用了一个节点询问多播地址(a Solicited-Node Multicast address)。此地址有着一个本地链路范围,就是说该地址绝不会超出本地网段之外(this address has a Link-Local scope, which means that it will never traverse farther than the local network segment)。**节点询问多播地址用于以下两个目的:取代IPv4的ARP和DAD**。
|
||||
|
||||
由于IPv6不会用到ARP,那么节点询问多播地址就被网络主机和路由器用于获悉邻居设备的数据链路地址(the Data Link address)。这样就可以实现IPv6数据包向帧的转换,并将帧发往IPv6主机和路由器了。DAD是IPv6邻居发现协议(Neighbor Discovery Protocol, NDP)的一部分, 在本模块的稍后会详细说明这个协议。DAD就是在设备在采用自动配置方法时,将某个IPv6地址配置为其自己的地址之前,检查该地址是否在本地网段上已被使用的方法。本质上,DAD提供与IPv4中用到的无故ARP(Gratuitous ARP)相似的功能。这些**节点询问多播地址**, 是由IPv6前缀`FF02::1:FF00:0000/104`定义出来的。它们的构成为前缀`FF02::1:FF00:0000/104`, 与单播或任意播地址低位序的`24`位结合而成。图7.9演示了这些节点询问多播地址的格式。
|
||||
|
||||

|
||||
|
||||
*图7.9 -- IPv6节点询问多播地址*
|
||||
|
||||
而作为与IPv4到二层以太网的多播映射的一个类似方案,**IPv6提供了一种独特的方法,来将三层IPv6多播地址,映射到二层多播地址**。IPv6中的多播映射是通过在某多播地址的后`32`位加上一个`16`位前缀`33:33`,这个前缀就是IPv6网络中定义的多播以太网前缀(the defined Multicast Ethernet prefix for IPv6 Networks)。其在下图7.10中,演示了所有位于本地接口范围前缀`FF02::2`上的路由器的以太网映射多播地址。
|
||||
|
||||

|
||||
|
||||
*图7.10 -- IPv6多播地址*
|
||||
|
||||
### 任意播地址
|
||||
|
||||
**Anycast Addresses**
|
||||
|
||||
本章节的早前引入了任意播,其可被简单地说成是一对最近的通信(one-to-nearest communication), 这是因为基于路由协议度量值的那个最近的公共地址(the nearest common address),总是会为本地设备所优先选用。**在IPv6中,并无为任意播特别分配的地址范围**,因为**任意播地址使用的是全球单播地址、站点本地地址,甚或本地链路地址**。尽管如此,仍然保留一个作为特殊用途的任意播地址。该特别地址被称为**子网路由器任意播地址**(the Subnet-Router Anycast address),是由前面的该子网`64`位单播前缀,及将后`64`位全部设置为`0`(比如`2001:1a2b:1111:d7e5::`)构成的。**任意播地址是绝对不能作为某个IPv6数据包的源地址的**。它们典型地用于诸如移动IPv6(Mobile IPv6)等的协议中,任意播地址的用途,超出CCNA考试范围。
|
||||
|
||||
### 环回地址
|
||||
|
||||
**Loopback Address**
|
||||
|
||||
IPv6中的环回地址,用法和IPv4中的一样。与IPv4中用到的环回地址`127.0.0.1`相比,每台设备也都有一个IPv6环回地址,且该地址有设备自身使用。IPv6环回地址用的是前缀`::1`, 用首选地址格式表示为`0000:0000:0000:0000:0000:0000:0000:0001`。也就是说,在环回地址中,除了最后一位总是`1`外,其它所有位都设置为0。当设备开启IPv6时,总是会自动分配上这些地址,且这些地址绝不会发生变化。
|
||||
|
||||
### 未指明地址
|
||||
|
||||
**Unspecified Addresses**
|
||||
|
||||
在IPv6分址里,未指明地址就是那些没有指派到任何接口上的单播地址。这些地址表明设备缺少一个IPv6地址,同时这些地址还用于某些诸如IPv6 DHCP和DAD等的用途。未指明地址是以IPv6地址中的全0值表示的,可以使用前缀`::`进行书写。在首选格式下,这些地址表示为`0000:0000:0000:0000:0000:0000:0000:0000`。
|
||||
|
||||
## 一些IPv6的协议和机制
|
||||
|
||||
**IPv6 Protocols and Mechanisms**
|
||||
|
||||
尽管互联网协议版本`6`与版本`4`是相似的,但在具体运作上,前者与后者相比仍然有着显著的不同。本节对以下的一些IPv6协议和机制进行了说明。
|
||||
|
||||
- IPv6的ICMP
|
||||
- IPv6邻居发现协议(the IPv6 Neighbor Discovery Protocol, NDP)
|
||||
- IPv6的有状态自动配置机制(IPv6 stateful autoconfiguration)
|
||||
- IPv6的无状态自动配置机制(IPv6 stateless autoconfiguration)
|
||||
|
||||
### IPv6下的ICMP
|
||||
|
||||
**ICMP for IPv6**
|
||||
|
||||
ICMP用于将有关发往预期目的主机的IP数据的错误和其他信息,汇报给源主机。在`RFC 2463`中,作为`58`号协议定义的ICMPv6,支持ICMPv4的各种报文,还包含了ICMPv6的一些额外报文。**ICMPv6作为一个如同TCP一样的,属较高级别的协议,意味着在IPv6数据包中,ICMPv6是放在所有尽可能的扩展头部之后的**。下图7.11演示了ICMPv6数据包中所包含的字段。
|
||||
|
||||

|
||||
|
||||
*图7.11 -- ICMPv6数据包头部*
|
||||
|
||||
在ICMPv6数据包头部,其`8`位**类型字段**(the 8-bit Type field)**用于表明或区分ICMPv6报文类型**。该字段用于提供错误报文和信息性报文。表7.9列出并说明了一些可在此字段发现的常见值。
|
||||
|
||||
*表7.9 -- ICMPv6报文类型*
|
||||
|
||||
| ICMPv6 类型 | 说明 |
|
||||
| -- | -- |
|
||||
| `1` | 目的主机不可达 |
|
||||
| `2` | 数据包太大 |
|
||||
| `3` | 发生了超时 |
|
||||
| `128` | Echo请求 |
|
||||
| `129` | Echo回应 |
|
||||
|
||||
> **注意:** ICMPv4也是使用的这些报文类型。
|
||||
|
||||
紧接着类型字段的`8`位**代码字段**(the 8-bit Code field),**提供了有关发出的报文细节信息**。表7.10演示了该字段的常用值,也是ICMPv4所共用的。
|
||||
|
||||
*表7.10 -- ICMPv6代码*
|
||||
|
||||
| ICMPv6代码 | 说明 |
|
||||
| -- | -- |
|
||||
| `0` | Echo回应 |
|
||||
| `3` | 目的主机不可达 |
|
||||
| `8` | Echo |
|
||||
| `11` | 发生了超时 |
|
||||
|
||||
在代码字段后面的`16`位**校验和字段**(the 16-bit Checksum field),包含一个用于检测ICMPv6中数据错误的运算值。ICMPv6数据包的最后,就是报文或数据二选一的字段(the Message or Data field is an optional), 它是一个可变长度字段,包含了由类型及代码字段指明的报文类型特定数据。在用到报文或数据字段时,该字段提供了发送给目的主机的信息。
|
||||
|
||||
**ICMPv6是IPv6的一个核心部件**。在IPv6中,ICMPv6有以下用途。
|
||||
|
||||
- 重复地址检测,Duplicate Address Detection, DAD
|
||||
- ARP的替代,the replacement of ARP
|
||||
- IPv6无状态自动配置, IPv6 stateless autoconfiguration
|
||||
- IPv6前缀重新编号, IPv6 prefix renumbering
|
||||
- 路径MTU发现,Path MTU Discovery, PMTUD
|
||||
|
||||
> **注意:** 在上述用途中,DAD和无状态自动配置会在本章的稍后进行说明。PMTUD是超出当前CCNA考试要求范围的,在本模块及本教程中不会对其进行任何细节上的说明。
|
||||
|
||||
**IPv6邻居发现协议**
|
||||
|
||||
**The IPv6 Neighbor Discovery Protocol, NDP**
|
||||
|
||||
**IPv6邻居发现协议带来IPv6的即插即用特性**。它是在`RFC 2461`中定义的,是IPv6的一个必不可少的组成部分。**NDP运行在链路层**,负责**发现链路上的其它节点**、**确定其它节点的链路层地址**、**发现可用的路由器**,以及**维护有关到其它邻居节点路径的可达性信息**。**NDP实现了IPv6的类似于IPv4的ARP**(这正是其取代的功能)、**ICMP路由器发现**(ICMP Router Discovery)以及**路由器重定向协议(Router Redirect Protocols)等功能**。尽管如此,要记住NDP提供了比起IPv4中用到的诸多机制,都更为了不起的功能。在与ICMPv6配合使用时,NDP可以完成以下任务。
|
||||
|
||||
- 动态邻居和路由器发现,dynamic neighbor and router discovery
|
||||
- 取代ARP,the replacement of ARP
|
||||
- IPv6无状态自动配置,IPv6 stateless autoreconfiguration
|
||||
- 路由器重定向,router redirection
|
||||
- 主机参数发现,host parameter discovery
|
||||
- IPv6地址解析,IPv6 address resolution
|
||||
- 确定下一跳路由器,next-hop router determination
|
||||
- 邻居不可达检测,Neighbor Unreachablitiy Detection, NUD
|
||||
- 重复地址检测,Duplicate Address Detection, DAD
|
||||
|
||||
> **注意:** 并不要求对上面列出的每个优势进行细节上的探究。
|
||||
|
||||
邻居发现协议又定义了五种ICMPv6数据包类型,在下表7.11中有列出和说明。
|
||||
|
||||
*表7.11 -- ICMPv6邻居发现报文类型*
|
||||
|
||||
| ICMPv6类型 | 说明 |
|
||||
| -- | -- |
|
||||
| `133` | 用于路由器询问报文,used for Router Solicitation(RS) messages |
|
||||
| `134` | 用于路由器通告报文,used for Router Advertisement(RA) messages |
|
||||
| `135` | 用于邻居询问报文,used for Neighbor Solicitation(NS) messages |
|
||||
| `136` | 用于邻居通告报文,used for Neighbor Advertisement(NA) messages |
|
||||
| `137` | 用于路由器重定向报文, used for Router Redirect messages |
|
||||
|
||||
**路由器询问报文**(Router Solicition messages)由主机在其接口开启IPv6时所发出。这些报文用于请求本地网段上的路由器立即生成RA报文,而不要等到下一个计划的RA时间间隔才生成RA报文。下图7.2演示了一条在线路上捕获到的RS报文。
|
||||
|
||||

|
||||
|
||||
*图7.12 -- IPv6路由器询问报文*
|
||||
|
||||
路由器收到该RS报文后,便使用RA报文通告其存在,RA报文通常包含了本地链路的前缀信息,及所有诸如建议跳数限制等额外配置。RA中包含的信息在下图7.13中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图7.13 -- IPv6路由器通告报文*
|
||||
|
||||
这里重申一点,**RS和RA报文,都是路由器到主机(route-to-host)或主机到路由器(host-to-router)的信息交换**, 如下图所示。
|
||||
|
||||

|
||||
|
||||
*图7.14 -- IPv6的RS和RA报文*
|
||||
|
||||
IPv6的**邻居询问报文**(Neighbor Solicition messages),则是本地网段上的IPv6路由器所发出的多播报文,用于确定某个邻居的数据链路地址,或是用于检查某个邻居是否仍然可达(因而NS报文取代的是ARP的功能)。这些报文也用于重复地址检测(DAD)目的。尽管对NS报文的深入探究超出了CCNA考试要求的范围,下面的图7.15仍然演示了一个在线路上捕获到的IPv6邻居询问报文数据包。
|
||||
|
||||

|
||||
|
||||
*图7.15 -- IPv6邻居询问报文*
|
||||
|
||||
而**邻居通告报文**(Neighbor Advertisement messages)通常也是由本地网段上的路由器发出,用于对收到的NS报文进行回应。此外,**在一个IPv6前缀改变时,路由器也会发出一条无询问的NS报文**,以此来告知本地网络网段上的其它设备,发生了这个变化。在NA报文上,对NA报文中的格式或包含的字段的细节探究,也是超出CCNA考试要求范围之外的。图7.16和图7.17演示了一条在线路上捕获的邻居通告报文,**邻居通告报文也是通过IPv6多播发出的**。
|
||||
|
||||

|
||||
|
||||
*图7.16 -- IPv6邻居通告报文*
|
||||
|
||||

|
||||
|
||||
*图7.17 -- IPv6邻居通告报文*
|
||||
|
||||
最后,**路由器重定向**(router redirect)**使用报文类型为137的ICMPv6重定向报文**(ICMPv6 Redirect messages),路由器重定向用于告知网络主机,网络上存在一台路由器,该路由器有着前往预计目的主机的更优路径。ICMPv6的路由器重定向与ICMPv4的工作方式一样,而ICMPv4的路由器重定向就是用来对当前IPv4网络中的流量进行重定向的。
|
||||
|
||||
### IPv6的有状态自动配置
|
||||
|
||||
**IPv6 Stateful Autoconfiguration**
|
||||
|
||||
如同本模块先前指出的那样,有状态自动配置允许网络主机从某台网络服务器(比如通过DHCP)上收到其地址信息。IPv4和IPv6都支持这种方式。在IPv6网络中,使用DHCPv6来为IPv6主机提供有状态(及无状态)自动配置服务。**在IPv6的部署中,当某台IPv6主机收到来自本地网段上的路由器RA报文后,该主机就会检查这些数据包,以判定是否可以使用DHCPv6**。RA报文通过将那些`M`(受管理的,`Managed`)或`O`(其它方式,`Other`)位设置为`1`的方式,提供是否可以使用DHCPv6的信息。
|
||||
|
||||
在DHCP下,客户端设定为从DHCP服务器取得有关信息。而在DHCPv6下,客户端却并不知道从哪里得到这些信息,因为既可以从SLAAC,也可以从有状态的DHCPv6, 抑或从结合了SLAAC及DHCPv6两种的方式取得。
|
||||
|
||||
RA报文中的M位,指的是受管理的地址配置标志位(the Managed Address Configuration Flag bit)。在此位设置了时(也就是说该位的值为`1`时), 它指示IPv6主机要取得一个由DHCPv6服务器所提供有状态的地址,并忽略之后的`O`位。而路由器通告报文中的`O`位,指的是其它有状态配置标志位(the Other Stateful Configuration Flag bit)。当该位设置了(也就是说该位的值为`1`)后,指示IPv6主机要使用DHCPv6,来取得更多的设置项,比如DNS及WINS服务器等。
|
||||
|
||||
如某台主机未曾配置一个IPv6地址,它就可以采用下面的三种方法之一,来获得一个IPv6地址,及诸如DNS服务器地址等的其他网络设置。
|
||||
|
||||
- SLAAC -- 无状态自动配置(StateLess Address AutoConfiguration),`M`和`O`位设置为`0`。也就是没有DHCPv6信息。主机从一条RA收到所有必要信息。
|
||||
- 有状态DHCPv6 -- `M`标志位设置为`1`, 告诉主机使用DHCPv6取得所有地址和网络信息。
|
||||
- 无状态DHCPv6 -- `M`标志位设置为`0`, `O`标志位设置为`1`, 意味着主机将采用SLAAC来得到地址(从一条RA),而同时从DNS服务器取得其它信息。
|
||||
|
||||
尽管SLAAC能力是IPv6的一项优势,有状态自动配置仍然有着许多好处,包括以下这些。
|
||||
|
||||
- 相较SLAAC所提供的那些项目,有状态自动配置有着更大的控制权
|
||||
- 在SLAAC网络上,同样可以使用有状态自动配置
|
||||
- 在缺少路由器的情形下,仍然可以为网络主机提供分址
|
||||
- 通过分配新的前缀给主机,而用来对网络重新编号
|
||||
- 可用于将全部子网发布给用户侧设备(can be used to issue entire subnets to customer premise equipment,稍后会有说明)
|
||||
|
||||
### IPv6无状态自动配置
|
||||
|
||||
**IPv6 Stateless Address Autoconfiguration, SLAAC**
|
||||
|
||||
IPv6容许设备为自己配置一个IP地址,以便进行主机到主机的通信。有状态自动配置需要一台服务器来分配地址信息,对于IPv6来说,就要用到DHCPv6。有状态就是说,信息交换的细节在服务器(或路由器)上是有保存的,那么无状态就说的是没有服务器来保存这些细节了。DHCPv6既可以是有状态的,也可以是无状态的。
|
||||
|
||||
在IPv6中,SLAAC允许主机依据本地网络网段上的路由器发出的前缀通告,自己配置其单播IPv6地址。所需的其它信息(比如DNS服务器地址等)则可从DHCPv6服务器获取。IPv6中SLAAC用到的三种机制,如下所示。
|
||||
|
||||
- 前缀通告,prefix advertisement
|
||||
- 重复地址检测,DAD
|
||||
- 前缀重编号,prefix renumbering
|
||||
|
||||
**前缀通告**
|
||||
|
||||
**prefix advertisement**
|
||||
|
||||
IPv6地址前缀通告用到了ICMPv6 RA报文,而ICMPv6 RA是发往链路上的所有主机(all-hosts-on-the-local-link)的,带有多播地址`FF02::1`的ICMPv6数据包。根据IPv6的设计,仅有路由器才被允许在本地链路上通告前缀。在采行SLAAC后,就务必要记住,所用到的前缀长度,必须是64位(比如`2001:1a2b::/64`)。
|
||||
|
||||
在前缀配置之后,SLAAC用到的RA报文还包含了以下信息。
|
||||
|
||||
- IPv6前缀,the IPv6 prefix
|
||||
- 生命期,the lifetime
|
||||
- 默认路由器信息,default router information
|
||||
- 标志和/或选项字段,Flags and/or Options fields
|
||||
|
||||
就像刚才指出的那样,**IPv6前缀必须是64位**。此外,**本地网段上还可以通告多个的IPv6前缀**。在该网络网段上的主机收到IPv6前缀后,就将它们的MAC地址以`EUI-64`格式,追加到前缀后面,从而自动地配置上他们的IPv6单播地址,这在本模块的先前部分已有说明。这样就为该网段上的每台主机,都提供了一个唯一的`128`位IPv6地址。
|
||||
|
||||
SLAAC RA报文也提供了每个通告前缀的生命期数值给这些节点,生命期字段可以是从`0`到无穷的值。节点在收到前缀后,就对该前缀的生命期值进行验证,从而在生命期数值到`0`时停用该前缀。此外,如收到生命期值为无穷的某个特定前缀,网络主机就绝不会停用那个前缀。每个通告前缀又带有两个生命期值:**有效生命期值**及**首选生命期值**(the valid and preferred lifetime value)。
|
||||
|
||||
有效生命期值用于确定出该主机地址将保持多长时间的有效期。在该值超时后(也就是说到值为`0`时),带有该前缀的主机地址就成为无效地址。而首选生命期值则用于确定经由SLAAC方式配置的某个地址将保持多长时间的有效期。此值必须小于或等于在有效生命期值,同时该值通常用于前缀的重编号。
|
||||
|
||||
SLAAC RA的默认路由器,提供了其本身IPv6地址的存在情况和生命期。默认情况下,用于默认路由器的那个地址是本地链路地址(`FE80::/10`)。这样做就可以在全球单播地址发生改变时,也不会像在IPv4中那样,在某个网络被重新编号时,导致网络服务中断。
|
||||
|
||||
最后,一些标志和选项字段可被用作指示网络主机采行SLAAC或有状态自动配置。这些字段在图7.13中的RA线路捕获中有包含。
|
||||
|
||||
**重复地址检测**
|
||||
|
||||
**Duplicated Address Detection, DAD**
|
||||
|
||||
重复地址检测(DAD)是一种用在SLAAC中,在某网段上主机启动时,用到的NDP机制。DAD要求某台网络主机启动期间,在永久地配置它自己的IPv6地址之前,先要确保没有别的网络主机已经使用了它打算使用的那个地址。
|
||||
|
||||
DAD通过使用邻居询问(`135`类型的ICMPv6)及节点询问多播地址(Solicited-Node Multicast addresses),来完成这个验证。主机使用一个未指明IPv6地址(an unspecified IPv6 address, 也就是地址`::`)作为报文数据包的源地址,并将其打算使用的那个IPv6单播地址,作为目的地址,在本地网段上发送一个邻居询问ICMPv6报文数据包。如有其它主机使用着该地址,那么主机就不会自动将此地址配置为自己的地址;而如没有其他设备使用这个地址,则该主机就自动配置并开始使用这个IPv6地址了。
|
||||
|
||||
**前缀重编号**
|
||||
|
||||
**prefix renumbering**
|
||||
|
||||
最后,前缀重编号(prefix renumbering)机制允许IPv6网络从一个前缀变为另一个时,进行前缀透明重编号。与IPv4中同样的全球IP地址可由多个服务提供商进行通告不同,IPv6地址空间的严格聚合阻止了服务提供商对不属于其组织的前缀进行通告(Unlike in IPv4, where the same global IP address can be advertised by multiple providers, the strict aggregation of the IPv6 address space prevents providers from advertising prefixes that do not belong to their organization)。
|
||||
|
||||
在网络发生从一家IPv6服务提供商迁移至另一家时,IPv6前缀重编号机制,就提供了一种自一个前缀往另一前缀平滑和透明的过渡。前缀重编号使用与在前缀通告中同样的ICMPv6报文和多播地址。而前缀重编号可经由运用RA报文中包含的时间参数完成。
|
||||
|
||||
在思科IOS软件中,路由器可配置为通告带有被减少到接近0的有效和首选生命期当前前缀,这就令到这些前缀能够更快地成为无效前缀。此时再将这些路由器配置为在本地网段上通告新前缀。这样做将允许旧前缀和新前缀在同一网段上并存。
|
||||
|
||||
迁移期间,本地网段上的主机用着两个单播地址:一个来自旧的前缀,一个来自新的前缀。那些使用旧前缀的当前连接仍被处理着;但所有自主机发出的新连接,则都使用新前缀。在旧前缀超时后,就只使用新前缀了。
|
||||
|
||||
### 配置无状态DHCPv6
|
||||
|
||||
**Configuring Stateless DHCPv6**
|
||||
|
||||
为在某台路由器上配置无状态的DHCPv6, 需要完成一些简单的步骤。
|
||||
|
||||
- 创建地址池名称和其它参数, create the pool name and other parameters
|
||||
- 在某个借口上开启它, enable it on an interface
|
||||
- 修改RA设置,modify Router Advertisement settings
|
||||
|
||||
一个身份关联是分配给客户端的一些地址(an Identity Association is a collection of addresses assigned to the client)。使用到DHCPv6的每个借口都必须要有至少一个的身份关联(IA)。这里不会有CCNA考试的配置示例。
|
||||
|
||||
### 在思科IOS软件中开启IPv6路由
|
||||
|
||||
现在,你对IPv6基础知识有了扎实掌握,本模块剩下的部分将会专注于思科IOS软件中IPv6的配置了。默认下,思科IOS软件中的IPv6路由功能是关闭的。那么就必须通过使用__`ipv6 unicast-routing`这个全局配置命令__来开启IPv6路由功能。
|
||||
|
||||
在全局开启IPv6路由之后,接口配置命令`ipv6 address [ipv6-address/prefix-length | prefix-name sub-bits/prefix-length | anycast | autoconfig <default> | dhcp | eui-64 | link-local]`就可以用于配置接口的IPv6分址了。关键字`[ipv6-address/prefix-length]`用于指定分配给该接口的IPv6前缀和前缀长度。下面的配置演示了如何为一个路由器接口配置子网`3FFF:1234:ABCD:5678::/64`上的第一个地址。
|
||||
|
||||
```console
|
||||
R1(config)#ipv6 unicast-routing
|
||||
R1(config)#interface FastEthernet0/0
|
||||
R1(config-if)#ipv6 address 3FFF:1234:ABCD:5678::/64
|
||||
R1(config-if)#exit
|
||||
```
|
||||
|
||||
按照此配置,`show ipv6 interface [name]`命令就可用于验证配置的IPv6地址子网(即`3FFF:1234:ABCD:5678::/64`), 如下面的输出所示。
|
||||
|
||||
```console
|
||||
R1#show ipv6 interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
IPv6 is enabled, link-local address is FE80::20C:CEFF:FEA7:F3A0
|
||||
Global unicast address(es):
|
||||
3FFF:1234:ABCD:5678::1, subnet is 3FFF:1234:ABCD:5678::/64
|
||||
Joined group address(es):
|
||||
FF02::1
|
||||
FF02::2
|
||||
FF02::1:FF00:1
|
||||
FF02::1:FFA7:F3A0
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
|
||||
就如在本模块早先指出的那样,IPv6允许在同一接口上配置多个前缀。而如过在同一借口上配置了多个前缀,`show ipv6 interface [name] prefix`命令,就可以用来查看所有分配的前缀,以及它们各自的有效和首选生命期数值。下面的输出显示了在一个配置了多个IPv6前缀的路由器接口上,该命令所打印出的信息。
|
||||
|
||||
```console
|
||||
R1#show ipv6 interface FastEthernet0/0 prefix
|
||||
IPv6 Prefix Advertisements FastEthernet0/0
|
||||
Codes: A - Address, P - Prefix-Advertisement, O - Pool
|
||||
U - Per-user prefix, D - Default
|
||||
N - Not advertised, C - Calendar
|
||||
default [LA] Valid lifetime 2592000, preferred lifetime 604800
|
||||
AD 3FFF:1234:ABCD:3456::/64 [LA] Valid lifetime 2592000, preferred lifetime 604800
|
||||
AD 3FFF:1234:ABCD:5678::/64 [LA] Valid lifetime 2592000, preferred lifetime 604800
|
||||
AD 3FFF:1234:ABCD:7890::/64 [LA] Valid lifetime 2592000, preferred lifetime 604800
|
||||
AD 3FFF:1234:ABCD:9012::/64 [LA] Valid lifetime 2592000, preferred lifetime 604800
|
||||
```
|
||||
|
||||
> **注意:** 和早前指出的一样,有效和首选生命期数值可自默认值进行修改,以实现在应用前缀重编号时的平滑过渡。但此配置是超出CCNA范围的,所以本教程不会对其进行演示。
|
||||
|
||||
跟着接口配置命令`ipv6 prefix`的使用之后,关键字`[prefix-name sub-bits/prefix-length]`用于配置一个通用前缀(a general prefix),通用前缀指定要配置到该接口上的子网的那些前导位。这个配置也是超出当前CCNA考试要求的,本模块不会对其进行演示。
|
||||
|
||||
关键字`[anycast]`用于配置一个IPv6任意播地址。和先前指出的那样,任意播分址允许将同一个**公共地址**(the same common address)分配到多个路由器接口。主机使用从路由协议度量值上看离它们最近的任意播地址。任意播配置超出CCNA考试要求范围,不会在本模块进行演示。
|
||||
|
||||
`[autoconfig <default>]`关键字开启SLAAC。如用到该关键字,路由器将动态学习链路上的前缀,之后将`EUI-64`地址加到所有学习到的前缀上。`[default]`关键字是一个允许安装一条默认路由的可选关键字(the `<default>` keyword is an optional keyword that allows a default route to be installed)。下面的配置样例,演示了如何在某个路由器接口上开启无状态自动配置,同时额外地允许安装上默认路由。
|
||||
|
||||
```console
|
||||
R2(config)#ipv6 unicast-routing
|
||||
R2(config)#interface FastEthernet0/0
|
||||
R2(config-if)#ipv6 address autoconfig default
|
||||
R2(config-if)#exit
|
||||
```
|
||||
|
||||
按照这个配置,路由器`R2`将会监听`FastEthernet0/0`接口所在本地网段上的RA报文。该路由器将会对每个学习到的前缀,动态地配置一个`EUI-64`地址,并接着安装上指向该RA通告路由器本地链路地址的默认路由。使用`show ipv6 interface [name]`命令,即可对动态地址配置进行验证,如下面的输出所示。
|
||||
|
||||
```console
|
||||
R2#show ipv6 interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
IPv6 is enabled, link-local address is FE80::213:19FF:FE86:A20
|
||||
Global unicast address(es):
|
||||
3FFF:1234:ABCD:3456:213:19FF:FE86:A20, subnet is 3FFF:1234:ABCD:3456::/64 [PRE]
|
||||
valid lifetime 2591967 preferred lifetime 604767
|
||||
3FFF:1234:ABCD:5678:213:19FF:FE86:A20, subnet is 3FFF:1234:ABCD:5678::/64 [PRE]
|
||||
valid lifetime 2591967 preferred lifetime 604767
|
||||
3FFF:1234:ABCD:7890:213:19FF:FE86:A20, subnet is 3FFF:1234:ABCD:7890::/64 [PRE]
|
||||
valid lifetime 2591967 preferred lifetime 604767
|
||||
3FFF:1234:ABCD:9012:213:19FF:FE86:A20, subnet is 3FFF:1234:ABCD:9012::/64 [PRE]
|
||||
valid lifetime 2591967 preferred lifetime 604767
|
||||
FEC0:1111:1111:E000:213:19FF:FE86:A20, subnet is FEC0:1111:1111:E000::/64 [PRE]
|
||||
valid lifetime 2591967 preferred lifetime 604767
|
||||
Joined group address(es):
|
||||
FF02::1
|
||||
FF02::2
|
||||
FF02::1:FF86:A20
|
||||
MTU is 1500 bytes
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
|
||||
在上面的输出中,注意到尽管接口上没有配置显式的IPv6地址,还是动态地为经由侦听RA报文所发现的子网,配置了一个`EUI-64`地址。每个这些前缀的计时器,都继承自通告RA报文的那台路由器。为了进一步验证无状态自动配置,可以使用`show ipv6 route`命令,来验证到首选通告路由器本地链路地址的默认路由,如下面所演示的那样。
|
||||
|
||||
```console
|
||||
R2#show ipv6 route ::/0
|
||||
IPv6 Routing Table - 13 entries
|
||||
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
|
||||
U - Per-user Static route
|
||||
I1 - ISIS L1, I2 - ISIS L2, IA - ISIS inter area, IS - ISIS summary
|
||||
O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
|
||||
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
|
||||
S ::/0 [1/0]
|
||||
via FE80::20C:CEFF:FEA7:F3A0, FastEthernet0/0
|
||||
```
|
||||
|
||||
在命令`ipv6 address`之后,关键字`[dhcp]`用于配置该路由器接口使用有状态自动配置(也就是DHPCv6),来请求该接口的分址配置。在此配置下,有着一个额外的关键字,`[rapid-commit]`, 同样可以追加到此命令之后,以开启地址分配及其它配置信息的二报文交换快速方式(the two-message exchange method)。
|
||||
|
||||
再回到讨论主题,在`ipv6 address`命令下,关键字`[eui-64]`用于为某个接口配置一个IPv6地址,并在地址的低`64`位使用一个`EUI-64`地址而在该接口上开启IPv6处理。默认情况下,**本地链路、站点本地以及IPv6 SLAAC**都用到`EUI-64`格式来构造其各自的IPv6地址。`EUI-64`分址**将`48`位MAC地址扩展到一个`64`位地址**。通过两步实现该扩展,这两步将在下一段进行说明。**该过程就叫作SLAAC**。
|
||||
|
||||
构造`EUI-64`地址的**第一步,将值`FFFE`插入到MAC地址中间**,就将`12`个十六进制字符的`48`位MAC地址扩展到`16`个十六进制字符的`64`位了。下图7.18演示了`48`位MAC地址到`64`位EUI地址的转换。
|
||||
|
||||

|
||||
|
||||
*图7.18 -- 创建`EUI-64`地址*
|
||||
|
||||
`EUI-64`分址的下一步,涉及`64`位的第`7`位设置。**此第`7`位用于区分该MAC地址是否是唯一的**。如该位设置为`1`, 就表明该MAC地址是一个全球受管理MAC地址(a globally managed MAC address)-- 也就是说该MAC地址是有某厂商分配的。如该位设置为`0`, 就表明该MAC地址是本地分配的--就意味着该MAC地址有可能是由管理员添加的。为更进一步搞清楚此声明,MAC地址实例`02:1F:3C:59:D6:3B`就被认为是一个全球分配的MAC地址(a globally-assigned MAC address), 而MAC地址`00:1F:3C:59:D6:3B`则被看作是一个本地地址。下图7.19有演示。
|
||||
|
||||

|
||||
|
||||
*图7.19 -- 确定本地及全球MAC地址*
|
||||
|
||||
按照这样的配置,命令`show ipv6 interface`就可用于验证验证分配到接口`FastEthernet0/0`上的IPv6接口ID, 如下面的输出所示。
|
||||
|
||||
```console
|
||||
R2#show ipv6 interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
IPv6 is enabled, link-local address is FE80::213:19FF:FE86:A20
|
||||
Global unicast address(es):
|
||||
3FFF:1A2B:3C4D:5E6F:213:19FF:FE86:A20, subnet is 3FFF:1A2B:3C4D:5E6F::/64 [EUI]
|
||||
Joined group address(es):
|
||||
FF02::1
|
||||
FF02::2
|
||||
FF02::1:FF86:A20
|
||||
MTU is 1500 bytes
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
|
||||
要验证该`EUI-64`地址的构造过程,同样可以通过使用`show interface`命令,查看指定接口的MAC地址的方式,来检查该完整的IPv6地址。
|
||||
|
||||
```console
|
||||
R2#show interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
Hardware is AmdFE, address is 0013.1986.0a20 (bia 0013.1986.0a20)
|
||||
Internet address is 10.0.1.1/30
|
||||
```
|
||||
|
||||
从上面的输出可以看出,该`EUI-64`地址实际上是有效的,且是基于该接口的MAC地址。此外,该地址是全球地址,因为那个第七位是开启的(也就是改为包含的是一个非零值)。
|
||||
|
||||
最后的`[link-local]`关键字用于分配给接口一个本地链路地址。一定要记住在默认情况下,对于动态地创建出一个本地链路地址来说,接口上并不是非得要启用一个IPv6前缀。而是当在某个接口下执行了接口配置命令`ipv6 enable`时,就会以`EUI-64`分址方式,自动创建出那个接口的一个本地链路地址。
|
||||
|
||||
而如果要手动配置一个本地链路地址,就必须分配一个本地链路地址块`FE80::/10`中的地址。下面的配置实例,演示了如何在某接口上配置一个本地链路地址。
|
||||
|
||||
```console
|
||||
R3(config)#interface FastEthernet0/0
|
||||
R3(config-if)#ipv6 address fe80:1234:abcd:1::3 link-local
|
||||
R3(config-if)#exit
|
||||
```
|
||||
|
||||
按照该配置,就可用`show ipv6 interface [name]`命令验证这个手动配置的本地链路地址,如下面的输出所示。
|
||||
|
||||
```console
|
||||
R3#show ipv6 interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
IPv6 is enabled, link-local address is FE80:1234:ABCD:1::3
|
||||
Global unicast address(es):
|
||||
2001::1, subnet is 2001::/64
|
||||
Joined group address(es):
|
||||
FF02::1
|
||||
FF02::2
|
||||
FF02::1:FF00:1
|
||||
FF02::1:FF00:1111
|
||||
MTU is 1500 bytes
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
|
||||
> **注意:** 在进行手动配置本地链路地址时,如思科IOS软件侦测到另一主机正在使用一个它的IPv6地址,控制台上就会打印出一条错误消息,同时该命令将被拒绝。所以在手动配置本地链路地址时,要小心仔细。
|
||||
|
||||
### IPv6子网划分
|
||||
|
||||
**Subnetting with IPv6**
|
||||
|
||||
如你已经学到的,IPv6地址分配给机构的是一个前缀。而IPv6地址的主机部分总是`64`位的`EUI-64`, 同时**标准的**前缀通常又是`48`位或`/48`。那么剩下的`16`位,就可由网络管理员自主用于子网划分了。
|
||||
|
||||
在考虑网络分址时,因为同样的规则对IPv4和IPv6都是适用的,那就是**每个网段只能有一个网络**。不能分离地址而将一部分主机位用在这个网络,另一部分主机位用在其它网络。
|
||||
|
||||
如你看着下面图表中的分址,就能更清楚这个情况。
|
||||
|
||||
| 全球路由前缀 | 子网ID | 接口ID |
|
||||
| `48`位或`/48` | `16`位(`65535`个可能的子网) | `64`位 |
|
||||
|
||||
绝不用担心会用完每个子网的主机位,因为每个子网有超过`2`的`64`次幂的主机。任何组织要用完这些子网都是不大可能的,而就算发生了这种情况,也可以轻易地从ISP那里要一个前缀。
|
||||
|
||||
比如我们说分得了全球路由前缀(the global routing prefix)`0:123:abc/48`。该地址占用了一个完整IPv6地址的三个区段,而每个区段或4位16进制字符(quartet)则是`16`位,那么到目前为止就用了`48`位。主机部分则需要`64`位,留下`16`位用于子网的分配。
|
||||
|
||||
可以简单的从零(子网零也是合法的)开始以十六进制数下去。对于主机来说,也可以这样做,除非比如说想要将头几个地址留给网段上的服务器。
|
||||
|
||||
用一个更简单的前缀来打比方吧 -- `2001:123:abc/48`。第一个子网就是全零,当然,每个子网上的第一台主机也可以是全零,这也是合法的(只要不保留IPv6中的全`0s`和全`1s`地址)。又会将全零主机表示为缩写形式的`::`。那么这里就有开头的几个子网及主机地址。
|
||||
|
||||
| 全球前缀 | 子网 | 第一个地址 |
|
||||
| -- | -- | -- |
|
||||
| `2001:123:abc` | `0000` | `::` |
|
||||
| `2001:123:abc` | `0001` | `::` |
|
||||
| `2001:123:abc` | `0002` | `::` |
|
||||
| `2001:123:abc` | `0003` | `::` |
|
||||
| `2001:123:abc` | `0004` | `::` |
|
||||
| `2001:123:abc` | `0005` | `::` |
|
||||
| `2001:123:abc` | `0006` | `::` |
|
||||
| `2001:123:abc` | `0007` | `::` |
|
||||
| `2001:123:abc` | `0008` | `::` |
|
||||
| `2001:123:abc` | `0009` | `::` |
|
||||
| `2001:123:abc` | `000A` | `::` |
|
||||
| `2001:123:abc` | `000B` | `::` |
|
||||
| `2001:123:abc` | `000C` | `::` |
|
||||
| `2001:123:abc` | `000D` | `::` |
|
||||
| `2001:123:abc` | `000E` | `::` |
|
||||
| `2001:123:abc` | `000F` | `::` |
|
||||
| `2001:123:abc` | `0010` | `::` |
|
||||
| `2001:123:abc` | `0011` | `::` |
|
||||
| `2001:123:abc` | `0012` | `::` |
|
||||
| `2001:123:abc` | `0013` | `::` |
|
||||
| `2001:123:abc` | `0014` | `::` |
|
||||
| `2001:123:abc` | `0015` | `::` |
|
||||
| `2001:123:abc` | `0016` | `::` |
|
||||
| `2001:123:abc` | `0017` | `::` |
|
||||
|
||||
我肯定你已经注意到这与IPv4分址规则有所不同,不同之处就在与**可以使用全零子网,同时子网的第一个地址总是全零**。请看看下面这个简单的网络拓扑,可以照这种方式进行子网分配。
|
||||
|
||||

|
||||
|
||||
*图7.20 -- IPv6子网分配*
|
||||
|
||||
就是那么容易吗?如回忆一下IPv4子网划分章节,要完成子网划分,以及算出有多少主机多少子网并记住要排除一些地址,简直就是一场噩梦。**IPv6子网划分就容易得多**。你分配到的不一定是一个`48`位前缀,可能是一个用于家庭网络的`/56`或更小的前缀,但原则是一样的。也可以自位界限以外进行子网划分,但这是很少见的,且如果思科要你用考试中的很段时间完成那么深的细节,也是不公平的(You can also subnet off the bit boundary, but this would be most unusual and unfair of Cisco to expect you to go into that amount of detail in the short amount of time you have in the exam)。还好的是,考试不是要你考不过,但谁又知道呢(Hopefully, the exam won't be a mean attempt to catch you out, but you never know)。为以防万一,这里给出一个有着`/56`前缀长度的地址示例。
|
||||
|
||||
`2001:123:abc:8bbc:1221:cc32:8bcc:4231/56`
|
||||
|
||||
该前缀是`56`位,转换一下就是`14`个十六进制数位(`14x4=56`), 那么就知道了该前缀将带到一个`4`位字节(quartet)的中间。**这里有个坑**。在前缀终止前,必须要将该`4`位字节的第`3`和`4`位置为零。
|
||||
|
||||
`2001:123:abc:8b00:0000:0000:0000:0000/56`
|
||||
|
||||
上面对位界限分离的地方进行了加粗(I've made the quartet bold where the bit boundary is broken)。在匆忙中及考试中时间上的压力下,可能会完全忘记这重要的一步。请记住也要将下面这个地址(第一个子网上的第一台主机)写作这样。
|
||||
|
||||
`2001:123:abc:8b00::/56`
|
||||
|
||||
如他们硬要在考试中把你赶出去,就可能会试着让你把那两个零从位界限分离处之前的`4`位字节中去掉(If they do try to catch you out in the exam, it would probably be an attempt to have you remove the trailing zeros from the quartet before the bit boundary is broken)。
|
||||
|
||||
`2001:123:abc:8b::/56`
|
||||
|
||||
那么上面这个缩写就是非法的了。
|
||||
|
||||
也可以从主机部分借用位来用于子网划分,但绝没有理由这么做,同时这么做也会破坏采行发明IPv6而带来的可资利用的那些众多特性的能力,包括SLAAC(You can steal bits from the host portion to use for subnets, but there should never be a reason to and it would break the ability to use many of the features IPv6 was invented to utilise, including stateless autoconfiguration)。
|
||||
|
||||
## IPv6和IPv4的比较
|
||||
|
||||
**IPv6 Compared to IPv4**
|
||||
|
||||
一名网络工程师应有一幅IPv6比起IPv4所带来众多优势的图景。看着IPv6的增强,可以总结出下面这些优势。
|
||||
|
||||
- IPv6有着一个扩展的地址空间,从`32`位扩展到了`128`位, IPv6 has an expanded address space, from 32 bits to 128bits
|
||||
- IPv6使用十六进制表示法,而不是IPv4中的点分十进制表示法, IPv6 uses hexadecimal notation instead of dotted-decimal notation(as in IPv4)
|
||||
- 因为采用了扩充的地址空间,IPv6地址是全球唯一地址,从而消除了NAT的使用需求, IPv6 addresses are globally unique due to the extended address space, eliminating the need for NAT
|
||||
- IPv6有着一个固定的头部长度(`40`字节),允许厂商在交换效率上进行提升, IPv6 has a fixed header length(40 bytes), allowing vendors to improve switching efficiency
|
||||
- IPv6通过在IPv6头部和传输层之间放入扩展头部,而实现对一些增强选项(这可以提供新特性)的支持, IPv6 supports enhanced options(that offer new features)by placing extension headers between the IPv6 header and the Transport Layer header
|
||||
- IPv6具备地址自动配置的能力,提供无需DHCP服务器的IP地址动态分配, IPv6 offers address autoconfiguration, providing for dynamic assignment of IP addresses even without a DHCP server
|
||||
- IPv6具备对流量打标签的支持, IPv6 offers support for labeling traffic flows
|
||||
- IPv6有着内建的安全功能,包括经由`IPSec`实现的认证和隐私保护功能等, IPv6 has security capabilities built in, including authentication and privacy via IPSec
|
||||
- IPv6具备在往目的主机发送数据包之前的路径MTU发现功能,从而消除碎片的需求, IPv6 offers MTU path discovery before sending packets to a destination, eliminating the need for fragmentation
|
||||
- IPv6支持站点多处分布,IPv6 supports site multi-homing
|
||||
- IPv6使用ND(邻居发现,Neighbor Discovery)协议取代ARP,IPv6 uses the ND protocol instead of ARP
|
||||
- IPv6使用AAAA DNS记录,取代IPv4中的A记录, IPv6 uses AAAA DNS records instead of A records (as in IPv4)
|
||||
- IPv6使用站点本地分址,取代IPv4中的`RFC 1918`, IPv6 uses Site-Local addressing instead of RFC 1918(as in IPv4)
|
||||
- IPv4和IPv6使用不同的路由协议, IPv4 and IPv6 use different routing protocols
|
||||
- IPv6提供了任意播分址, IPv6 provides for Anycast addressing
|
||||
|
||||
## 第七天的问题
|
||||
|
||||
1. IPv6 addresses must always be used with a subnet mask. True or false?
|
||||
2. Name the three types of IPv6 addresses.
|
||||
3. Which command enables IPv6 on your router?
|
||||
4. The `0002` portion of an IPv6 address can be shortened to just 2. True or false?
|
||||
5. How large is the IPv6 address space?
|
||||
6. With IPv6, every host in the world can have a unique address. True or false?
|
||||
7. IPv6 does not have natively integrated security features. True or false?
|
||||
8. IPv6 implementations allow hosts to have multiple addresses assigned. True or false?
|
||||
9. How can the broadcast functionality be simulated in an IPv6 environment?
|
||||
10. How many times can the double colon (`::`) notation appear in an IPv6 address?
|
||||
|
||||
## 第七天问题答案
|
||||
|
||||
1. False.
|
||||
2. Unicast, Multicast, and Anycast.
|
||||
3. The `ipv6 unicast-routing`
|
||||
4. True.
|
||||
5. 128 bits.
|
||||
6. True.
|
||||
7. False.
|
||||
8. True.
|
||||
9. By using Anycast.
|
||||
10. One time.
|
||||
|
||||
## 第七天实验
|
||||
|
||||
### IPv6概念实验
|
||||
|
||||
**IPv6 概念实验**
|
||||
|
||||
在一对直接连接的思科路由器上,对在本模块中提到的IPv6概念和命令,进行测试。
|
||||
|
||||
- 在两台路由器上都开启IPv6全球单播路由
|
||||
+ 在每个连接的接口上手动配置一个IPv6地址,比如下面这样。
|
||||
- 在路由器R1的连接接口上配置`2001:100::1/64`
|
||||
- 在路由器R2的连接接口上配置`2001:100::2/64`
|
||||
- 使用命令`show ipv6 interface`和`show ipv6 interface prefix`对配置进行验证
|
||||
- 测试直接`ping`的连通性
|
||||
- 使用IPv6无状态自动配置(`ipv6 address autoconfig default`)进行重新测试
|
||||
- 使用`EUI-64`地址(IPv6地址`2001::/64` `EUI-64`)进行重新测试
|
||||
- 硬编码一个借口本地链路地址: `ipv6 address fe80:1234:adcd:1::3 link-local`
|
||||
- 查看IPv6路由表
|
||||
|
||||
### 十六进制转换及子网划分练习
|
||||
|
||||
**Hex Conversion and Subnetting Practice**
|
||||
|
||||
请把今天剩下的时间用于练习这些重要的题目上。
|
||||
|
||||
- 将十进制转换成十六进制(随机数字)
|
||||
- 将十六进制转换成十进制(随机数字)
|
||||
- IPv6子网划分(随机网络和场景)
|
||||
|
||||
@@ -1,269 +0,0 @@
|
||||
# 第8天 IPv4与IPv6共存的网络环境
|
||||
|
||||
**Integrating IPv4 and IPv6 Network Environments**
|
||||
|
||||
___
|
||||
|
||||
Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。
|
||||
|
||||
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 [捐赠译者](https://github.com/gnu4cn/buy-me-a-coffee)。
|
||||
|
||||
___
|
||||
|
||||
## 第8天任务
|
||||
|
||||
- 阅读下面的理论课文
|
||||
- 阅读ICND1记诵手册
|
||||
|
||||
如同在前一课程模块中所学到的那样,通过从IPv4迁移到IPv6,就能收到数不清的好处。回顾一下,这些优势包括:
|
||||
|
||||
- 简化了的IPv6数据包头部
|
||||
|
||||
- 更大的地址空间
|
||||
|
||||
- IPv6寻址层次,IPv6 addressing hierarchy
|
||||
|
||||
- IPv6的扩展能力,IPv6 extensibility
|
||||
|
||||
- IPv6消除了广播,IPv6 Broadcast elimination
|
||||
|
||||
- 无状态的自动配置,Stateless autoconfiguration
|
||||
|
||||
- 集成了移动性,Integrated mobility
|
||||
|
||||
- 集成了安全增强,Integrated enhanced security
|
||||
|
||||
此课程模块对应了一下CCNA大纲要求:
|
||||
|
||||
- 掌握IPv6与IPv4共同运作,比如双栈部署时,所需的技术要求(Describe the technological requirements for running IPv6 in conjunction with IPv4, such as dual-stack implementation)。
|
||||
|
||||
在有关IPv6的第7天课程中,专门着重于一个纯IPv6环境,并掌握了IPv6运作原理,还学习了如何配置不同路由协议,来支持IPv6的路由,且在思科IOS软件中进行了验证。尽管对IPv6本身的扎实掌握是重要的,但现实情形在于IPv4仍是当前所使用的占主导地位的互联网协议。因此,在考虑完全迁移到纯IPv6环境时,对如何将两种不同协议栈共同运作,是必要的。
|
||||
|
||||
尽管迁移到IPv6环境将提供到前面提到的那些优势,当下的情况在于并非所有可寻址的设备,都支持IPv6, 那么为了那些运行不同协议栈的网络设备,使用上同一网络设施,就要求在同一网络中IPv6与IPv4共存。IPv4与IPv6的集成与共存策略,可被分为以下三个大的类别:
|
||||
|
||||
- 双栈部署,Dual-stack implementation
|
||||
|
||||
- 隧道技术,Tunnelling
|
||||
|
||||
- 协议转换,Protocol translation
|
||||
|
||||
在网际网络设备和主机同时用到两种协议栈(也就是IPv4和IPv6)时,就要求采用双栈部署策略。双栈部署令到主机能够同时使用IPv4或IPv6与其它主机建立端到端的IP会话(Dual-stack implementation is required when internetwork devices and hosts use both protocol stacks(i.e., IPv4 and IPv6). Dual-stack implementation allows the hosts to use either IPv4 or IPv6 to establish end-to-end IP sessions with other hosts)。
|
||||
|
||||
> **注意:** 双栈部署并不是说那些仅支持IPv4或仅支持IPv6的主机,具备与其它主机通信的能力。要实现此特性,就需要其它的协议与机制。双栈仅指主机(或设施)能够同时支持IPv4协议栈**及**IPv6协议栈。
|
||||
|
||||
在双栈部署无法应用的情形中,就有可能将IPv6数据要精油IPv4网络进行隧道处理(in situations where Dual-stack implementation can not be used, it is posssible to tunnel the IPv6 packets over IPv4 networks),使用一些隧道来将IPv6数据包封装在IPv4数据包中,以令到这些IPv6数据包进行跨越尚无或是还没有原生支持IPv6的网络部分。这样做允许一些IPv6"岛"(IPv6 "islands")通过现行的IPv4设施之间相互通信。
|
||||
|
||||
> **注意:** 在运用隧道技术时,为将IPv6数据包经由IPv4设施进行隧道化传输,节点或互联网络的设备必须支持双栈(with tunnelling, nodes or internetwork devices must support dual-stack in order to tunnel IPv6 packets over the IPv4 infrastructure)。
|
||||
|
||||
最后,在某些情况下,有可能出现某些仅IPv4的环境,需要与仅IPv6的环境进行通信,以及反过来的情况。那么在此种情形下,双栈技术或隧道技术部署都不能用到,因此就必须启用IPv4与IPv6之间的协议转换。尽管此中方案也是支持的,但对于集成Ipv4与IPv6网络时,其是最不可选的(while supported, this is the least desirable method of integrating IPv4 and IPv6 networks)。不过因为此方案仍被支持,那么掌握如何实现此种方案,仍是重要的。
|
||||
|
||||
这个课程模块的剩余部分,将详细地介绍集成IPv4与IPv6网络的**双栈部署**与**隧道技术**。包括特定于思科IOS软件的一些配置示例。
|
||||
|
||||
## IPv4与IPv6的双栈部署
|
||||
|
||||
在双栈部署方案下,尽管某些主机有着采用IPv4和IPv6两种协议栈的能力,但在确定何时采用IPv6而不是IPv4协议栈时,这些主机仍需一些帮助。幸运的是,有两种方法可以实现,这两种方法如下:
|
||||
|
||||
- 第一种方法需要用户手动配置。如用户知道目的IPv6主机的IPv6地址,就可以用此IPv6地址,自其双栈主机手动建立一此IPv6会话。尽管此方式可以良好运作,但要记住多台主机的IPv4及IPv6地址,会十分繁琐。
|
||||
|
||||
- 那么第二种方式就需要使用某种命名服务,比如DNS。使用此种方法,就要同时使用IPv4和IPv6地址,来配置完全合格的域名(Full Qualified Domain Names, FQDNs),比如[www.howtonetwork.com](http://www.howtonetwork.com)。FQDN是由一个IPv4协议栈的`A`记录(an `A` record for the IPv4 protocol stack), 以及一个IPv6协议栈的`AAAA`记录表示的,这样的FQDN就令到DNS服务器既可使用IPv4, 又可使用IPv6进行查询了。
|
||||
|
||||
### 在思科IOS路由器中部署双栈支持
|
||||
|
||||
尽管对那些不同厂商的具备双栈部署支持的不同类型主机的不同配置方式的讨论,是超出CCNA考试要求范围的。但作为一名未来的网络工程师,掌握如何在思科IOS软件下部署各种双栈方案,是强制性的(imperative to understand how to implement dual-stack solutions in Cisco IOS software)。在思科IOS路由器中,双栈运作的启用,通过简单地在路由器接口上配置好IPv4及IPv6即可。
|
||||
|
||||
通过在接口配置命令`ip address [address] [mask]`后添加`[secondary]`关键字,就可以为接口指定多个的IPv4地址。对于IPv6来说,是不需要`[secondary]`关键字的,因为使用第`7`天课程中所介绍的接口配置命令`ipv6 address`,就可以为每个接口配置多个前缀。下面的配置示例,演示了如何在单一的路由器接口上配置多个IPv4地址和IPv6地址及前缀:
|
||||
|
||||
```console
|
||||
R3(config)#ipv6 unicast-routing
|
||||
R3(config)#interface FastEthernet0/0
|
||||
R3(config-if)#ip address 10.0.0.3 255.255.255.0
|
||||
R3(config-if)#ip address 10.0.1.3 255.255.255.0 secondary
|
||||
R3(config-if)#ip address 10.0.2.3 255.255.255.0 secondary
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:1::3/64
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:2::3/64
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:3::3/64
|
||||
R3(config-if)#ipv6 enable
|
||||
R3(config-if)#exit
|
||||
```
|
||||
|
||||
> **注意:** 尽管在思科IOS软件中IPv4路由默认是开启的,但IPv6路由却是默认关闭的,所以必须显式地开启。
|
||||
|
||||
依据这些IPv4与IPv6地址的配置,就可以通过简单地对查看路由器配置,来验证这些配置,如下面的输出所示:
|
||||
|
||||
```console
|
||||
R3#show running-config interface FastEthernet0/0
|
||||
Building configuration...
|
||||
Current configuration : 395 bytes
|
||||
!
|
||||
interface FastEthernet0/0
|
||||
ip address 10.0.1.3 255.255.255.0 secondary
|
||||
ip address 10.0.2.3 255.255.255.0 secondary
|
||||
ip address 10.0.0.3 255.255.255.0
|
||||
ipv6 address 3FFF:1234:ABCD:1::3/64
|
||||
ipv6 address 3FFF:1234:ABCD:2::3/64
|
||||
ipv6 address 3FFF:1234:ABCD:3::3/64
|
||||
ipv6 enable
|
||||
end
|
||||
```
|
||||
|
||||
而要查看具体的IPv4及IPv6接口参数,只需使用思科IOS软件的`show ip interface [name]`或`show ipv6 interface [name]`命令即可。下面是`Fastethernet0/0`接口上`show ip interface`的输出:
|
||||
|
||||
```console
|
||||
R3#show ip interface FastEthernet0/0 | section address
|
||||
Internet address is 10.0.0.3/24
|
||||
Broadcast address is 255.255.255.255
|
||||
Helper address is not set
|
||||
Secondary address 10.0.1.3/24
|
||||
Secondary address 10.0.2.3/24
|
||||
Network address translation is disabled
|
||||
```
|
||||
|
||||
下面的输出则演示了上一示例中用到的同样的`Fastethernet0/0`接口的`show ipv6 interface`命令,所打印出的信息:
|
||||
|
||||
```console
|
||||
R3#show ipv6 interface FastEthernet0/0 | section address
|
||||
IPv6 is enabled, link-local address is FE80::213:19FF:FE86:A20
|
||||
Global unicast address(es):
|
||||
3FFF:1234:ABCD:1::3, subnet is 3FFF:1234:ABCD:1::/64
|
||||
3FFF:1234:ABCD:2::3, subnet is 3FFF:1234:ABCD:2::/64
|
||||
3FFF:1234:ABCD:3::3, subnet is 3FFF:1234:ABCD:3::/64
|
||||
Joined group address(es):
|
||||
FF02::1
|
||||
FF02::2
|
||||
FF02::5
|
||||
FF02::6
|
||||
FF02::9
|
||||
FF02::1:FF00:3
|
||||
Hosts use stateless autoconfig for addresses.
|
||||
```
|
||||
|
||||
### 思科IOS软件中配置静态IPv4及IPv6主机地址
|
||||
|
||||
思科IOS软件通过使用全局配置命令`ip host [name] [v4-address]`及`ipv6 host [name] [v6-address]`, 而提供了对相应的静态IPv4与IPv6主机地址配置的支持。下面的示例演示了在思科IOS软件中,如何配置静态IPv4及IPv6的主机名字与地址:
|
||||
|
||||
```console
|
||||
R1(config)#ip host TEST-HOST 10.0.0.3
|
||||
R1(config)#ipv6 host TEST-HOST 3FFF:1234:ABCD:1::3
|
||||
```
|
||||
|
||||
该静态IPv4与IPv6主机配置可使用`show hosts`命令进行验证,下面打印出了改命令的输出:
|
||||
|
||||
```console
|
||||
R1#show hosts
|
||||
...
|
||||
[Truncated Output]
|
||||
...
|
||||
Host Port Flags Age Type Address(es)
|
||||
TEST-HOST None (perm, OK) 0 IP 10.0.0.3
|
||||
TEST-HOST None (perm, OK) 0 IPv6 3FFF:1234:ABCD:1::3
|
||||
```
|
||||
|
||||
在同一主机同时配置一个IPv4及IPv6地址时,思科IOS软件将使用IPv6地址。如有使用DNS,那么在主机同时配置了IPv6及IPv4 DNS服务器时,该双栈主机将先搜寻`AAAA`(IPv6)记录,并(在查询不到时)回滚到`A`记录(IPv4)(If DNS is used, the dual-stack host will first search `AAAA`(IPv6) records and then fall back to the `A` records(IPv4) when configured with both IPv6 and IPv4 DNS servers)。可想下面这样通过执行一次简单的到先前配置的静态主机`TEST-HOST`的`ping`操作,对此默认行为进行验证:
|
||||
|
||||
```console
|
||||
R1#ping test-host repeat 10
|
||||
Type escape sequence to abort.
|
||||
Sending 10, 100-byte ICMP Echos to 3FFF:1234:ABCD:1::3, timeout is 2 seconds:
|
||||
!!!!!!!!!!
|
||||
Success rate is 100 percent (10/10), round-trip min/avg/max = 0/1/4 ms
|
||||
```
|
||||
|
||||
### 在思科IOS软件中配置IPv4及IPv6的DNS服务器
|
||||
|
||||
思科IOS软件中IPv4与IPv6 DNS服务器的配置,都依然是使用全局配置命令`ip name-server [address]`。不过这条命令现在已修改为允许将一个IPv4或IPv6地址,指定为DNS服务器的IP地址。下面的示例演示了如何将路由器配置为同时使用一台IPv4及IPv6 DNS服务器:
|
||||
|
||||
```console
|
||||
R1(config)#ip name-server ?
|
||||
A.B.C.D Domain server IP address (maximum of 6)
|
||||
X:X:X:X::X Domain server IP address (maximum of 6)
|
||||
R1(config)#ip name-server 3FFF:1234:ABCD:1::2
|
||||
R1(config)#ip name-server 192.168.1.2
|
||||
```
|
||||
|
||||
> **注意:** 正如先前提到的,当在同一路由器上同时配置了IPv4及IPv6 DNS服务器时,路由器将首先查找`AAAA`记录(也就是IPv6)。在如果未找到`AAAA`记录,主机就会查找一条`A`记录,以与该主机名进行通信。
|
||||
|
||||
## 经由IPv4网络对IPv6数据报进行隧道传输
|
||||
|
||||
**Tunnelling IPv6 Datagrams across IPv4 Networks**
|
||||
|
||||
通道技术,也就是集成IPv4与IPv6网络的第二种方法,是将IPv6数据包进行封装并通过IPv4网络发送的。为了对本小节中即将说到的几种不同隧道机制进行支持,思科IOS的边缘路由器(Cisco IOS edge routers)必须具有双栈部署(译者注:要配置IPv4和IPv6地址, 并开启IPv6路由),以令到IPv6数据包能够以IPv4数据包方式进行封装,且在终端路由器(the terminating router)处被解封装。需要注意的是,中途的那些路由器(intermediate routers)是无需运行IPv6的。也就是说,这些路由器只需简单的仅IPv4路由器。下图8.1演示了一个典型的隧道技术部署:
|
||||
|
||||

|
||||
*图 8.1 -- 经由IPv4网络进行IPv6数据包的隧道传输*
|
||||
|
||||
参考图8.1, 假设那台IPv6 `Host 1`正在将数据报发送给IPv6 `Host 2`, 那么在这些数据包通过该网络时,会顺序发生下面这些事件:
|
||||
|
||||
1. IPv6 `Host 1`将那些以IPv6 `Host 2`为目的的IPv6数据包,发送到其默认网关,也就是路由器`R4`。这些数据包是原生的、在数据包头部包含了IPv6源地址及目的地址的IPv6数据包。
|
||||
|
||||
2. `R4`是一台双栈路由器。其LAN接口已开启了IPv6, 同时其WAN接口已开启了IPv4。R4有着一个配置在其WAN接口和`R1`的WAN接口,`R1`也是一台双栈路由器, 之间的隧道。在收到IPv6数据包后,`R4`就将它们以IPv4数据包格式进行封装,并转发给`R2`。这些数据包的目的地址被设置为`R1`, 同时该路由器(`R4`)将IPv4头的值设置为41, 以表明IPv6数据包是以IPv4数据包形式封装的。
|
||||
|
||||
3. `R2`收到这些IPv4数据包,并简单地运用IPv4头部中的目的地址,将它们路由或转发到其最终目的地。
|
||||
|
||||
4. `R3`从`R2`处收到这些IPv4数据包,并简单地运用IPv4头部中的目的地址,将它们路由或转发到其最终目的地。
|
||||
|
||||
5. 最终路由器`R1`,也是该隧道的出口,接收到这些原生的IPv4数据包并将其解封装,从而仅剩下IPv6数据包。于是该路由器就该这些IPv6数据包转发给`Host 2`。
|
||||
|
||||
封装与解封装过程,对这两台主机以及隧道两端(the tunnel endpoints)之间的中间那些路由器来说,是透明的。在以IPv4数据包进行IPv6数据包的隧道传输上,有着多种方式(参见后面)。因为超出了CCNA考试要求,这里不会涉及任何具体配置。
|
||||
|
||||
下面列出了一些其它的隧道方式。思科可能会期望你知道有着这些方式,但不会出有关这些方式如何运作的题目。
|
||||
|
||||
- 静态的(手动配置的)IPv6隧道传输,Static(manually configured) IPv6 tunnelling
|
||||
|
||||
- 6to4 隧道技术,6to4 tunnelling
|
||||
|
||||
- 自动的兼容IPv4隧道技术,Automatic IPv4-compatible tunnelling
|
||||
|
||||
- ISATAP 隧道技术,ISATAP tunnelling
|
||||
|
||||
- 通用路由封装隧道技术,Generic Routing Encapsulation tunnelling
|
||||
|
||||
|
||||
## 第8天问题
|
||||
|
||||
1. Name three IPv4 to IPv6 transition mechanism classes.
|
||||
2. `_______` implementation is required when internetwork devices and hosts use both protocol stacks (i.e., IPv4 and IPv6) at the same time.
|
||||
3. With dual-stack implementation, name two methods that help hosts decide when to use the IPv6 protocol stack instead of the IPv4 protocol stack.
|
||||
4. While IPv4 routing is enabled by default in Cisco IOS software, IPv6 routing is disabled by default and must be explicitly enabled. True or false?
|
||||
5. Name a command that will provide IPv6 interface parameters.
|
||||
6. The static IPv4 and IPv6 host configuration can be validated using the `_______` command.
|
||||
7. Which command is used to configure an IPv6 DNS server?
|
||||
8. `_______` entails encapsulating the IPv6 packets or datagrams and sending them over IPv4 networks.
|
||||
|
||||
## 第8天答案
|
||||
|
||||
1. Dual-stack implementation, tunnelling, and protocol translation.
|
||||
2. Dual-stack.
|
||||
3. Manual configuration and naming service.
|
||||
4. True.
|
||||
5. The `show ipv6 interface` command.
|
||||
6. `show hosts`.
|
||||
7. The `ip name-server` command.
|
||||
8. Tunnelling.
|
||||
|
||||
## 第8天实验
|
||||
|
||||
### IPv4 - IPv6 基础集成实验
|
||||
|
||||
在两台直连的思科路由器上,对本课程模块中讲到的一些IPv6概念与命令进行测试:
|
||||
|
||||
- 在设备上开启IPv6单播路由,并在直连接口上同时配置IPv4及IPv6地址
|
||||
|
||||
- 使用命令`show interface`及`show ipv6 interface`, 对该配置进行验证
|
||||
|
||||
- 为远端接口地址配置IPv4及IPv6主机,configure IPv4 and IPv6 hosts for remote interface addresses
|
||||
|
||||
- 在设备上验证这些主机配置(`show`命令)
|
||||
|
||||
- 在设备之间通过这些主机名字,进行`ping`操作
|
||||
|
||||
- 在两台路由器上配置IPv4及IPv6的DNS服务器
|
||||
|
||||
### IPv4 - IPv6 隧道技术实验
|
||||
|
||||
在家庭网络环境下,重现“通过IPv4进行IPv6的隧道传输”小节的场景(包括所有的机制)。要依循该小节中所呈现的事件顺序。可访问[www.in60days.com](http://www.in60days.com/),看看作者是如何完成这个实验的。
|
||||
940
d09-ACL.md
@@ -1,940 +0,0 @@
|
||||
# 第9天 访问控制清单
|
||||
|
||||
**Access Control Lists**
|
||||
|
||||
___
|
||||
|
||||
Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。
|
||||
|
||||
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 [捐赠译者](https://github.com/gnu4cn/buy-me-a-coffee)。
|
||||
|
||||
___
|
||||
|
||||
## 第九天的任务
|
||||
|
||||
- 阅读今天的课文
|
||||
- 完成今天的实验
|
||||
- 阅读ICND1记诵指南
|
||||
- 在[subnetting.org](http://www.subnetting.org)上花15分钟
|
||||
|
||||
和子网划分及VLSM一样,访问控制清单(access control lists, ACL)对于新CCNA学员来说,也是一大难点(one of the bugbear subjects)。有关ACL的问题包括,学习相关的IOS配置命令、理解ACL规则(包括隐式的`deny all`规则),以及掌握端口号及协议类型。
|
||||
|
||||
与其它CCNA科目一样,应该在学习过程中一次完成一个小部分,在路由器上使用所见到的每个命令,并完成许多实验。
|
||||
|
||||
今天你将学到以下内容。
|
||||
|
||||
- ACL基础
|
||||
- 标准ACLs,扩展ACLs, 以及命名ACLs
|
||||
- ACL 规则
|
||||
- 反掩码(wildcard masks)
|
||||
- ACL的配置
|
||||
- ACLs 故障排除
|
||||
|
||||
本课程对应了以下CCNA大纲要求。
|
||||
|
||||
+ 描述ACLs的类型、特性及应用
|
||||
- 标准ACLs, standard
|
||||
- 序列号, sequence numbers
|
||||
- ACLs的编辑, editing
|
||||
- 扩展的ACLs, extended
|
||||
- 命名的ACLs, named
|
||||
- 编号的ACLs, numbered
|
||||
- 日志选项, log option
|
||||
- 在某个网络环境下配置并验证ACLs
|
||||
|
||||
## ACL基础
|
||||
|
||||
**ACL Basics**
|
||||
|
||||
**ACLs用于过滤那些通过路由器的流量**。没有那个网络是会让任何流量都进入或流出该网络的。
|
||||
|
||||
**在流量过滤的同时,ACLs 还可用于对NAT地址池的引用,及对调试命令进行过滤(filter your debugging commands), 以及对路由地图进行过滤(这是超出CCNA大纲要求的)**。
|
||||
|
||||
依据所配置的ACL类型,可实现基于源网络/IP地址的过滤、基于目的网络/IP地址的过滤、基于协议或基于端口号的过滤。可在路由器的任何接口,包括Telnet端口,上应用ACLs。
|
||||
|
||||
下面是3中主要的ACLs类型。
|
||||
|
||||
- 标准的编号ACLs
|
||||
- 扩展的编号ACLs
|
||||
- 标准或扩展的命名ACLs
|
||||
|
||||
**标准的编号ACLs是可以应用到路由器上的最为基本的ACL形式**。它们是最易于配置的,因此其可用的过滤有着最大的限制。**它们仅能依据源IP地址或源网络进行过滤**。识别标准ACL的方法就是看配置行的前导数字;标准ACLs的该数字为`1`到`99`。
|
||||
|
||||
**扩展的编号ACLs可以有多得多的粒度, 但配置和故障排除起来会更难应付。**它们可以对某个目的或源IP地址或网络、某种协议类型以及某个端口号进行过滤(they can filter a destination or source IP address or network, a protocol type, and a port number)。可用于配置扩展ACLs的编号为`100`到`199`(包含`100`和`199`)。
|
||||
|
||||
**命名ACLs允许给某过滤清单一个名称,而不是编号**。这就令到在路由器配置中更易于区别这些ACLs了。命名ACLs可以是标准及扩展ACLs; 在该ACLs的初始化配置行处,可以选择其作为标准ACL还是扩展ACL。
|
||||
|
||||
为在CCNA考试中取得成功,并成为一名思科工程师,你需要理解以下内容。
|
||||
|
||||
- 端口号,port numbers
|
||||
- ACL规则,ACL rules
|
||||
- ACLs的命令语法,command syntax for ACLs
|
||||
|
||||
## 端口号,Port Numbers
|
||||
|
||||
如要通过CCNA考试,以及要在实际网络上工作,就必须要记住这些常见的端口号。在客户盯着你做事时,去查一下常见端口号是不可能的。这里有些你会碰到且需掌握的一些最常见的端口号。
|
||||
|
||||
<table>
|
||||
<tr><th>端口</th><th>服务</th><th>端口</th><th>服务</th></tr>
|
||||
<tr><td>`20`</td><td>FTP数据</td><td>`80`</td><td>HTTP</td></tr>
|
||||
<tr><td>`21`</td><td>FTP控制</td><td>`110`</td><td>POP3</td></tr>
|
||||
<tr><td>`22`</td><td>SSH</td><td>`119`</td><td>NNTP</td></tr>
|
||||
<tr><td>`23`</td><td>Telnet</td><td>`123`</td><td>NTP</td></tr>
|
||||
<tr><td>`25`</td><td>SMTP</td><td>`161/162`</td><td>SNMP</td></tr>
|
||||
<tr><td>`53`</td><td>DNS</td><td>`443`</td><td>HTTPS(带有SSL的HTTP)</td></tr>
|
||||
<tr><td>`69`</td><td>TFTP</td><td></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
## 访问控制清单规则,Access Control List Rules
|
||||
|
||||
这是最难掌握的部分之一。我从没有在哪本思科手册中见到里面曾写过一条完整的规则清单。仅有一些手册对其简单概过或是稍加解释,另外一些则完全不讲。难点就在于这些规则一直都在用,但到目前为止你都是通过试误法发现的它们(the difficulty is that the rules always apply but unitil now, you found them only by trial and error)。下面就是你需要知道的这些规则了。
|
||||
|
||||
### ACL规则一 -- 在每个接口的每个方向,只使用一条ACL
|
||||
|
||||
**Use only one ACL per interface per direction**
|
||||
|
||||
这么做是很明智的。在同一接口上,有多条ACLs去做不同的事情,大概不是你想要的。简单地配置一条ACL,来完成需要完成的事情,而不是将过滤器分散到两条或多条的清单中。本应将“每个协议(per protocol)”加入到此规则中,因为这里是可以包含IPX的访问控制清单的,不过在现代网络中,IP已成为唯一的协议了。
|
||||
|
||||

|
||||
|
||||
*图9.1 -- 接口上的一个方向仅做一条ACL*
|
||||
|
||||
### ACL规则二 -- ACLs行自顶向下进行处理
|
||||
|
||||
**the lines are processed top-down**
|
||||
|
||||
某些工程师在他们的ACL未如预期那样运行时感到迷惑。路由器会看看ACL的顶行,在发现匹配后,就会停在那里且不再对其它行进行检查了。为此,需要将**最明确的(最小的)那些条目放在ACL的顶部**(you need to put the most specific entries at the top of the ACL)。比如在利用ACL来阻挡主机`172.16.1.1`时的做法。
|
||||
|
||||
<table>
|
||||
<tr><td>`Permit 10.0.0.0`</td><td></td><td>没有匹配的</td></tr>
|
||||
<tr><td>`Permit 192.168.1.1`</td><td></td><td>没有匹配的</td></tr>
|
||||
<tr><td>`Permit 172.16.0.0`</td><td>`〇`</td><td>匹配了-放行</td></tr>
|
||||
<tr><td>`Permit 172.16.1.0`</td><td></td><td>不会处理了</td></tr>
|
||||
<tr><td>`Deny 172.16.1.1`</td><td></td><td>不会处理了</td></tr>
|
||||
</table>
|
||||
|
||||
在本例中,应该将`Deny 172.16.1.1`这行,放到顶部,或至少应在语句(statement)`Permit 172.16.0.0`之前。
|
||||
|
||||
### ACL规则三 -- 在每条ACL的底部,都有一句隐式的“deny all”
|
||||
|
||||
**There is an implicit "deny all" at the bottom of every ACL**
|
||||
|
||||
这条规则另很多工程师为难。在每条ACL的底部,有着一条看不见的命令。该命令设置为拒绝尚未匹配的所有流量。而阻止此命令起作用的唯一方法,就是在底部手动配置一条`permit all`命令。在取得来自IP地址`172.20.1.1`的某个进入的数据包时的做法。
|
||||
|
||||
<table>
|
||||
<tr><td>`Permit 10.0.0.0`</td><td>无匹配项</td></tr>
|
||||
<tr><td>`Permit 192.168.1.1`</td><td>无匹配项</td></tr>
|
||||
<tr><td>`Permit 172.16.0.0`</td><td>无匹配项</td></tr>
|
||||
<tr><td>`Permit 172.16.1.0`</td><td>无匹配项</td></tr>
|
||||
<tr><td>`[Deny all]`</td><td>匹配 -- 丢弃数据包</td></tr>
|
||||
</table>
|
||||
|
||||
你实际上想要路由器放行该数据包,但却拒绝了。原因就在于那条隐式的`deny all`命令了,而该命令实际上是一种安全手段。
|
||||
|
||||
### ACL规则四 -- 路由器是不能过滤自己产生的流量的
|
||||
|
||||
**The router can't filter self-generated traffic.**
|
||||
|
||||
这在某个实际网络上于部署ACL前进行测试时,会造成混乱。路由器不会过滤其自身产生的流量。在图9.2中有演示。
|
||||
|
||||

|
||||
|
||||
*图9.2 -- 对自身流量的ACL测试*
|
||||
|
||||
### ACL规则五 -- 不能对运行中的ACL进行编辑
|
||||
|
||||
**You can't edit a live ACL.**
|
||||
|
||||
实际上,在`IOS 12.4`之前的版本中,只能对命名ACL进行编辑, 而不能对标准ACL或扩展ACLs两种进行编辑。这曾是ACL架构的一个局限(this was a limitation of ACL architecture)。在`IOS 12.4`之前,如想要编辑标准ACL或扩展ACL,就必须按照以下步骤进行(这里使用`list 99`作为例子)。
|
||||
|
||||
1. 使用命令`no ip access-group 99 in`,在接口上停用ACL流量(stop ACL traffic on the interface with the `no ip access-group 99 in` command)。
|
||||
2. 将该条ACL复制粘贴到文本编辑器,并在那里编辑好。
|
||||
3. 进入到ACL模式,将新的ACL粘贴上去。
|
||||
4. 再次将该ACL应用到接口。
|
||||
|
||||
在实际的路由器上,执行下面的这些命令。
|
||||
|
||||
在接口上已创建并应用的ACL。
|
||||
|
||||
```console
|
||||
Router>en
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#access-list 1 permit 172.16.1.1
|
||||
Router(config)#access-list 1 permit 172.16.2.1
|
||||
Router(config)#interface FastEthernet0/0
|
||||
Router(config-if)#ip access-group 1 in
|
||||
```
|
||||
|
||||
现在其从接口上卸下。
|
||||
|
||||
```console
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#no ip access-group 1 in
|
||||
Router(config-if)#^Z
|
||||
```
|
||||
|
||||
查看那些ACLs。将其复制并粘贴到文本编辑器,并进行修改。
|
||||
|
||||
```console
|
||||
Router#show run ← or show ip access lists
|
||||
access-list 1 permit host 172.16.1.1
|
||||
access-list 1 permit host 172.16.2.1
|
||||
```
|
||||
|
||||
实际上还需在配置行之间加入一个叹号(如是将其粘贴到路由器上的情况下),来告诉路由器执行一次确认(you actually need to add an exclamation mark in-between each line of configuration, if you are pasting it in, to tell the router to do a carriage return)[wikipedia: 回车符](http://zh.wikipedia.org/wiki/%E5%9B%9E%E8%BD%A6%E7%AC%A6)。
|
||||
|
||||
```console
|
||||
access-list 1 permit host 172.16.1.1
|
||||
!
|
||||
access-list 1 permit host 172.16.2.2
|
||||
```
|
||||
|
||||
下面是正被粘贴到路由器配置中的那些行。要先删除早先的ACL,再粘贴进新版本。
|
||||
|
||||
```console
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#no access-list 1
|
||||
Router(config)#access-list 1 permit host 172.16.1.1
|
||||
Router(config)#!
|
||||
Router(config)#access-list 1 permit host 172.16.2.2
|
||||
Router(config)#exit
|
||||
Router#
|
||||
%SYS-5-CONFIG_I: Configured from console by console
|
||||
show ip access
|
||||
Router#show ip access-lists
|
||||
Standard IP access list 1
|
||||
permit host 172.16.1.1
|
||||
permit host 172.16.2.2
|
||||
Router#
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#ip access-group 1 in ← reapply to the interface
|
||||
```
|
||||
|
||||
如使用的是Packet Tracer, 那么这些命可能不会工作。同时,请一定在某台路由器上尝试这些命令,因为它们是考试考点。**记住在编辑ACL前要先在接口上关闭它(此时它就不再是活动的了),以避免一些奇怪或是不可预期的行为发生**。而在`IOS 12.4`及以后的版本中,如何来编辑ACLs,会在后面演示。
|
||||
|
||||
### ACL规则六 -- 在接口上关闭ACL
|
||||
|
||||
**Disable the ACL on the interface.**
|
||||
|
||||
在打算短时间对ACL进行测试或是撤销ACL时,许多工程师都会将其完全删除掉。这是不必要的。如你要停止ACL运行,只需简单地将其从所应用到的接口上移除即可。
|
||||
|
||||
```console
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#no ip access-group 1 in
|
||||
Router(config-if)#^Z
|
||||
```
|
||||
|
||||
### ACL规则七 -- 可重用同一ACL
|
||||
|
||||
**You can reuse the same ACL.**
|
||||
|
||||
这是我在实际网络中经常见到的。整个网络通常都有着同样的ACL策略。与其配置多条ACLs,只需简单地引用同一ACL,然后在所需要的那些接口上应用该ACL即可。图9.3演示了此概念。
|
||||
|
||||

|
||||
|
||||
*图9.3 -- ACL的重用*
|
||||
|
||||
### ACL规则八 -- ACL应保持简短
|
||||
|
||||
ACLs的基本规则就是保持简短且只专注于做一件事情。许多新手的思科工程师,将其ACL延伸到数行那么长,最后,经深思熟虑后,就可以紧缩到少数几行的配置。前面提到的将那些最为特定的(最小的)行放在ACL的顶部。这是好的做法,从而可以节约路由器CPU的执行周期。
|
||||
|
||||
优良的ACL配置技能,来自于知识和操练。
|
||||
|
||||
### ACL规则九 -- 尽可能将ACL放在接近源的地方
|
||||
|
||||
思科文档建议将扩展ACL尽量放在离源近的地方,而将标准ACL尽量放在离目的近的地方,因为这可以避免不必要的开销,又能放行那些合法流量。
|
||||
|
||||

|
||||
|
||||
*图9.4 -- 将ACL尽量放在离源近的地方*
|
||||
|
||||
>Farai 指出 -- “思科官方建议是扩展ACL尽量离源近,而标准ACL尽量离目的近”。
|
||||
|
||||
## 反掩码
|
||||
|
||||
**Wildcard Masks**
|
||||
|
||||
**因为在ACLs及某些路由协议的配置中,反掩码是命令行的组成部分,所有有必要学习反掩码**。之所有存在反掩码,是因为需要有某种方式来告诉路由器,我们要去匹配IP地址或网络地址的哪些部分。
|
||||
|
||||
匹配实在二进制层面完成的,却可以采用与子网掩码相同的表示法,来容易地配置反掩码。一个二进制`1`告诉路由器忽略对应的位,`0`则是要匹配的位。
|
||||
|
||||
CCNA考试中反掩码计算的一种简易方法,就是把一个数与子网掩码相加,确保它们的和为`255`。那么如果子网掩码的某个`8`位值为`192`时,需要加上`63`才等于`255`。而如果子网掩码的某个`8`位值为`255`, 则需要加的就是`0`。看看下面的例子吧。
|
||||
|
||||
<table>
|
||||
<tr><th>子网掩码</th><td>`255`</td><td>`255`</td><td>`255`</td><td>`192`</td></tr>
|
||||
<tr><th>反掩码</th><td>`0`</td><td>`0`</td><td>`0`</td><td>`63`</td></tr>
|
||||
<tr><th>相加之和</th><td>`255`</td><td>`255`</td><td>`255`</td><td>`255`</td></tr>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<tr><th>子网掩码</th><td>`255`</td><td>`255`</td><td>`224`</td><td>`0`</td></tr>
|
||||
<tr><th>反掩码</th><td>`0`</td><td>`0`</td><td>`31`</td><td>`255`</td></tr>
|
||||
<tr><th>相加之和</th><td>`255`</td><td>`255`</td><td>`255`</td><td>`255`</td></tr>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<tr><th>子网掩码</th><td>`255`</td><td>`128`</td><td>`0`</td><td>`0`</td></tr>
|
||||
<tr><th>反掩码</th><td>`0`</td><td>`127`</td><td>`255`</td><td>`255`</td></tr>
|
||||
<tr><th>相加之和</th><td>`255`</td><td>`255`</td><td>`255`</td><td>`255`</td></tr>
|
||||
</table>
|
||||
|
||||
在想要ACL与匹配某个子网或是整个网络时,就需要输入一个反掩码。比如,要匹配`172.20.1.0 255.255.224.0`, 就需要输入下面的命令。
|
||||
|
||||
`Router(config)#access-list 1 permit 172.20.1.0 0.0.31.255`
|
||||
|
||||
而要匹配子网`192.200.1.0 255.255.255.192`, 就需要下面的命令。
|
||||
|
||||
`Router(config)#access-list 1 permit 192.200.1.0 0.0.0.63`
|
||||
|
||||
在OSPF中应用网络语句时也要当心(be careful when applying network statements with OSPF),那位那也要用到反掩码。
|
||||
|
||||
在有着一个仅有两位主机位的网络时,也要当心,因为需要输入一条ACL来匹配这些主机位。比如,要匹配子网`192.168.1.0 255.255.255.252`, 或`/30`的话,需要输入下面的命令。
|
||||
|
||||
`Router(config)#access-list 1 permit 192.168.1.0 0.0.0.3`
|
||||
|
||||
这里剔除了一些配置,是为展示出对应的部分。上面的命令将匹配`192.168.1.0`网络上的`1`号和`2`号主机。而如果要匹配`192.168.1.4/30`网络上的`5`号和`6`号主机,则需输入下面的命令。
|
||||
|
||||
`Router(config)#access-list 1 permit 192.168.1.4 0.0.0.3`
|
||||
|
||||
请阅读子网划分和VLSM部分的课文,以更好地掌握此概念。
|
||||
|
||||
## 访问控制清单的配置
|
||||
|
||||
**Configuring Access Control Lists**
|
||||
|
||||
熟能生巧,对于任何技能都是适用的。如同前面提到的,你应该在路由器上输入这里给出的每个例子,完成尽可能多的实验,并构建出自己的实例。在考试和现实世界中,你都需要精准快速的设计ACL。
|
||||
|
||||
接下来的章节中出现的标准和扩展ACLs都是编号ACLs。它们是配置ACLs的经典方法。命名ACLs是配置ACLs的另一种方式,将在其后的部分出现。
|
||||
|
||||
### 标准ACLs
|
||||
|
||||
**Standard ACLs**
|
||||
|
||||
标准的编号ACLs是最易于配置的,所以拿它来作为开端是最好的。**标准ACLs只能实现依据源网络或源IP地址的过滤**。
|
||||
|
||||

|
||||
|
||||
*图9.5 -- 带有源和目的地址的进入数据包*
|
||||
|
||||
在上面的图9.5中,进入的数据包有着一个源和目的地址,但标准ACL只会查看源地址。该ACL会放行会拒绝该源地址(参见图9.6)。
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
```console
|
||||
Router(config)#access-list 1 permit host 172.16.1.1
|
||||
Router(config)#access-list 1 permit host 172.16.1.1
|
||||
Router(config)#access-list 1 permit host 192.168.1.1
|
||||
Router(config)#access-list 1 permit 10.1.0.0 0.0.255.255
|
||||
```
|
||||
|
||||
此ACL应在服务器侧的路由器上应用。又记得在清单的底部有一条隐式的`deny all`,所以其它流量都会给阻止掉。
|
||||
|
||||
### 扩展ACLs
|
||||
|
||||
**Extended ACLs**
|
||||
|
||||
**扩展的编号ACLs中可以构建出细得多的粒度**。而正是由于有了细得多的粒度,令到扩展的编号ACLs变得诡异起来。藉由扩展的编号ACLs,可以对源或目的网络地址、端口、协议及服务进行过滤。
|
||||
|
||||
一般来说,你可以看看扩展的ACLs配置语法,就像下面这样。
|
||||
|
||||
```console
|
||||
access list# permit/deny [service/protocol] [source network/IP] [destination network/IP] [port#]
|
||||
```
|
||||
|
||||
比如下面这样。
|
||||
|
||||
```console
|
||||
access-list 101 deny tcp 10.1.0.0 0.0.255.255 host 172.30.1.1 eq telnet
|
||||
access-list 100 permit tcp 10.1.0.0 0.0.255.255 host 172.30.1.1 eq ftp
|
||||
access-list 100 permit icmp any any
|
||||
```
|
||||
|
||||

|
||||
|
||||
*图9.7 -- 阻止服务器访问实例*
|
||||
|
||||
|
||||
可为上面的网络配置一条ACL,以e-mail、web和文件服务器为例,可以像下面这样(应用在服务器侧的)。
|
||||
|
||||
```console
|
||||
access-list 100 permit tcp host 172.16.1.1 host 172.20.1.1 eq smtp
|
||||
access-list 100 permit tcp 10.1.0.0 0.0.255.255 host 172.30.1.1 eq ftp
|
||||
access-list 100 permit tcp host 192.168.1.1 host 172.40.1.1 eq www
|
||||
```
|
||||
|
||||
而如有不同要求,就也可以像下面这条ACL。
|
||||
|
||||
```console
|
||||
access-list 101 deny icmp any 172.20.0.0 0.0.255.255
|
||||
access-list 101 deny tcp 10.1.0.0 0.0.255.255 host 172.30.1.1 eq telnet
|
||||
```
|
||||
|
||||
或者也可以像下面这样。
|
||||
|
||||
`access-list 102 permit tcp any host 172.30.1.1 eq ftp established`
|
||||
|
||||
关键字`[established]`告诉路由器仅放行在网络内部的主机所发起的流量。三次握手标志(ACK或RST位)将表明这点(the three-way handshake flags, ACK or RST bit, will indicate this)。
|
||||
|
||||
### 命名ACLs
|
||||
|
||||
**Named ACLs**
|
||||
|
||||
与编号ACLs不同,命名ACLs可由其描述性名称容易地区分,而这在一些大型的配置中尤其有用。引入命名ACLs就是为增加灵活性及ACLs的易于管理的。命名ACLs可以看着是配置增强的提升,因为它并未对ACLs结构进行修改(仅改变了引用ACL的方式而已)。
|
||||
|
||||
其语法跟编号ACLs是相似的,主要的不同就是使用名称而不是编号来区分ACLs。和编号ACLs一样,可以配置标准的或扩展的命名ACLs。
|
||||
|
||||
在配置命名ACLs时的另一不同之处,就是必须一直使用命令`ip access-list`,这与编号ACLs可以只使用简单的`access-list`命令,是不一样的。
|
||||
|
||||
```console
|
||||
Router(config)#access-list ?
|
||||
<1-99> IP standard access list
|
||||
<100-199> IP extended access list
|
||||
<1100-1199> Extended 48-bit MAC address access list
|
||||
<1300-1999> IP standard access list (expanded range)
|
||||
<200-299> Protocol type-code access list
|
||||
<2000-2699> IP extended access list (expanded range)
|
||||
<700-799> 48-bit MAC address access list
|
||||
dynamic-extended Extend the dynamic ACL absolute timer
|
||||
rate-limit Simple rate-limit specific access list
|
||||
Router(config)#ip access-list ?
|
||||
extended Extended access list
|
||||
log-update Control access list log updates
|
||||
logging Control access list logging
|
||||
resequence Resequence access list
|
||||
standard Standard access list
|
||||
R1(config)#ip access-list standard ?
|
||||
<1-99> Standard IP access-list number<1300-1999> Standard IP access-list number (expanded range)
|
||||
WORD Access-list name
|
||||
R1(config)#ip access-list extended ?
|
||||
<100-199> Extended IP access-list number
|
||||
<2000-2699> Extended IP access-list number (expanded range)
|
||||
WORD Access-list name
|
||||
```
|
||||
|
||||
命名ACLs在语法上与其它类型的ACLs(也就是标准和扩展的编号ACLs)有着轻微的不同。同时也**可以编辑活动的命名ACLs**, 这是一个有用的特性。只需简单地告诉路由器要配置一条命名ACL, 而不管它是标准的还是扩展的。在较新的IOS版本上,也可以编辑编号ACLs,所以请检查所用的平台。
|
||||
|
||||
在使用`ip access-list`命令常见一条命名ACL时,思科IOS会将你带入ACL配置模式,在那里就可以输入或是移除ACL条目了(就是那些拒绝或放行的访问条件)。图9.8展示了一条命名ACL的实例,以及相应的输出。
|
||||
|
||||

|
||||
|
||||
**图9.8 -- 命名ACL**
|
||||
|
||||
```console
|
||||
Router(config)#ip access-list extended BlockWEB
|
||||
Router(config-ext-nacl)#?
|
||||
Ext Access List configuration commands:
|
||||
<1-2147483647> Sequence Number
|
||||
default Set a command to its defaults
|
||||
deny Specify packets to reject
|
||||
dynamic Specify a DYNAMIC list of PERMITs or DENYs
|
||||
evaluate Evaluate an access list
|
||||
exit Exit from access-list configuration mode
|
||||
no Negate a command or set its defaults
|
||||
permit Specify packets to forward
|
||||
remark Access list entry comment
|
||||
Router(config-ext-nacl)#deny tcp any any eq 80
|
||||
Router(config-ext-nacl)#permit ip any any
|
||||
```
|
||||
|
||||
命名ACL的验证,可通过下面的命令完成。
|
||||
|
||||
- `show ip access-list`: 显示设备上所创建的所有ACLs
|
||||
- `show ip access-list <acl_name>`: 显示某条特定的命名ACL
|
||||
|
||||
```console
|
||||
Router(config)#do show ip access-lists
|
||||
Standard IP access list test
|
||||
30 permit 10.1.1.1
|
||||
20 permit 192.168.1.1
|
||||
15 permit 172.20.1.1
|
||||
10 permit 172.16.1.1
|
||||
```
|
||||
|
||||
要知道如何来增加或是删除某条命令ACL中的条目,请参考下面的“ACL序号(ACL Sequence Numbers)”小节。
|
||||
|
||||
### 应用ACLs
|
||||
|
||||
**Applying ACLs**
|
||||
|
||||
**为让ACLs发挥效果,就必须将ACL应用到路由器的某个接口或端口上**。之所以这样讲,是因为我曾见到许多的新手思科工程师在敲入了ACL后,就想为什么它不工作!或者他们配置了ACL,却将错误的ACL编号或命名应用到相应的接口上。
|
||||
|
||||
**如要应用在某条线路上,就必须使用`access-class`命令来指定它**,而**如果是应用在某个接口上,就要用`ip access-group`命令**。思科这么做的原因,我也不知道。
|
||||
|
||||
这里有应用ACLs到端口或接口上的三个实例。
|
||||
|
||||
接口上的应用。
|
||||
|
||||
```console
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#ip access-group 101 in
|
||||
```
|
||||
|
||||
线路上的应用。
|
||||
|
||||
```console
|
||||
Router(config)#line vty 0 15
|
||||
Router(config-line)#access-class 101 in
|
||||
```
|
||||
|
||||
接口上的应用。
|
||||
|
||||
```console
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#ip access-group BlockWEB in
|
||||
```
|
||||
|
||||
## ACL序号
|
||||
|
||||
**ACL Sequence Numbers**
|
||||
|
||||
自`12.4`往后,你会发现思科IOS给每个ACL条目添加了序号。那么现在就可以创建一条访问控制清单,并在其后从它里面一处一行了。
|
||||
|
||||
```console
|
||||
Router(config)#ip access-list standard test
|
||||
Router(config-std-nacl)#permit 172.16.1.1
|
||||
Router(config-std-nacl)#permit 192.168.1.1
|
||||
Router(config-std-nacl)#permit 10.1.1.1
|
||||
Router(config-std-nacl)#
|
||||
Router(config-std-nacl)#exit
|
||||
Router(config)#exit
|
||||
Router#
|
||||
*Jun 6 07:38:14.155: %SYS-5-CONFIG_I: Configured from console by console access
|
||||
Router#show ip access-lists
|
||||
Standard IP access list test
|
||||
30 permit 10.1.1.1
|
||||
20 permit 192.168.1.1
|
||||
10 permit 172.16.1.1
|
||||
```
|
||||
|
||||
注意到**在路由器运行配置中,序号并不会显示出来**。要查看它们,必须执行一个`show [ip] access-list`命令。
|
||||
|
||||
## 加入一个ACL行
|
||||
|
||||
**Add an ACL Line**
|
||||
|
||||
**要加入一个新的ACL行,只需简单地输入新的序号并接着输入该ACL语句**。下面的例子展示如何往现有的ACL中加入行`15`。
|
||||
|
||||
```console
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#ip access
|
||||
Router(config)#ip access-list standard test
|
||||
Router(config-std-nacl)#15 permit 172.20.1.1
|
||||
Router(config-std-nacl)#
|
||||
Router(config-std-nacl)#do show ip access
|
||||
Router(config-std-nacl)#do show ip access-lists
|
||||
Standard IP access list test
|
||||
30 permit 10.1.1.1
|
||||
20 permit 192.168.1.1
|
||||
15 permit 172.20.1.1
|
||||
10 permit 172.16.1.1
|
||||
Router(config-std-nacl)#
|
||||
```
|
||||
|
||||
### 移除一个ACL行
|
||||
|
||||
**Remove an ACL Line**
|
||||
|
||||
要移除某个ACL行,只需简单地敲入`no <seq_number>`命令即可,就如同下面的例子中行`20`被删除掉了。
|
||||
|
||||
```console
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#ip access
|
||||
Router(config)#ip access-list standard test
|
||||
Router(config-std-nacl)#no 20
|
||||
Router(config-std-nacl)#
|
||||
Router(config-std-nacl)#do show ip access
|
||||
Router(config-std-nacl)#do show ip access-lists
|
||||
Standard IP access list test30 permit 10.1.1.1
|
||||
15 permit 172.20.1.1
|
||||
10 permit 172.16.1.1
|
||||
Router(config-std-nacl)#
|
||||
```
|
||||
|
||||
### 为某条ACL重新编号
|
||||
|
||||
**Resequence an ACL**
|
||||
|
||||
要对某条ACL重新编号,使用`ip access-list resequence <acl_name> <starting_seq_number> <step_to_increment>`命令。该命令的行为可由下面的例子进行检验。
|
||||
|
||||
```console
|
||||
Router(config)#ip access-list resequence test 100 20
|
||||
Router(config)#do show ip access-lists
|
||||
Standard IP access list test
|
||||
100 permit 10.1.1.1
|
||||
120 permit 172.20.1.1
|
||||
140 permit 172.16.1.1
|
||||
Router(config-std-nacl)#
|
||||
```
|
||||
|
||||
命令`resequence`则会创建新的序号,自`100`开始,每个新行增加`20`。译者注:在更新的IOS版本中,此命令可指定开始序号及步进序号。
|
||||
|
||||
### ACL日志
|
||||
|
||||
**ACL Logging**
|
||||
|
||||
默认情况下,通过那些为某个接口的数据包所匹配上的ACL条目,会创建出一个不断增大的计数器,该计数器可使用`show ip access-list`命令进行查看,如下面的例子所示。
|
||||
|
||||
```console
|
||||
Router#show ip access-lists
|
||||
Extended IP access list test
|
||||
10 deny tcp any any eq 80 (10 matches)
|
||||
20 permit ip any any (56 matches)
|
||||
```
|
||||
|
||||
而如果需要更详细的有关那些为ACL条目所匹配的流量信息,可以给相关的ACL条目配置`log`或`log-input`参数。
|
||||
|
||||
```console
|
||||
Router(config)#ip access-list extended test
|
||||
Router(config)#no 10
|
||||
Router(config)#10 deny tcp any any eq 80 log
|
||||
Router#show ip access-lists
|
||||
Extended IP access list test
|
||||
10 deny tcp any any eq 80 log
|
||||
20 permit ip any any (83 matches)
|
||||
```
|
||||
|
||||
在上面的配置样例中,配置了test ACL的10号条目的ACL日志。在某个数据包与那个条目匹配时,该ACL计数器就会增加,与此同时路由器也会生成一条包含了该特定ACL匹配的详细日志记录。
|
||||
|
||||
`%SEC-6-IPACCESSLOGP: list test denied tcp 10.10.10.2(24667) -> 10.10.10.1(80), 1 packet`
|
||||
|
||||
而如果你仍需要更多有关该事件(transaction)的细节,就要用`log-input`参数替代`log`参数了,就像下面这样。
|
||||
|
||||
```console
|
||||
Router(config)#ip access-list extended test
|
||||
Router(config)#no 10
|
||||
Router(config)#10 deny tcp any any eq 80 log-input
|
||||
Router#show ip access-lists
|
||||
Extended IP access list test
|
||||
10 deny tcp any any eq 80 log-input
|
||||
20 permit ip any any (125 matches)
|
||||
```
|
||||
|
||||
这时,当有该特定ACL条目匹配时,路由器就会生成一条更为详细的日志消息,当中包含了进入的接口以及源MAC地址。
|
||||
|
||||
```console
|
||||
%SEC-6-IPACCESSLOGP: list test denied tcp 10.10.10.2(14013) (FastEthernet0/0 00aa.aabb.ccdd) -> 10.10.10.1(80), 1 packet
|
||||
```
|
||||
|
||||
**ACL日志在查看到底那些数据包被丢弃或放行的故障排除中,会是非常有用的**, 但在现实世界情形中(此内容超出CCNA考试范围)不得提的是:包含`[log]`或`[log-input]`关键字的ACL条目是为路由器进行线程交换的, 与之相反,现代路由器中, 默认都是经由CEF交换的(ACL entries that contain `[log]` or `[log-input]` keyword are process-switched by the router, as opposed to being CEF-switched, which is the default in modern routers)。这需要更多的路由器CPU周期,因而导致在有大量与被记录的ACL条目匹配时,出现问题。
|
||||
|
||||
### 使用ACLs来限制Telnet和SSH访问
|
||||
|
||||
**Using ACLs to Limit Telnet and SSH Access**
|
||||
|
||||
除了在接口级别过滤流量外,ACLs可与其他设备特性配合使用,包括过滤VTY线路上的流量。在前面的课程中,我们曾学过如何利用`line vty`命令,配置Telnet和SSH以实现对某台设备的访问(比如路由器或交换机)。
|
||||
|
||||
有时,我们可能不想接受到设备或自设备发出的所有Telnet/SSH连接。而为实现此操作,就必须定义一条ACL,以指定在VTY线路上所允许或拒绝的流量类型。该ACL可以是编号ACL或命名ACL。通过命令`access-class <acl> | [in|out]`, 将该ACL加入到想要的VTY线路上。
|
||||
|
||||
下面的例子定义了一条允许来自主机`10.10.10.1`的Telnet流量,该ACL随后被应用到VTY线路的进入方向。
|
||||
|
||||
```console
|
||||
Router(config)#ip access-list extended VTY_ACCESS
|
||||
Router(config-ext-nacl)#permit tcp host 10.10.10.1 any eq telnet
|
||||
Router(config-ext-nacl)#deny tcp any any
|
||||
Router(config-ext-nacl)#exit
|
||||
Router(config)#
|
||||
Router(config)#line vty 0 4
|
||||
Router(config-line)# access-class VTY_ACCESS in
|
||||
Router(config-line)#
|
||||
```
|
||||
|
||||
使用以下命令对配置进行验证。
|
||||
|
||||
```console
|
||||
Router#show run | sect line vty
|
||||
line vty 0 4
|
||||
access-class VTY_ACCESS in
|
||||
.....
|
||||
```
|
||||
|
||||
## ACLs故障排除和验证
|
||||
|
||||
**Trubleshooting and Verifying ACLs**
|
||||
|
||||
相信有了对配置命令和规则的深入理解,在访问控制清单上就不会有问题了。在ACL不工作的时候,首先要通过ping操作,检查有没有基本的IP连通性问题。接着看看有没有应用该ACL,看看在ACL中有没有什么文字错误,以及你是否需要允许任何IP流量通过(记住那个隐式的`deny all`条目)。而一些在ACL故障排除过程中最重要的检查点包括下面这些。
|
||||
|
||||
- 查看ACL统计信息
|
||||
- 检查所允许的网络
|
||||
- 检查应用ACL的接口及方向
|
||||
|
||||
### 查看ACL统计信息
|
||||
|
||||
在成功配置一条ACL并将其应用到某个接口上之后,某种可以验证该ACL正确行为的手段非常重要,尤其是某个ACL条目被使用到的次数。基于匹配次数,就可以对过滤策略进行调整,或者对ACLs进行增强,以实现整体安全性的提升。而根据需求的不同,可以在全局层面或者单个接口上(从`IOS 12.4`开始)查看ACL统计信息。
|
||||
|
||||
**ACL全局统计信息**
|
||||
|
||||
**Global ACL Statistics**
|
||||
|
||||
可使用命令`show ip access-list` 或 `show access-list`命令, 查看ACL全局统计信息,这两个命令又可以仅查看某个特定编号ACL或命名ACL的全局统计信息。
|
||||
|
||||
```console
|
||||
Router#show ip access-lists
|
||||
Extended IP access list test
|
||||
10 deny tcp any any eq 80 (10 matches)
|
||||
20 permit ip any any (56 matches)
|
||||
```
|
||||
|
||||
在将某同一ACL重用到不同接口上时,这种方式并不会提供到十分特定的信息,因为它给出的是整体统计信息。
|
||||
|
||||
**单个接口上的ACL统计信息**
|
||||
|
||||
**Per Interface ACL Statistics**
|
||||
|
||||
在想要查看单个接口上的ACL匹配情况,不管是进还是出方向时,可以使用命令`show ip access-list interface <interface_name> [in|out]`,如下面所示。
|
||||
|
||||
```console
|
||||
Router#show ip access-list interface FastEthernet0/1 in
|
||||
Extended IP access list 100 in
|
||||
10 permit ip host 10.10.10.1 any (5 matches)
|
||||
30 permit ip host 10.10.10.2 any (31 matches)
|
||||
```
|
||||
|
||||
如未有指定方向,则应用到该特定接口上的任何进或出方向的ACL都将显示出来。此特性也叫做“ACL可管理能力(ACL Manageability)”,自`IOS 12.4`开始可用。
|
||||
|
||||
### 检查那些放行的网络
|
||||
|
||||
**Verifying the Permitted Networks**
|
||||
|
||||
有的时候,特别实在那些必须配置很多ACLs的大型网络中,在配置ACL条目是就会犯下一些书写错误,而这就会导致不同接口上有错误的流量被阻止。为了检查那些正确的ACL条目(也就是permit及deny语句),可以照前面章节中讲到的那样,使用`show run | section access-list`或者`show ip access-list`命令。
|
||||
|
||||
### 检查ACL的接口和方向
|
||||
|
||||
**Verifying the ACL Interface and Direction**
|
||||
|
||||
在将某条ACL应用到某个接口上时,一个常见的错误就是将其应用到了错误的方向,也就是本应在进方向的,却应用到了出方向,或者本应在出方向的,却应用到了进方向。这会导致功能上和安全方面的很多问题。于是在ACL故障排除上的最先几步之一,就是检查ACL应用到正确的接口及正确的方向。
|
||||
|
||||
为此,可以使用多种命令,包括`show run`及`show ip access-list interface <interface> | [in|out]`命令。
|
||||
|
||||
## 第九天的问题
|
||||
|
||||
1. You can have a named, extended, and standard ACL on one incoming interface. True or false?
|
||||
2. You want to test why your ping is blocked on your Serial interface. You ping out from the router but it is permitted. What went wrong? (Hint: See ACL Rule 4.)
|
||||
3. Write a wildcard mask to match subnet mask `255.255.224.0`.
|
||||
4. What do you type to apply an IP access control list to the Telnet lines on a router?
|
||||
5. How can you verify ACL statistics per interface (name the command)?
|
||||
6. How do you apply an ACL to an interface?
|
||||
|
||||
## 第九天问题的答案
|
||||
|
||||
1. False. You can only configure a single ACL on an interface per direction.
|
||||
2. A router won’t filter traffic it generated itself.
|
||||
3. `0.0.31.255`.
|
||||
4. access-class .
|
||||
5. Issue the show ip access-list interface command.
|
||||
6. Issue the `ip access-group <ACL_name> [in|out]` command.
|
||||
|
||||
## 第九天的实验
|
||||
|
||||
### 标准ACL实验
|
||||
|
||||
**Standard ACL Lab**
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
标准ACL实验拓扑图
|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何配置一条标准ACL。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 配置上面的网络。在两台路由器上加入一条静态路由,领导到任何网络的任何流量都从串行接口发出。这么做的原因是,尽管这不是一个路由实验,仍然需要路由的流量。把`.1`地址加到路由器`A`的串行接口,`.2`地址加到路由器`B`的串行接口。
|
||||
|
||||
```console
|
||||
RouterA(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0
|
||||
RouterB(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0
|
||||
```
|
||||
|
||||
2. 在路由器A上配置一条标准ACL,放行`192.168.1.0/10`网络。默认情况下,其它所有网络都将被阻止。
|
||||
|
||||
```console
|
||||
RouterA(config)#access-list 1 permit 192.168.1.0 0.0.0.63
|
||||
RouterA(config)#int Serial0/1/0
|
||||
RouterA(config-if)#ip access-group 1 in
|
||||
RouterA(config-if)#exit
|
||||
RouterA(config)#exit
|
||||
RouterA#
|
||||
```
|
||||
|
||||
3. 从路由器`B`上测试该条ACL,默认将使用`10.0.0.1`地址。
|
||||
|
||||
```console
|
||||
RouterB#ping 10.0.0.1
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds:
|
||||
UUUUU
|
||||
Success rate is 0 percent (0/5)
|
||||
```
|
||||
|
||||
4. 以源地址`192.168.1.1`来做另一个ping测试,这将没有问题。
|
||||
|
||||
```console
|
||||
RouterB#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 10.0.0.1
|
||||
Repeat count [5]:Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 192.168.1.1
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds:
|
||||
Packet sent with a source address of 192.168.1.1
|
||||
!!!!!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/31/32 ms
|
||||
```
|
||||
|
||||
### 扩展ACL实验
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
扩展ACl实验的拓扑图
|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何配置一条扩展ACL。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 配置上述网络。在路由器`B`上加入一条静态路由,令到前往所有网络的所有流量都从串行接口上发出。这么做是因为,尽管这不是一个路由实验,仍然需要路由流量。
|
||||
|
||||
```console
|
||||
RouterB(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0
|
||||
```
|
||||
|
||||
2. 在路由器`A`上配置一条扩展ACL。仅允许往环回接口上发起Telnet流量。
|
||||
|
||||
```console
|
||||
RouterA(config)#access-list 100 permit tcp any host 172.20.1.1 eq 23
|
||||
RouterA(config)#int s0/1/0
|
||||
RouterA(config-if)#ip access-group 100 in
|
||||
RouterA(config-if)#line vty 0 15
|
||||
RouterA(config-line)#password cisco
|
||||
RouterA(config-line)#login
|
||||
RouterA(config-line)#^Z
|
||||
RouterA#
|
||||
```
|
||||
|
||||
上面的那条ACL编号为`100`, 这就告诉路由器,它是一条扩展ACL。所要允许的是TCP。该条ACL允许来自任何网络的,目的地址为`172.20.1.1`的Telnet端口,端口号为`23`。在执行`show run`命令时,就会看到,路由器实际上会将端口号替换为其对应的名称,就像下面演示的这样。
|
||||
|
||||
```console
|
||||
access-list 100 permit tcp any host 172.20.1.1 eq telnet
|
||||
```
|
||||
|
||||
3. 现在,从路由器B上做一个Telnet测试。首先往路由器`A`的串行接口上Telnet,将会被阻止。接着测试环回接口。
|
||||
|
||||
```console
|
||||
RouterB#telnet 10.0.0.1
|
||||
Trying 10.0.0.1 ...
|
||||
% Connection timed out; remote host not responding
|
||||
RouterB#telnet 172.20.1.1
|
||||
Trying 172.20.1.1 ...Open
|
||||
User Access Verification ←password won’t show when you type it
|
||||
Password:
|
||||
RouterA> ←Hit Control+Shift+6 together and then let go and press the X key to quit.
|
||||
```
|
||||
|
||||
> **注意:** 我们会在其它实验中涉及ACLs,但你真的需要完全地掌握这些内容。为此,要尝试其它的TCP端口,比如`80`、`25`等等。另外,要试试那些UDP端口,比如`53`。如没有将一台PC接上路由器,则是无法对这些其它端口进行测试的。
|
||||
|
||||
## 命名ACL实验
|
||||
|
||||
**拓扑图**
|
||||
|
||||

|
||||
|
||||
命名ACL实验拓扑图
|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何配置一条命名ACL。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 配置上面的网络。在两台路由器上加入一条静态路由,领导到任何网络的任何流量都从串行接口发出。这么做的原因是,尽管这不是一个路由实验,仍然需要路由的流量。
|
||||
|
||||
```console
|
||||
RouterA(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0
|
||||
RouterB(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0
|
||||
```
|
||||
|
||||
2. 在路由器`B`上加入一条扩展的命名ACL。只放行主机`172.20.1.1`,阻止其它任何主机或网络。
|
||||
|
||||
```console
|
||||
RouterB(config)#ip access-list extended blockping
|
||||
RouterB(config-ext-nacl)#permit icmp host 172.20.1.1 any
|
||||
RouterB(config-ext-nacl)#exit
|
||||
RouterB(config)#int s0/1/0
|
||||
RouterB(config-if)#ip access-group blockping in
|
||||
RouterB(config-if)#
|
||||
```
|
||||
|
||||
3. 现在分别从路由器`A`的串行接口和换回接口发出`ping`来测试该条ACL。
|
||||
|
||||
```console
|
||||
RouterA#ping 192.168.1.1
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
|
||||
UUUUU
|
||||
Success rate is 0 percent (0/5)
|
||||
RouterA#ping
|
||||
Protocol [ip]:
|
||||
Target IP address: 192.168.1.1
|
||||
Repeat count [5]:
|
||||
Datagram size [100]:
|
||||
Timeout in seconds [2]:
|
||||
Extended commands [n]: y
|
||||
Source address or interface: 172.20.1.1
|
||||
Type of service [0]:
|
||||
Set DF bit in IP header? [no]:
|
||||
Validate reply data? [no]:
|
||||
Data pattern [0xABCD]:
|
||||
Loose, Strict, Record, Timestamp, Verbose[none]:
|
||||
Sweep range of sizes [n]:
|
||||
Type escape sequence to abort.
|
||||
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
|
||||
Packet sent with a source address of 172.20.1.1
|
||||
!!!!!
|
||||
Success rate is 100 percent (5/5), round-trip min/avg/max = 31/34/47 ms
|
||||
```
|
||||
|
||||
> **注意:** 你需要搞清楚各种服务,以及各种服务所用到的端口。否则,要配置ACL就会非常棘手。本条ACL相当简单,因此可以仅用一行完成。在有着路由协议运行时,需要放行它们。
|
||||
|
||||
要放行RIP,就要像这样指定。
|
||||
|
||||
```console
|
||||
access-list 101 permit udp any any eq rip
|
||||
```
|
||||
|
||||
要放行OSPF,要像这样指定。
|
||||
|
||||
```console
|
||||
access-list 101 permit ospf any any
|
||||
```
|
||||
|
||||
要放行EIGRP,要像这样指定。
|
||||
|
||||
```console
|
||||
access-list 101 permit eigrp any any
|
||||
```
|
||||
@@ -1,517 +0,0 @@
|
||||
# 第12天 OSPF基础知识
|
||||
|
||||
**OSPF Basics**
|
||||
|
||||
___
|
||||
|
||||
Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。
|
||||
|
||||
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 [捐赠译者](https://github.com/gnu4cn/buy-me-a-coffee)。
|
||||
|
||||
___
|
||||
|
||||
## 今天的任务
|
||||
|
||||
- 阅读今天的理论课文
|
||||
- 复习昨天的理论课文
|
||||
|
||||
先前版本的CCNA考试只要求对OSPF有基本了解。**现今版本要求对`OSPFv2`、`v3`及多区域OSPF都要有更为深入的掌握**。OSPF考点在ICND1和ICND2中都有,ICND2中增加了难度。
|
||||
|
||||
今天将会学到下面这些内容。
|
||||
|
||||
- 链路状态基础,Link State fundamentals
|
||||
- OSPF组网类型,OSPF network types
|
||||
- OSPF的配置,Configuring OSPF
|
||||
|
||||
本模块对应了以下CCNA大纲要求:
|
||||
|
||||
+ OSPF(单区域)的配置和验证
|
||||
- 单区域的好处, benefit of single area
|
||||
- OSPFv2的配置, configure OSPFv2
|
||||
- 路由器ID,router ID
|
||||
- 被动接口,passive interface
|
||||
|
||||
## 开放最短路径优先
|
||||
|
||||
**Open Shortest Path First**
|
||||
|
||||
开放最短路径优先,是**一个开放标准的链路状态路由协议**(an open-standard Link State routing protocol)。所有链路状态路由协议都是对链路状态进行通告。当链路状态路由器开始在某条网络链路上运作时,逻辑网络的相关信息就被添加到路由器的**本地**链路状态数据库(Link State Database, LSDB)中。该本地路由器此时在其运作链路上,发出`Hello`数据包,以确定出是否有其它链路状态路由器也在其各自接口上运行着链路状态路由协议。**OSPF直接运行在IP协议上,使用IP下编号为`89`号的协议**。
|
||||
|
||||
## OSPF概述及基础知识
|
||||
|
||||
**OSPF Overview and Fundamentals**
|
||||
|
||||
人们为OSPF撰写了多个请求评议(Requests for Comments, RFCs)。在本小节,将通过一些OSPF有关的最常见的几个RFCs,来了解一下OSPF的历史。OSPF工作组成立于`1987`年,自成立以后,该工作组发布了为数众多的RFCs。下面列出了OSPF有关的一些最常见的RFCs。
|
||||
|
||||
- `RFC 1131` -- OSPF规格,OSPF Specification
|
||||
- `RFC 1584` -- OSPF的多播扩展, Multicast Extensions to OSPF
|
||||
- `RFC 1587` -- OSPF的NSSA选项,the OSPF NSSA Option
|
||||
- `RFC 1850` -- OSPF版本`2`的管理信息库,OSPF Version 2 Management Informaiton Base
|
||||
- `RFC 2328` -- OSPF版本`2`
|
||||
- `RFC 2740` -- OSPF版本`3`
|
||||
|
||||
`RFC 1131`对OSPF的第一次迭代(the first iteration of OSPF)进行了说明, 而应用在明确该协议是否工作的早期测试中。
|
||||
|
||||
`RFC 1584`为OSPF提供了对IP多播流量的支持扩展。这通常被称为多播OSPF(Multicast OSPF, MOSPF)。但该标准不常用到,而最重要的是思科不支持该标准。
|
||||
|
||||
`RFC 1587` 对一种OSPF的次末梢区域(Not-So-Stubby Area, NSSA)的运作方式进行了说明。NSSA允许通过一台自治系统边界路由器(an Autonomous System Boundary Router, ASBR), 采用一条NSSA的外部LSA, 实现外部路由知识的注入(the injection of external routing knowledge)。在本模块的稍后会对不同的NSSAs进行说明。
|
||||
|
||||
`RFC 1850`实现了使用简单网络管理协议(Simple Network Management Protocol, SNMP)对OSPF的网络管理。在网络管理系统中,SNMP用于监测接入网络设备中需要留心的一些情况。本标准的应用超出了CCNA考试要求范围,不会在本书中进行说明。
|
||||
|
||||
`RFC 2328`详细陈述了OSPF版本`2`的最新更新,而OSPF版本`2`正是现今在用的默认版本。OSPF版本`2`最初是在`RFC 1247`中进行说明的,该RFC解决了OSPF版本`1`初次发布中发现的一系列问题,并对该协议进行了修正,实现了未来修改不致产生出向后兼容问题。正因为如此,OSPF版本`2`与版本`1`是不兼容的。
|
||||
|
||||
最后,`RFC 2740`说明了为支持IPv6而对OSPF做出的修改(也就是版本`3`)。应假定本模块中所有对OSPF一词的使用,都是指的OSPF版本`2`。
|
||||
|
||||
### 链路状态基础
|
||||
|
||||
**Link State Fundamentals**
|
||||
|
||||
当对某条特定链路(也就是接口)开启链路状态路由协议时,与那个网络有关的信息就被加入到本地LSDB中。该本地路由器此时就往其运作的各链路上发送`Hello`数据包,以确定有否其它**链路状态路由器**也在接口上运行着。**`Hello`数据包用于邻居发现,并在邻居路由器之间维护邻接关系**。本模块稍后部分会详细说明这些消息。
|
||||
|
||||
在找到一台邻居路由器后, 假定两台路由器在同一子网且位于同一区域,同时诸如认证方法及计时器等其它参数都是一致的(identical),那么本地路由器就尝试建立一个邻接关系(adjacency)。此邻接关系令到两台路由器将**摘要的LSDB信息**通告给对方。这种信息交换,交换的并非真实的详细数据库信息,而是数据的摘要。
|
||||
|
||||
各台路由器参照其本地LSDB,对收到的摘要信息做出评估,以确保其有着最新信息。如邻接关系的一侧认识到它需要一个更新,路由器就从邻接路由器请求新信息。而来自邻居路由器的更新就包含了LSDB中的具体数据。此交换过程持续到两台路由器都拥有同样的LSDB。OSPF用到不同类型的报文,以交换数据库信息,从而确保所有路由器都有着网络的统一视图。这些不同的数据包类型将在本模块稍后进行详细说明。
|
||||
|
||||
紧接着数据库的交换,SPF算法就运行起来,创建出到某个区域或网络主干中所有主机的最短路径树, SPF算法将执行运算的路由器,作为该树的根(Following the database exchange, the SPF algorithm runs and creates a shortest path tree to all hosts in an area or in the network backbone, with the router that is performing the calculation at the root of that tree)。在第10天中,对SPF算法进行了简要介绍。
|
||||
|
||||
### OSPF基础
|
||||
|
||||
**OSPF Fundamentals**
|
||||
|
||||
与EIGRP能够支持多个网络层协议不同,OSPF只能支持IP,也就是IPv4和IPv6。和EIGRP相同的是,OSPF支持VLSM、认证及在诸如以太网这样的多路访问(Multi-Access networks)网络上,于发送和接收更新时,利用IP多播技术(IP Multicast)。
|
||||
|
||||
OSPF是一种层次化的路由协议,将网络以逻辑方式,分为称作区域的众多子域。这种逻辑分段方法,用于限制链路状态通告在OSPF域中扩散的范围(OSPF is a hierarchical routing protocol that logically divides the network into subdomains referred to as areas. This logical segmentation is used to limit the scope of Link State Advertisements(LSAs) flooding throughout the OSPF domain)。LSAs是由运行OSPF的路由器发出的特殊类型数据包。在区域内和区域间用到不同类型的LSAs。通过限制一些类型的LSAs在区域间传播,OSPF的层次化实现有效地减少了OSPF网络中路由协议流量的数量。
|
||||
|
||||
> **注意:** OSPF的这些LSAs会在第39天详细说明。
|
||||
|
||||
在多区域OSPF网络中,必须指定一个区域作为**骨干区域**, 或者叫`Area 0`。**OSPF骨干**就是此OSPF网络的**逻辑中心**。**其它非骨干区域都必须物理连接到骨干**。但因为在非骨干区域和骨干区域之间有着一条物理连接,并非总是可能或可行的,所以OSPF标准允许使用到骨干的虚拟连接。这些虚拟连接也就是常说的虚拟链路,但此概念是不包括在当前的CCNA大纲中的(In a multi-area OSPF network, one area must be designated as **the backbone area**, or `Area 0`. The OSPF backbone is **the logical centre** of the OSPF network. All other non-backbone areas must be connected physically to the backbone. However, because it is not always possible or feasible to have a physical connection between a non-backbone area and the backbone, the OSPF standart allows the use of virtual connections to the backbone. These virtual connections are known as virtual links, but this concept is not included in the current CCNA syllabus)。
|
||||
|
||||
位处各区域中的路由器,都存储着其所在区域的详细拓扑信息。而在各区域中,一台或多台的路由器,又被作为**区域边界路由器**(Area Border Routers, ABRs),区域边界路由器通过在不同区域之间通告汇总路由信息,而促进区域间的路由(facilitate inter-area routing by advertising summarised routing informaiton between the differenct areas)。本功能实现OSPF网络中的以下几个目标。
|
||||
|
||||
- 在OSPF域层面减小LSAs的扩散范围, Reduces the scope of LSAs flooding throughout the OSPF domain
|
||||
- 在区域之间隐藏详细拓扑信息, Hides detailed topology informaiton between areas
|
||||
- OSPF域中端到端连通性的实现, Allows for end-to-end connectivity within the OSPF domain
|
||||
- 在OSPF域内部创建逻辑边界, Creates logical boundaries within the OSPF domain
|
||||
|
||||
> **注意:** 尽管ICND1大纲仅涉及到单区域OSPF(single-area OSPF), 但为把大部分理论纳入讨论背景,有必要说一下多区域OSPF(multi-area OSPF)。
|
||||
|
||||
OSPF骨干区域从ABRs接收到汇总路由信息。该路由信息被散布到OSPF网络中的所有其它非骨干区域。在网络拓扑发生变化时,变化信息就被散布到整个的OSPF域,令到所有区域中的所有路由器都有着网络的统一视图(The OSPF backbone area receives summarised routing informaiton from the ABRs. The routing informaiton is disseminated to all other non-backbone areas within the OSPF network. When a change to the network topology occurs, this informaiton is disseminated throughout the entire OSPF domain, allowing all routers in all areas to have a consistent view of the network)。下图12.1演示的网络拓扑,就是一个多区域OSPF部署的示例。
|
||||
|
||||

|
||||
|
||||
*图12.1 -- 一个多区域OSPF网络*
|
||||
|
||||
图12.1演示了一个基本的多区域OSPF网络。`1`、`2`号区域连接到`0`号区域,也就是OSPF骨干上。`1`号区域中,路由器`R1`、`R2`和`R3`交换着区域内(intra-area)路由信息,并维护着那个区域的详细拓扑。`R3`作为ABR,生成一条区域间汇总路由(an inter-area summary route), 并将该路由通告给OSPF骨干。
|
||||
|
||||
`R4`,也就是`2`号区域的ABR,从`0`号区域接收到`R3`通告出的汇总信息,并将其扩散到其**邻接区域**。这样做就令到`R5`和`R6`知悉位处其本地区域外、但仍在OSPF域内的那些路由了。同样概念也适用于`2`号区域内的路由信息(`R4`, the ABR for Area 2, receives the summary informaiton from Area 0 and floods it into its **adjacent area**. This allows routers `R5` and `R6` to know of the routes that reside outside of their local area but within the OSPF domain. The same concept would also be applicable to the routing informaiton within Area 2)。
|
||||
|
||||
总的来讲,ABRs都维护着所有其各自连接区域的LSDB信息。而各个区域中的所有路由器,都有着属于其特定区域的详细拓扑信息。这些路由器交换着区域内的路由信息。ABRs则将所连接区域的汇总信息通告给其它OSPF区域,以实现域内各子域(区域)间的路由(In summation, the ABRs maintain LSDB informaiton for all the areas in which they are connected. All routers within each area have detailed topology informaiton pertaining to that specific area. These routers exchange intra-area routing informaiton. The ABRs advertise summary informaiton from each of their connected areas to other OSPF areas, allowing inter-area routing within the domain)。
|
||||
|
||||
> **注意:** 本书后面会详细说明OSPF ABRs及其它OSPF路由器类型。
|
||||
|
||||
### 组网类型
|
||||
|
||||
**Network Types**
|
||||
|
||||
对不同传输介质,OSPF采用不同默认组网类型,有下面这些:
|
||||
|
||||
- 非广播组网(在多点非广播多路复用传输介质上,也就是FR和ATM, 默认采用此种组网类型, Non-Broadcast,default on Multipoint Non-Broadcast Multi-Access(FR and ATM))
|
||||
- 点对点组网(在HDLC、PPP、FR及ATM的P2P子接口,以及ISDN介质上,默认采用此种组网类型, Point-to-Point,default on HDLC, PPP, P2P subinterface on FR and ATM, and ISDN)
|
||||
- 广播组网(在以太网和令牌环介质上,默认采用此种组网类型, Broadcast,default on Ethernet and Token Ring)
|
||||
- 点对多点组网(Point-to-Multipoint)
|
||||
- 环回组网(默认在环回接口上采用此种组网类型, Loopback,default on Loopback interfaces)
|
||||
|
||||
**非广播网络**是指那些没有原生的广播或多播流量支持的网络类型。非广播类型网络的最常见实例就是帧中继网络。非广播类型网络**需要额外配置,以实现广播和多播支持**。在这种网络上,OSPF选举出一台指定路由器(a Designate Router, DR), 及/或一台备用指定路由器(a Backup Designated Router, BDR)。在本书后面会对这两台路由器进行说明。
|
||||
|
||||
思科IOS软件中,非广播类型网络上开启了OSPF的路由器,默认每`30`秒发出`Hello`数据包。若`4`个`Hello`间隔,也就是`120`秒中都没有收到`Hello`数据包,那么该邻居路由器就被认为是“死了”。下面的输出演示了在一个帧中继串行接口上`show ip ospf interface`命令的输出。
|
||||
|
||||
```console
|
||||
R2#show ip ospf interface Serial0/0
|
||||
Serial0/0 is up, line protocol is up
|
||||
Internet Address 150.1.1.2/24, Area 0
|
||||
Process ID 2, Router ID 2.2.2.2, Network Type NON_BROADCAST, Cost: 64
|
||||
Transmit Delay is 1 sec, State DR, Priority 1
|
||||
Designated Router (ID) 2.2.2.2, Interface address 150.1.1.2
|
||||
Backup Designated Router (ID) 1.1.1.1, Interface address 150.1.1.1
|
||||
Timer intervals configured, Hello 30, Dead 120, Wait 120, Retransmit 5
|
||||
oob-resync timeout 120
|
||||
Hello due in 00:00:00
|
||||
Supports Link-local Signaling (LLS)
|
||||
Index 2/2, flood queue length 0
|
||||
Next 0x0(0)/0x0(0)
|
||||
Last flood scan length is 2, maximum is 2
|
||||
Last flood scan time is 0 msec, maximum is 0 msec
|
||||
Neighbor Count is 1, Adjacent neighbor count is 1
|
||||
Adjacent with neighbor 1.1.1.1 (Backup Designated Router)
|
||||
Suppress Hello for 0 neighbor(s)
|
||||
```
|
||||
|
||||
一条点对点连接, 简单来说就是一条两个端点之间的连接。P2P连接的实例,包括采用HDLC及PPP封装的物理WAN接口,以及FR和ATM的点对点子接口。**OSPF点对点组网类型中,不会选举出DR和BDR**。在P2P类型网络上,OSPF每`10`秒发出`Hello`数据包。在这些网络上,”死亡“间隔是`Hello`间隔的`4`倍,也就是`40`秒(A Point-to-Point(P2P) connection is simply a connection between two endpoints only. Examples of P2P connections include physical WAN interfaces using HDLC and PPP encapsulation, and Frame Relay(FR) and Asynchronous Transfer Mode(ATM) Point-to-Point subinterfaces. No DR or BDR is elected on OSPF Point-to-Point network types. By default, OSPF sends Hello packets out every 10 seconds on P2P network types. The "dead" interval on these network types is four times the Hello interval, which is 40 seconds)。下面的输出演示了在一条P2P链路上的`show ip ospf interface`命令的输出。
|
||||
|
||||
```console
|
||||
R2#show ip ospf interface Serial0/0
|
||||
Serial0/0 is up, line protocol is up
|
||||
Internet Address 150.1.1.2/24, Area 0
|
||||
Process ID 2, Router ID 2.2.2.2, Network Type POINT_TO_POINT, Cost: 64
|
||||
Transmit Delay is 1 sec, State POINT_TO_POINT
|
||||
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
|
||||
oob-resync timeout 40
|
||||
Hello due in 00:00:03
|
||||
Supports Link-local Signaling (LLS)
|
||||
Index 2/2, flood queue length 0
|
||||
Next 0x0(0)/0x0(0)
|
||||
Last flood scan length is 1, maximum is 1
|
||||
Last flood scan time is 0 msec, maximum is 0 msec
|
||||
Neighbor Count is 1, Adjacent neighbor count is 1
|
||||
Adjacent with neighbor 1.1.1.1
|
||||
Suppress Hello for 0 neighbor(s)
|
||||
```
|
||||
|
||||
广播类型网络,是指那些原生支持广播和多播流量的网络,最常见例子就是以太网。就如同在非广播网络中一样,OSPF也会在广播网络上选举一台DR及/或BDR。默认情况下,OSPF每隔`10`秒发出`Hello`数据包,而如在`4`倍Hello间隔中没有收到`Hello`数据包,就宣告邻居”死亡“。下面的输出演示了在一个`FastEthernet`接口上`show ip ospf interface`命令的输出。
|
||||
|
||||
```console
|
||||
R2#show ip ospf interface FastEthernet0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
Internet Address 192.168.1.2/24, Area 0
|
||||
Process ID 2, Router ID 2.2.2.2, Network Type BROADCAST, Cost: 64
|
||||
Transmit Delay is 1 sec, State BDR, Priority 1
|
||||
Designated Router (ID) 192.168.1.3, Interface address 192.168.1.3
|
||||
Backup Designated Router (ID) 2.2.2.2, Interface address 192.168.1.2
|
||||
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
|
||||
oob-resync timeout 40
|
||||
Hello due in 00:00:04
|
||||
Supports Link-local Signaling (LLS)
|
||||
Index 1/1, flood queue length 0
|
||||
Next 0x0(0)/0x0(0)
|
||||
Last flood scan length is 1, maximum is 1
|
||||
Last flood scan time is 0 msec, maximum is 0 msec
|
||||
Neighbor Count is 1, Adjacent neighbor count is 1
|
||||
Adjacent with neighbor 192.168.1.3 (Designated Router)
|
||||
Suppress Hello for 0 neighbor(s)
|
||||
```
|
||||
|
||||
点对多点是**一种非默认OSPF组网类型**。也就是说,此种组网类型必须使用接口配置命令`ip ospf network point-to-point-multicast [non-broadcast]`手动进行配置。默认情况下,该命令默认应用于一个广播型点对多点类型网络的。此默认组网类型允许OSPF采用多播数据包来动态地发现其邻居路由器。此外在**广播型点对多点网络**类型上,不进行DR/BDR选举(Point-to-Multipoint is **a non-default OSPF network type**. In other words, this network type must be configured manually using the `ip ospf network point-to-multipoint [non-broadcast]` interface configuration command. By default, this command defaults to **a Broadcast Point-to-Multipoint network** type. This default network type allows OSPF to use Multicast packets to discover its neighbour routers. In addition, there is no DR/BDR election held on Broadcast Point-to-Multipoint network types)。
|
||||
|
||||
关键字`[non-broadcast]`将点对多点网络配置为**非广播点对多点网络**。这样做就要求**静态的OSPF邻居配置**,因为此时OSPF不会使用多播来动态地发现其邻居路由器。此外,这种网络类型不要求为指定网段进行DR及/或BDR选举。此种组网的主要用途,即允许分配邻居开销到邻居路由器,而非使用指定给接口的开销,作为那些自所有邻居处收到的路由的开销(The `[non-broadcast]` keyword configures the Point-to-Multipoint network type as **a Non-Broadcast Point-to-Multipoint network**. This requires **static OSPF neighbour configuration**, as OSPF will not use Multicast to discover dynamically its neighbour routers. Additionally, this network type does not require the election of a DR and/or a BDR router for the designated segment. The primary use of this network type is to allow neighbor costs to be assigned to neighbors instead of using the interface-assigned cost for routes received from all neighbors)。
|
||||
|
||||
点对多点组网类型,典型地用于**部分全通辐射状非广播多路访问网络**。不过此种组网类型也可指定给诸如广播多路访问网络(比如以太网)等的其它类型网络(The Point-to-Multipoint network type is typically used in **partial-mesh hub-and-spoke Non-Broadcast Multi-Access(NBMA)** networks. However, this network type can also be specified for other networks, such as Broadcast Multi-Access networks(e.g., Ethernet))。默认情况下,在点对多点网络上,OSPF每`30`秒发出一个`Hello`数据包。默认死亡间隔是`Hello`间隔的`4`倍,也就是`120`秒。
|
||||
|
||||
下面的输出演示了在一个经手动配置为点对多点网络的帧中继串行接口上的`show ip ospf interface`命令的输出。
|
||||
|
||||
```console
|
||||
R2#show ip ospf interface Serial0/0
|
||||
Serial0/0 is up, line protocol is up
|
||||
Internet Address 150.1.1.2/24, Area 0
|
||||
Process ID 2, Router ID 2.2.2.2, Network Type POINT_TO_MULTIPOINT, Cost: 64
|
||||
Transmit Delay is 1 sec, State POINT_TO_MULTIPOINT
|
||||
Timer intervals configured, Hello 30, Dead 120, Wait 120, Retransmit 5
|
||||
oob-resync timeout 120
|
||||
Hello due in 00:00:04
|
||||
Supports Link-local Signaling (LLS)
|
||||
Index 2/2, flood queue length 0
|
||||
Next 0x0(0)/0x0(0)
|
||||
Last flood scan length is 1, maximum is 2
|
||||
Last flood scan time is 0 msec, maximum is 0 msec
|
||||
Neighbor Count is 1, Adjacent neighbor count is 1
|
||||
Adjacent with neighbor 1.1.1.1
|
||||
Suppress Hello for 0 neighbor(s)
|
||||
```
|
||||
|
||||
OSPF要求链路上两台路由器组网类型一致(一致的意思是两台路由器要么都进行选举要么都不进行选举)的主要原因在于计时器的数值。就像上面各个输出中演示的那样,不同组网类型采用了不同`Hello`数据包发送及死亡计时器间隔。为成功建立一个OSPF邻接关系,在两台路由器上这些数值必须匹配。
|
||||
|
||||
思科IOS软件允许通过使用接口配置命令`ip ospf hello-interval <1-65535>`及`ip ospf dead-interval [<1-65535>|minimal]`,对默认OSPF `Hello`数据包及死亡计时器进行修改。`ip ospf hell0-interval <1-65535>`命令用于指定`Hello`间隔的秒数。在执行该命令后,软件会自动将死亡间隔配置为所配置的`Hello`包间隔的`4`倍。比如,假定某台路由器做了如下配置。
|
||||
|
||||
```console
|
||||
R2(config)#interface Serial0/0
|
||||
R2(config-if)#ip ospf hello-interval 1
|
||||
R2(config-if)#exit
|
||||
```
|
||||
|
||||
通过在上面的`R2`上将`Hello`数据包间隔设置为`1`, 思科IOS软件就会自动的将默认死亡计时器调整为`Hello`间隔的`4`倍,就是`4`秒。下面的输出对此进行了演示。
|
||||
|
||||
```console
|
||||
R2#show ip ospf interface Serial0/0
|
||||
Serial0/0 is up, line protocol is up
|
||||
Internet Address 10.0.2.4/24, Area 2
|
||||
Process ID 4, Router ID 4.4.4.4, Network Type POINT_TO_POINT, Cost: 64
|
||||
Transmit Delay is 1 sec, State POINT_TO_POINT
|
||||
Timer intervals configured, Hello 1, Dead 4, Wait 4, Retransmit 5
|
||||
oob-resync timeout 40
|
||||
Hello due in 00:00:00
|
||||
...
|
||||
[Truncated Output]
|
||||
```
|
||||
|
||||
## 配置OSPF
|
||||
|
||||
**OSPF Configuration**
|
||||
|
||||
本节对OSPF配置基础进行说明。
|
||||
|
||||
### 在思科IOS软件中开启OSPF
|
||||
|
||||
**Enabling OSPF in Cisco IOS Software**
|
||||
|
||||
在思科IOS软件中,通过使用全局配置命令`router ospf [process id]`开启OSPF。**关键字`[process id]`是本地有效的**(locally sinificant),邻接关系的建立无需网络中所有路由器的进程号一致。运用本地有效的进程号,允许在同一台路由器上配置多个OSPF实例。
|
||||
|
||||
OSPF进程号是一个`1`与`65535`之间的整数。每个OSPF进程都维护着其独立链路状态数据库(LSDB);但是,所有路由都放进的是同一IP路由表。也就是说,对配置在路由器上的各个单独OSPF进程,并没有各自唯一的IP路由表。
|
||||
|
||||
在思科IOS软件早期版本中,如路由器上没有至少一个的接口配置了有效IP地址且处于`up/up`状态,就无法开启OSPF。此限制在当前版本思科IOS软件中去除了。假如路由器没有接口配置了有效IP地址且处于`up/up`状态,那么思科IOS将创建出一个接近数据库(a Proximity Database, PDB)并允许创建出进程。但是,要记住除非选定路由器ID,该进程就是非活动的进程,而**路由器ID的选定**,可通过下面两种方式完成。
|
||||
|
||||
- 在某个接口上配置一个有效IP地址,并将该接口开启
|
||||
- 使用命令`router-id`为该路由器手动配置一个ID(见下)
|
||||
|
||||
作为一个例子,看看下面的所有接口都关闭的路由器。
|
||||
|
||||
```console
|
||||
R3#show ip interface brief
|
||||
Interface IP-Address OK? Method Status Protocol
|
||||
FastEthernet0/0 unassigned YES manual administratively down down
|
||||
Serial0/0 unassigned YES NVRAM administratively down down
|
||||
Serial0/1 unassigned YES unset administratively down down
|
||||
```
|
||||
|
||||
接着,使用全局配置命令`router ospf [process id]`在该路由器上开启了OSPF, 如下面输出所示。
|
||||
|
||||
```console
|
||||
R3(config)#router ospf 1
|
||||
R3(config-router)#exit
|
||||
```
|
||||
|
||||
基于此配置,思科IOS软件分配给该进程一个默认`0.0.0.0`的路由器ID,如下面`show ip protocols`命令的输出所示。
|
||||
|
||||
```console
|
||||
R3#show ip protocols
|
||||
Routing Protocol is “ospf 1”
|
||||
Outgoing update filter list for all interfaces is not set
|
||||
Incoming update filter list for all interfaces is not set
|
||||
Router ID 0.0.0.0
|
||||
Number of areas in this router is 0. 0 normal 0 stub 0 nssa
|
||||
Maximum path: 4
|
||||
Routing for Networks:
|
||||
Reference bandwidth unit is 100 mbps
|
||||
Routing Information Sources:
|
||||
Gateway Distance Last Update
|
||||
Distance: (default is 110)
|
||||
```
|
||||
|
||||
但是,命令`show ip ospf [process id]`揭示出该进程实际上并不是活动的,且表明需要配置一个路由器ID, 其输出如下面所示。
|
||||
|
||||
```console
|
||||
R3#show ip ospf 1
|
||||
%OSPF: Router process 1 is not running, please configure a router-id
|
||||
```
|
||||
|
||||
### 开启接口或网络的OSPF路由
|
||||
|
||||
**Enabling OSPF Routing for Interfaces or Networks**
|
||||
|
||||
在开启OSPF后,就可以执行两个操作,来为路由器上一个或更多的网络或接口开启OSPF路由。这两个操作如下。
|
||||
|
||||
- 使用路由器配置命令(router configuration command)`[network] [wildcard] area [area id]`
|
||||
- 使用接口配置命令`ip ospf [process id] area [area id]`
|
||||
|
||||
与EIGRP不同,OSPF强制使用反掩码且必须配置反掩码; 但与在EIGRP中的情况一样,反掩码提供了同样的功能,也就是匹配指定范围中的接口(unlike EIGRP, the wildcard is mandatory in OSPF and must be configured; however, as is the case with EIGRP, it serves the same function in that it matches interfaces within the range specified)。比如,语句`network 10.0.0.0 0.255.255.255 area 0`,就会对`10.0.0.1/30`、`10.5.5.1/24`, 甚至`10.10.10.1/25`这样的IP地址和子网掩码组合的接口,开启OSPF路由。基于该OSPF网络配置,这些接口都会被分配到0号区域。
|
||||
|
||||
> **注意:** OSPF反掩码可以与传统子网掩码同样格式敲入,比如`network 10.0.0.0 255.0.0.0 area 0`。在这种情况下,思科IOS软件就会将子网掩码翻转,将得到的反掩码输入到运行配置(the running configuration)。另外要记住**OSPF也支持使用全1s和全0s反掩码,来对某个指定接口开启OSPF**。这样的配置在某个特定接口上开启OSPF,但路由器通告配置在该接口自身的实际子网掩码(this configuration enables OSPF on a paricular interface but the router advertises the actual subnet mask configured on the interface itself)。
|
||||
|
||||
在执行了`network [network] [wildcast] area [area id]`命令后,路由器就在与指定网络和反掩码组合匹配的那些接口上发出`Hello`数据包,来尝试发现邻居路由器。接着在OSPF数据库交换期间,将连接子网通告给一台或更多的邻居路由器,最终,它们将所有子网信息都被加入到这些OSPF路由器的OSPF链路状态数据库(OSPF LSDB)中。
|
||||
|
||||
在命令`network [network] [wildcard] area [area id]`之后,路由器又对最具体条目做出匹配,以决定将接口要分配给的区域。作为实例,想想下面这些OSPF网络语句。
|
||||
|
||||
- 第一条网络配置语句:`network 10.0.0.0 0.255.255.255 area 0`
|
||||
- 第二条:`network 10.1.0.0 0.0.255.255 area 1`
|
||||
- 第三条:`network 10.1.1.0 0.0.0.255 area 2`
|
||||
- 第四条:`network 10.1.1.1 0.0.0.0 area 3`
|
||||
- 第五条:`network 0.0.0.0 0.0.0.0 area 4`
|
||||
|
||||
按照路由器上的此种配置,同时路由器上又配置了如下表12.1中展示的这些环回接口。
|
||||
|
||||
<table>
|
||||
<tr><th>接口</th><th>IP地址/掩码</th></tr>
|
||||
<tr><td>`Loopback 0`</td><td>`10.0.0.1/32`</td></tr>
|
||||
<tr><td>`Loopback 1`</td><td>`10.0.1.1/32`</td></tr>
|
||||
<tr><td>`Loopback 2`</td><td>`10.1.0.1/32`</td></tr>
|
||||
<tr><td>`Loopback 3`</td><td>`10.1.1.1/32`</td></tr>
|
||||
<tr><td>`Loopback 4`</td><td>`10.2.0.1/32`</td></tr>
|
||||
</table>
|
||||
|
||||
就像前面指出的那样,在执行了`network [network] [wildcard] area [area id]`命令后,路由器匹配最具体的网络条目(最小的网络),来决定该接口应分配到的区域。对于在路由器上的网络配置语句及已配置的接口,命令`show ip ospf interface brief`会显示出这些接口都分配给了以下OSPF区域。
|
||||
|
||||
```console
|
||||
R1#show ip ospf interface brief
|
||||
Interface PID Area IP Address/Mask Cost State Nbrs F/C
|
||||
Lo4 1 0 10.2.0.1/32 1 LOOP 0/0
|
||||
Lo1 1 0 10.0.1.1/32 1 LOOP 0/0
|
||||
Lo0 1 0 10.0.0.1/32 1 LOOP 0/0
|
||||
Lo2 1 1 10.1.0.1/32 1 LOOP 0/0
|
||||
Lo3 1 3 10.1.1.1/32 1 LOOP 0/0
|
||||
```
|
||||
|
||||
> **注意:** 在运行配置(the running configuration)中,无需考虑网络语句敲入顺序,路由器的`show running-config`输出中最具体的网络条目,始终列在前面。
|
||||
|
||||
**接口配置命令`ip ospf [process id] area [area id]`**令到无需使用**路由器配置命令`network [network] [wildcard] area [area id]`**。该命令对某个指定接口开启OSPF路由,同时将该接口分配给指定OSPF区域。这两个命令完成同样的基本功能,且可互换使用。
|
||||
|
||||
此外,比如有两台路由器是背靠背连接(connected back-to-back),一台使用接口配置命令`ip ospf [process id] area [area id]`进行了配置,而其邻居路由器使用路由器配置命令`network [network] [wildcard] area [area id]`进行了配置,假设两个区域IDs相同,那么两台路由器将成功建立OSPF邻接关系。
|
||||
|
||||
### OSPF区域
|
||||
|
||||
**OSPF Areas**
|
||||
|
||||
**OSPF区域号既可以配置为一个`0`到`4294967295`之间的整数,也可使用点分十进制表示法**(也就是采用IP地址格式)。与OSPF进程号不同,**为建立邻接关系,OSPF区域号必须匹配**。最常见OSPF区域配置类型为使用一个整数来指定OSPF区域。确保对支持的两种区域配置方式都要熟悉。
|
||||
|
||||
### OSPF路由器ID
|
||||
|
||||
**OSPF Router ID**
|
||||
|
||||
为令到OSPF在某个网络上运行起来,所有路由器都必须有个唯一身份编号(a unique identifying number),且在OSPF环境下要用到路由器ID。
|
||||
|
||||
在决定OSPF路由器ID时,思科IOS选用所配置环回接口中最高的IP地址。如未曾配置环回接口,软件就会使用所有配置的物理接口中最高的IP地址,来作为0SPF路由器ID。思科IOS软件同样允许管理员使用**路由器配置命令`router-id [address]`**, 来手动指定路由器ID。
|
||||
|
||||
环回接口极为有用,特别是在测试当中,因为它们无需硬件且是逻辑的,因此绝不会宕掉。
|
||||
|
||||
在下面的路由器上,给`Loopback0`配置了IP地址`1.1.1.1/32`, 给`F0/0`配置了`2.2.2.2/24`。接着在路由器上给所有接口配置了OSPF。
|
||||
|
||||
```console
|
||||
Router(config-if)#router ospf 1
|
||||
Router(config-router)#net 0.0.0.0 255.255.255.255 area 0
|
||||
Router(config-router)#end
|
||||
Router#
|
||||
%SYS-5-CONFIG_I: Configured from console by console
|
||||
Router#show ip protocols
|
||||
Routing Protocol is “ospf 1”
|
||||
Outgoing update filter list for all interfaces is not set
|
||||
Incoming update filter list for all interfaces is not set
|
||||
Router ID 1.1.1.1
|
||||
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
|
||||
Maximum path: 4
|
||||
Routing for Networks:
|
||||
0.0.0.0 255.255.255.255 area 0
|
||||
Routing Information Sources:
|
||||
Gateway Distance Last Update
|
||||
1.1.1.1 110 00:00:14
|
||||
Distance: (default is 110)
|
||||
```
|
||||
|
||||
|
||||
但又想要将路由器ID硬编码(hard code)为`10.10.10.1`。那么可通过再配置一个使用该IP地址的环回接口,或简单地将这个IP地址加在OSPF路由器ID处。**为令到改变生效,必须重启路由器或在路由器上清除该IP OSPF进程**(清除现有数据库)。
|
||||
|
||||
```console
|
||||
Router#conf t
|
||||
Enter configuration commands, one per line.
|
||||
End with CNTL/Z.
|
||||
Router(config)#router ospf 1
|
||||
Router(config-router)#router-id 10.10.10.1
|
||||
Router(config-router)#Reload or use “clear ip ospf process” command, for this to take effect
|
||||
Router(config-router)#end
|
||||
Router#
|
||||
%SYS-5-CONFIG_I: Configured from console by console
|
||||
Router#clear ip ospf process
|
||||
Reset ALL OSPF processes? [no]: yes
|
||||
Router#show ip prot
|
||||
Routing Protocol is “ospf 1”
|
||||
Outgoing update filter list for all interfaces is not set
|
||||
Incoming update filter list for all interfaces is not set
|
||||
Router ID 10.10.10.1
|
||||
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
|
||||
Maximum path: 4
|
||||
Routing for Networks:
|
||||
0.0.0.0 255.255.255.255 area 0
|
||||
Routing Information Sources:
|
||||
Gateway Distance Last Update
|
||||
1.1.1.1 110 00:03:15
|
||||
Distance: (default is 110)
|
||||
```
|
||||
|
||||
到第`39`天,**DR和BDR选举时,就将看到这个路由器ID有着特别的重要性**。
|
||||
|
||||
### OSPF被动接口
|
||||
|
||||
**OSPF Passive Interfaces**
|
||||
|
||||
被动接口可被描述成在其上没有路由更新发出的接口。在思科IOS软件中,通过使用**路由器配置命令`passive-interface [name]`**, 将某接口配置为被动接口。如路由器上有多个接口需要配置为被动接口,就应使用**`passive-interface default`这个路由器配置命令**。此命令将路由器上那些位处所配置网络范围内的所有接口,都配置为被动模式。而那些需要允许在其上形成邻接关系或邻居关系的接口,就应使用路由器配置命令`no passive-interface [name]`对其进行配置。
|
||||
|
||||
被动接口配置在OSPF和EIGRP中的工作方式是一样的,也就是一旦某接口被标记为被动接口,经由该接口形成的所有邻居关系都会被拆除,同时 **再也不会通过该接口发送或接收`Hello`数据包了**。不过,根据路由器上所配置的网络配置语句,该接口仍然会继续受通告。
|
||||
|
||||
```console
|
||||
Router(config)#router ospf 10
|
||||
Router(config-router)#passive-interface f0/0
|
||||
Router#show ip ospf int f0/0
|
||||
FastEthernet0/0 is up, line protocol is up
|
||||
Internet address is 192.168.1.1/24, Area 0
|
||||
Process ID 10,Router ID 172.16.1.1,Network Type BROADCAST, Cost: 1
|
||||
Transmit Delay is 1 sec, State WAITING, Priority 1
|
||||
No designated router on this network
|
||||
No backup designated router on this network
|
||||
Timer intervals configured,Hello 10, Dead 40, Wait 40,Retransmit 5
|
||||
No Hellos (Passive interface)
|
||||
```
|
||||
|
||||
## 第12天问题
|
||||
|
||||
1. What protocol does OSPF use?
|
||||
2. How does OSPF determine whether other Link State routers are operating on the interfaces as well?
|
||||
3. When a `_______` routing protocol is enabled for a particular link, information associated with that network is added to the local Link State Database (LSDB).
|
||||
4. OSPF utilises IP Multicast when sending and receiving updates on Multi-Access networks, such as Ethernet. True or false?
|
||||
5. OSPF is a hierarchical routing protocol that logically divides the network into subdomains referred to as `_______`.
|
||||
6. Name at least 4 OSPF network types.
|
||||
7. Name the command used to enter OSPF configuration mode.
|
||||
8. When determining the OSPF router ID, Cisco IOS selects the lowest IP address of the configured Loopback interfaces. True or false?
|
||||
9. What command can you use to assign an interface to OSPF Area 2 (interface level command)?
|
||||
10. `_______` can be described as interfaces over which no routing updates are sent.
|
||||
|
||||
##第12天答案
|
||||
|
||||
1. IP number 89.
|
||||
2. By sending Hello packets.
|
||||
3. Link State.
|
||||
4. True.
|
||||
5. Areas.
|
||||
6. Non-Broadcast, Point-to-Point, Broadcast, Point-to-Multipoint, Point-to-Multipoint Non-Broadcast, and Loopback.
|
||||
7. The `router ospf <id>` command.
|
||||
8. False.
|
||||
9. The `ip ospf <id> area 2`
|
||||
10. Passive.
|
||||
|
||||
##第12天实验
|
||||
|
||||
###OSPF基础实验
|
||||
|
||||
沿用第`10`天的实验场景(两台直接连接的路由器,各自其上的环回接口),但取代配置RIP及对物理和环回接口进行通告的是,使用OSPF `0`号区域实现(but instead of configuring RIP and advertising the physical and Loopback interfaces, do this using OSPF `Area 0`)。
|
||||
|
||||
- 分配一个IPv4地址给直接连接的接口(`10.10.10.1/24`及`10.10.10.2/24`)
|
||||
- 运用`ping`操作,测试直接连通性
|
||||
- 分别在两台路由器上配置一个环回接口,并自两个不同范围为其分配上地址(`11.11.11.1/32`及`12.12.12.2/32`)
|
||||
- 配置上标准OSPF `1`号进程,并在`0`号区域中通告所有本地网络。同时为两台设备配置一个路由器ID。
|
||||
|
||||
**`R1`:**
|
||||
|
||||
```console
|
||||
router ospf 1
|
||||
router-id 1.1.1.1
|
||||
network 10.10.10.0 0.0.0.255 area 0
|
||||
network 11.11.11.1 0.0.0.0 area 0
|
||||
```
|
||||
|
||||
**`R2`:**
|
||||
|
||||
```console
|
||||
router ospf 1
|
||||
router-id 2.2.2.2
|
||||
network 10.10.10.0 0.0.0.255 area 0
|
||||
network 12.12.12.2 0.0.0.0 area 0
|
||||
```
|
||||
|
||||
- 自`R1`向`R2`的环回接口执行ping操作,以测试连通性
|
||||
- 执行一条`show ip route`命令,来验证有通过OSPF接收到路由
|
||||
- 执行一条`show ip protocols`命令,来验证有配置OSPF且在设备上是活动的
|
||||
- 坚持特定于OSPF的接口参数:`show ip ospf interface`及`show ip ospf interface brief`
|
||||
- 在两台路由器上(直接连接接口)修改OSPF的Hello包和死亡计时器:`ip ospf hello`及`ip ospf dead`
|
||||
- 执行一下`show ip ospf 1`命令,看看路由进程参数
|
||||
- 重复该实验,但这次使用`ip ospf 1 area 0 interface specific`命令,而不是在router OSPF 下的`network`命令,对各个网络进行通告。
|
||||
226
d13-OSPFv3.md
@@ -1,226 +0,0 @@
|
||||
# 第13天 OSPF版本3
|
||||
|
||||
__OSPF version 3__
|
||||
|
||||
___
|
||||
|
||||
Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。
|
||||
|
||||
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 [捐赠译者](https://github.com/gnu4cn/buy-me-a-coffee)。
|
||||
|
||||
___
|
||||
|
||||
## 第13天任务
|
||||
|
||||
- 阅读今天的理论课文
|
||||
- 回顾昨天的理论课文
|
||||
|
||||
今天我们要着眼于OSPFv3, 这里将学习要下面的知识。
|
||||
|
||||
- OSPF基础
|
||||
|
||||
本模块对应了以下CCNA大纲要求。
|
||||
|
||||
- 配置OSPFv3
|
||||
- 路由器ID
|
||||
- 被动接口
|
||||
|
||||
## OSPF第3版
|
||||
|
||||
**OSPF Version 3**
|
||||
|
||||
`OSPFv3`定义在`RFC 2740`中,而其功能与`OSPFv2`相同,不过`OSPFv3`显式地是为IPv6路由协议设计(OSPFv3 is defined in RFC 2740 and is the counterpart of OSPFv2, but it is designed explicitly for the IPv6 routed protocol)。该版本号取自此种OSPF数据包中的版本字段,该字段已被更新到数字`3`. `OSPFv3`规格主要是基于`OSPFv2`, 但因为加入对IPv6的支持,而包含了一些额外功能增强。
|
||||
|
||||
`OSPFv2`和`OSPFv3`能在同一台路由器上运行。也就是说,同一台物理路由器可同时路由IPv4和IPv6流量,因为每个地址家族都有不同的SPF进程;这就是说,同样SPF算法对`OSPFv2`和`OSPFv3`分别有一个单独实例。`OSPFv2`和`OSPFv3`有以下共同点。
|
||||
|
||||
- `OSPFv3`继续使用着为`OSPFv2`所用到的那些数据包。包括数据库说明数据包(Database Description, DBD), 链路状态请求数据包(Link State Requests, LSRs),链路状态更新数据包(Link State Updates, LSUs), 以及链路状态通告数据包(Lins State Advertisements, LSAs)
|
||||
- `OSPSv3`中的动态邻居发现机制及邻接关系形成过程(OSPF所经历的从初始、尝试建立邻接关系到邻接关系完整建立的过程),仍然和`OSPFv2`中一样
|
||||
- 在不同通信技术方面,`OSPFv3`仍然保持对RFC的遵循(OSPFv3 still remains RFC-compliant on different technologies)。比如,若在某条PPP链路上开启`OSPFv3`, 那么组网类型仍然被指定为点对点(Point-to-Point)。同样,如在FR上开启`OSPFv3`, 默认组网类型仍然是非广播类型(Non-Broadcast)。此外,在思科IOS软件中,默认组网类型仍可通过使用不同的、特定于接口的命令,手动进行改变。
|
||||
- `OSPFv2`和`OSPFv3`使用同样的LSA散布及老化机制(the same LSA flooding and aging mechanism).
|
||||
- 与`OSPFv2`类似,`OSPFv3`的路由器ID(rid)仍然需要使用一个`32`位的IPv4地址。当在某台运行着双栈(dual-stack, 也就是同时有IPv4和IPv6)的路由器上开启`OSPFv3`时, 那么与在`OSPFv2`中为思科IOS路由器所用到的同样RID选定过程,也用于确定OSPFv3中要用到的路由器ID。但是,在一台没有接口运行着IPv4的路由器上开启`OSPFv3`时,就**强制性要求使用路由器配置命令`router-id`来手动配置`OSPFv3`的路由器ID**。
|
||||
- `OSPFv3`链路ID表明,这些链路并非IPv6专用,同时这些链路ID跟`OSPFv2`中一样,仍然基于一个`32`位IPv4地址。
|
||||
|
||||
在`OSPFv2`与`OSPFv3`有着这些相同点的同时,重要的是掌握那些你必须熟悉的存在的明显不同点。包括下面这些。
|
||||
|
||||
- 以与EIGRP类似的方式,`OSPFv3`是在链路上运行的(in a manner similar to EIGRP, OSPFv3 runs over a link)。这就打消了`OSPFv3`中执行网络声明语句的需求。取而代之的是,**通过使用接口配置命令`ipv6 router ospf [process id] area [area id]`,来将该链路配置为某个OSPF进程的组成部分**。但是,与`OSPFv2`类似,OSPF进程号仍然是通过在全局配置模式中,使用全局配置命令`ipv6 router ospf [process id]`进行指定。
|
||||
- **`OSPFv3`使用本地链路地址(Link-local address)来区分`OSPFv3`邻接关系**。与EIGRPv6类似,`OSPFv3`路由的下一跳地址将反映邻接的或邻居路由器的本地链路地址。
|
||||
- `OSPFv3`**引入了两种新的OSPF LSA类型**。分别是**链路LSA**(the Link LSA),被定义为LSA类型`0x0008`(LSA `Type 0x0008`,或LSA Type 8), 以及**区域内前缀LSA**(the Intra-Area-Prefix LSA),被定义为LSA类型`0x0029`(LSA `Type 0x0029`, 或LSA Type 29)。**链路LSA提供了路由器的本地链路地址,及加诸路由器上的所有IPv6前缀**。每条链路都有一个链路LSA。可能有多个带有不同**链路状态IDs**的区域内前缀LSAs。因此,区域LSA散布范围就既可能是与应用自网络LSA的所经过网络的相关前缀网络,也可能是参考自路由器LSA的某台路由器或末梢区域相关前缀(There can be multiple Intra-Area-Prefix LSAs with different Link-State IDs. The Area flooding scope can therefore be an associated prefix with the transit network referencing a Network LSA or it can be an associated prefix with a router or Stub referencing a Router LSA)。
|
||||
- `OSPFv2`与`OSPFv3`所用到的传输方式是不同的。`OSPFv3`报文是用(封装成)IPv6数据包发出的。
|
||||
- `OSPFv3`使用两个标准IPv6多播地址。多播地址`FF02::5`与`OSPFv2`中用到的所有SPF路由器(AllSPFRouters)地址`224.0.0.5`等价,同时多播地址`FF02::6`就是所有DR路由器(AllDRRouters)地址,且与OSPFv2中用到的`224.0.0.6`组地址等价。(这将在ICND2部分讲到)。
|
||||
- `OSPFv3`利用到IPv6内建的`IPSec`的能力,并将AH和ESP扩展头部用着一种的认证机制,而不是想在`OSPFv2`中可配置的为数众多的认证机制(OSPFv3 leverages the built-in capabilities of IPSec and uses the AH and ESP extension headers as an authentication mechanism instead of the numerous authentication mechanisms configurable in OSPFv2)。因此,在`OSPFv3`的OSPF数据包中,那些认证和AuType字段就被移除了。
|
||||
- 最终的最后一个明显区别就是,`OSPFv3` `Hello`数据包现在不包含任何地址信息,而是包含了一个接口ID,该接口ID是发出`Hello`数据包路由器分配的,用于对链路做其接口的唯一区分。此接口ID成为网络LSA(the Network LSA)的链路状态ID(Link State ID), 判断该路由器是否应成为该链路上的指定路由器(This interface ID becomes the Network LSA's Link State ID, should the router become the Designated Router on the link)。
|
||||
|
||||
## 思科IOS软件的OSPFv2和OSPFv3配置差异
|
||||
|
||||
**Cisco IOS Software OSPFv2 and OSPFv3 Configuration Differences**
|
||||
|
||||
在思科IOS软件中,配置OSPFv2与OSPFv3时有着一些配置差异。但应注意到,这些区别与其它路由协议的IPv4和IPv6版本的差异相比,并不那么显著。
|
||||
|
||||
在思科IOS软件中,通过使用全局配置命令`ipv6 router ospf [process id]`,来开启OSPFv6。和OSPFv2中的情况一样,OSPF进程ID是对路由器本地有效的,并不要求其在邻接路由器上为建立邻接关系保持一致。
|
||||
|
||||
> **译者总结:** 邻居路由器要形成邻接关系,要求:1. 区域号一致;2. 认证一直;3. Hello包、死亡间隔时间直一致;不要求:进程号一致。Hello数据包用于动态邻居发现和形成邻接关系,因此Hello数据包包含上述要求的参数,不包含不要求的参数。只有形成了邻接关系,才能开始发送和接受LSAs。
|
||||
|
||||
与EIGRPv6(将在ICND2中涵盖)所要求的一样,OSPFv3的路由器ID也必须予以手动指定,或配置成一个带有IPv4地址的运行接口(比如一个环回接口)。与EIGRPv6类似,在启用OSPFv3时,是没有网络命令的(网络宣告,network statement)。取而代之的是,OSPF的启用,是基于各个接口的,且在同一接口上可开启多个OSPFv3实例(similar to EIGRPv6, there are no network commands used when enabling OSPFv3. Instead OSPFv3 is enabled on a per-interface basis and multiple instances may be enabled on the same interface)。
|
||||
|
||||
最后,当**在诸如FR及ATM这样的NBMA网络上配置OSPFv3时,是在指定接口下,使用接口配置命令`ipv6 ospf neighbor [link local address]`,来指定邻居声明语句(the neighbor statements)。而在OSPFv2中,这些语句会是在路由器配置模式中配置的**。
|
||||
|
||||
> **注意:** 当在NBMA传输技术上配置OSPFv3时,应该使用本地链路地址来创建出静态FR地图声明语句(static Frame Relay map statements)。这是因为正是使用本地链路地址,而不是全球单播地址,建立邻接关系。比如,为给一个FR部署创建一幅静态FR地图语句并指定一台OSPF邻居路由器,就要在该路由器上应用下面的配置(在ICND2部分将对FR进行讲解)。
|
||||
|
||||
```console
|
||||
R1(config)#ipv6 unicast-routing
|
||||
R1(config)#ipv6 router ospf 1
|
||||
R1(config-rtr)#router-id 1.1.1.1
|
||||
R1(config-rtr)#exit
|
||||
R1(config)#interface Serial0/0
|
||||
R1(config-if)#frame-relay map ipv6 FE80::205:5EFF:FE6E:5C80 111 broadcast
|
||||
R1(config-if)#ipv6 ospf neighbor FE80::205:5EFF:FE6E:5C80
|
||||
R1(config-if)#exit
|
||||
```
|
||||
|
||||
### 思科IOS软件中OSPFv3的配置和验证
|
||||
|
||||
**Configuring and Verifying OSPFv3 in Cisco IOS Software**
|
||||
|
||||
接着上一部分,上部分强调了OSPFv2和OSPFv3之间配置差异,那么这部分就要过一遍那些在思科IOS软件中开启和验证OSPFv3功能及路由的步骤。在思科IOS软件中,需要依序采行下面这些步骤,来开启OSPFv3路由。
|
||||
|
||||
1. 使用全局配置命令`ipv6 unicast-routing`,来全局性地开启IPv6路由。在思科IOS软件中,IPv6路由默认是关闭的。
|
||||
2. 使用全局配置命令`ipv6 router ospf [process ID]`, 配置一或多个的OSPFv3进程。
|
||||
3. 如路由器上没有配置IPv4地址的运行接口,就要使用路由器配置命令(router configuration command)`router-id [IPv4 Address]`, 手动配置OSPFv3路由器ID(Router ID,RID)。
|
||||
4. 在需要的接口上(on the desired interfaces),使用接口配置命令`ipv6 address`及`ipv6 enable`, 对这些接口开启IPv6。
|
||||
5. 使用接口配置命令`ipv6 ospf [process ID] area [area ID]`,在接口下开启一或更多的OSPFv3进程。
|
||||
|
||||
第一个基础多区域OSPFv3配置示例,建立在下图13.1所演示的拓扑之上。
|
||||
|
||||

|
||||
|
||||
*图13.1 -- 在思科IOS软件中配置基本多区域OSPFv3*
|
||||
|
||||
依之间所讲到的顺序配置步骤,照下面这样,在路由器`R1`上就会配置上OSPFv3。
|
||||
|
||||
```console
|
||||
R1(config)#ipv6 unicast-routing
|
||||
R1(config)#ipv6 router ospf 1
|
||||
R1(config-rtr)#router-id 1.1.1.1
|
||||
R1(config-rtr)#exit
|
||||
R1(config)#interface FastEthernet0/0
|
||||
R1(config-if)#ipv6 address 3fff:1234:abcd:1::1/64
|
||||
R1(config-if)#ipv6 enable
|
||||
R1(config-if)#ipv6 ospf 1 Area 0
|
||||
R1(config-if)#exit
|
||||
```
|
||||
|
||||
而按照同样顺序的步骤,像下面这样在路由器`R3`上配置好OSPFv3路由。
|
||||
|
||||
```console
|
||||
R3(config)#ipv6 unicast-routing
|
||||
R3(config)#ipv6 router ospf 3
|
||||
R3(config-rtr)#router-id 3.3.3.3
|
||||
R3(config-rtr)#exit
|
||||
R3(config)#interface FastEthernet0/0
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:1::3/64
|
||||
R3(config-if)#ipv6 enableR3(config-if)#ipv6 ospf 3 Area 0
|
||||
R3(config-if)#exit
|
||||
R3(config)#interface Loopback0
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:2::3/128
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:3::3/128
|
||||
R3(config-if)#ipv6 enable
|
||||
R3(config-if)#ipv6 ospf 3 Area 1
|
||||
R3(config-if)#exit
|
||||
```
|
||||
|
||||
依据上述两台路由器上OSPFv3的配置,就可以使用命令`show ipv6 ospf neighbor`, 来检查OSPFv3的邻接状态,在`R1`上如下所示。
|
||||
|
||||
```console
|
||||
R1#show ipv6 ospf neighbor
|
||||
Neighbor ID Pri State Dead Time Interface ID Interface
|
||||
3.3.3.3 1 FULL/BDR 00:00:36 4 FastEthernet0/0
|
||||
```
|
||||
|
||||
通过将`[detail]`关键字追加到本命令的后面,还可以查看详细的邻居信息。
|
||||
|
||||
```console
|
||||
R1#show ipv6 ospf neighbor detail
|
||||
Neighbor 3.3.3.3
|
||||
In the area 0 via interface FastEthernet0/0
|
||||
Neighbor: interface-id 4, link-local address FE80::213:19FF:FE86:A20
|
||||
Neighbor priority is 1, State is FULL, 6 state changes
|
||||
DR is 1.1.1.1 BDR is 3.3.3.3
|
||||
Options is 0x000013 in Hello (V6-Bit E-Bit R-bit )
|
||||
Options is 0x000013 in DBD (V6-Bit E-Bit R-bit )
|
||||
Dead timer due in 00:00:39
|
||||
Neighbor is up for 00:06:40
|
||||
Index 1/1/1, retransmission queue length 0, number of retransmission 0
|
||||
First 0x0(0)/0x0(0)/0x0(0) Next 0x0(0)/0x0(0)/0x0(0)
|
||||
Last retransmission scan length is 0, maximum is 0
|
||||
Last retransmission scan time is 0 msec, maximum is 0 msec
|
||||
```
|
||||
|
||||
在上面的输出中,注意真实的邻居地址是本地链路地址,而不是所配置的全球IPv6单播地址。
|
||||
|
||||
## 第13天问题
|
||||
|
||||
1. Both OSPFv2 and OSPFv3 can run on the same router. True or false?
|
||||
2. OSPFv2 and OSPFv3 use different LSA flooding and aging mechanisms. True or false?
|
||||
3. Which is the equivalent of `224.0.0.5` in the IPv6 world?
|
||||
4. As is required for EIGRPv6, the router ID for OSPFv3 must be either specified manually or configured as an operational interface with an IPv4 address. True or false?
|
||||
5. Which command would you use to enable the OSPFv3 routing protocol?
|
||||
6. Which command would you use to specify an OSPFv3 neighbour over an NBMA interface?
|
||||
7. Which command would you use to see the OSPFv3 LSDB?
|
||||
8. A significant difference between OSPFv2 and OSPFv3 is that the OSPFv3 Hello packet now contains no address information at all but includes an interface ID, which the originating router has assigned to uniquely identify its interface to the link. True or false?
|
||||
|
||||
## 第13天答案
|
||||
|
||||
1. True.
|
||||
2. False.
|
||||
3. `FF02::5`.
|
||||
4. True.
|
||||
5. The `ipv6 router ospf <id>`
|
||||
6. The `ipv6 ospf neighbor`
|
||||
7. The `show ipv6 ospf database`
|
||||
8. True.
|
||||
|
||||
## 第13天实验
|
||||
|
||||
### OSPFv3基础实验
|
||||
|
||||
重复第`12`天的实验场景(两台路由器直连,各自又有环回接口),但以配置IPv6地址并在设备间使用OSPFv3对这些地址进行通告,取代配置IPv4的OSPF。
|
||||
|
||||
- 给直连接口分配上IPv6地址(`2001:100::1/64`及`2001:100::2/64`)
|
||||
- 用`ping`测试直接连通性
|
||||
- 在两台路由器上分别配置一个环回接口,并从两个不同范围分配地址(`2002::1/128`及`2002::2/128`)
|
||||
- 配置标准的OSPFv3 `1`号进程并将所有本地网络在`0`号区域进行通告。同时为各设备配置一个路由器ID。
|
||||
|
||||
**R1:**
|
||||
|
||||
```console
|
||||
ipv6 router ospf 1
|
||||
router-id 1.1.1.1
|
||||
int fa0/0(或特定接口编号)
|
||||
ipv6 ospf 1 area 0
|
||||
int lo0(或特定接口编号)
|
||||
ipv6 ospf 1 area 0
|
||||
```
|
||||
|
||||
**R2:**
|
||||
|
||||
```console
|
||||
ipv6 router ospf 1
|
||||
router-id 2.2.2.2
|
||||
int fa0/0(或特定接口编号)
|
||||
ipv6 ospf 1 area 0
|
||||
int lo0(或特定接口编号)
|
||||
ipv6 ospf 1 area 0
|
||||
```
|
||||
|
||||
- 自`R1`向`R2`的IPv6环回接口发出`ping`操作,以测试连通性
|
||||
- 执行一个`show ipv6 route`命令,来验证有通过OSPFv3接收到路由
|
||||
- 执行一个`show ipv6 protocols`命令,来验证有配置OSPFv3且在设备上是活动的
|
||||
- 执行命令`show ipv6 ospf interface`及`show ipv6 ospf interface brief`,检查接口特定于OSPF的那些参数
|
||||
- 在两台路由器上(直连接口)修改`Hello`包和死亡计时器: `ipv6 ospf hello`及`ipv6 ospf dead`
|
||||
- 执行一下`show ipv6 ospf 1`命令,来查看路由进程参数
|
||||
@@ -1,467 +0,0 @@
|
||||
# 第14天 DHCP及DNS
|
||||
|
||||
__DHCP and DNS__
|
||||
|
||||
___
|
||||
|
||||
Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。
|
||||
|
||||
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 [捐赠译者](https://github.com/gnu4cn/buy-me-a-coffee)。
|
||||
|
||||
___
|
||||
|
||||
|
||||
## 第14天任务
|
||||
|
||||
- 阅读今天的课文
|
||||
- 复习昨天的课文
|
||||
- 完成今天的实验
|
||||
- 阅读ICND1记诵指南
|
||||
- 花15分钟在[subnetting.org](http://www.subnetting.org)上
|
||||
|
||||
主机使用动态主机配置协议(Dynamic Host Configuration Protocol, DHCP),紧接着加电启动后,收集到包括了IP地址、子网掩码及默认网关等初始配置信息。因为所有主机都需要一个IP地址,以在IP网络中进行通信,而DHCP就减轻了手动为每台主机配置一个IP地址的管理性负担。
|
||||
|
||||
域名系统(Domain Name System, DNS)将主机名称映射到IP地址,使得你可[www.in60days.com](www.in60days.com)输入到web浏览器中,而无需输入寄存该站点的服务器IP地址。
|
||||
|
||||
今天将学到以下内容。
|
||||
|
||||
- DHCP操作, DHCP operations
|
||||
- 配置DHCP, configuring DHCP
|
||||
- DHCP故障排除, troubleshooting DHCP issues
|
||||
- DNS操作, DNS operations
|
||||
- 配置DNS, configuring DNS
|
||||
- DNS故障排除, troubleshooting DNS issues
|
||||
|
||||
本课对应了以下CCNA大纲要求。
|
||||
|
||||
+ 配置和验证DNS(IOS路由器)
|
||||
- 将路由器接口配置为使用DHCP, configure router interfaces to use DHCP
|
||||
- DHCP选项, DHCP options
|
||||
- 排除的地址, excluded addresses
|
||||
- 租期,lease time
|
||||
|
||||
## DHCP功能
|
||||
|
||||
**DHCP Functionality**
|
||||
|
||||
### DHCP操作
|
||||
|
||||
**DHCP Operations**
|
||||
|
||||
DHCP通过在网络上给主机自动分配IP信息,简化了网络管理任务。分配的信息可以包括IP地址、子网掩码及默认网关,且通常实在主机启动时。
|
||||
|
||||
在主机第一次启动时,如其已被配置为采用DHCP(大多数主机都是这样的),它就会发出一个询问分配IP信息的广播报文。该广播将为DHCP服务器收听到,同时该信息会被中继。
|
||||
|
||||
> Farai指出 -- "这是假定主机和DHCP服务器实在同一子网的情形,而如它们不在同一子网,就看下面的`ip helper-address`命令。"
|
||||
|
||||

|
||||
|
||||
*图14.1 -- 主机请求IP配置信息*
|
||||
|
||||
DHCP具体使用UDP端口`67`和`68`,来在网络上通信,同时,尽管在需要时路由器也可实现DHCP功能,但通常都会使用具体服务器作为DHCP服务器。在需要时,路由器同样可以配置为从DHCP服务器取得其接口IP地址,但很少这样做。配置这个特性的命令如下。
|
||||
|
||||
`Router(config-if)#ip address dhcp`
|
||||
|
||||
客户端的DHCP状态如下:
|
||||
|
||||
- 初始化,initialising
|
||||
- 选择,selecting
|
||||
- 请求,requesting
|
||||
- 绑定,bound
|
||||
- 更新,renewing
|
||||
- 重绑定,rebinding
|
||||
|
||||
DHCP服务器可被配置为在一个名为租期的特定时期,赋予某台主机一个IP地址。租期可以是几个小时或几天。对于那些不能在网络上分配给主机的IP地址,可以也应该予以保留。这些保留的IP地址,将是已被路由器接口或服务器所使用的地址。如未能保留这些地址,就会看到网络上的重复IP地址告警,因为DHCP服务器已将配置给路由器或服务器的地址,分配给了主机。
|
||||
|
||||
下面的图14.2中,可以看到完整的DHCP请求和分配过程。
|
||||
|
||||

|
||||
*图14.2 -- DHCP请求和分配过程*
|
||||
|
||||
1. **DHCP发现数据包**(DHCP Discover packet)当某台设备启动后,同时其被配置为通过DHCP取得一个地址时,就会发出一个自UDP端口`68`(UDP port `68`, `bootpc`)到UDP端口`67`(UDP port `67`, `bootps`)的广播数据包。该数据包将到达网络上的所有设备,包括任何位处网络上的可能的DHCP服务器。
|
||||
|
||||
**DHCP提议数据包**(DHCP Offer packet),本地网络上的DHCP服务器看到由客户端发出的广播发现报文(the broadcasted Discover message),就用UDP源端口`bootps 67`及目的端口`bootpc 68`, 同样以广播地址的形式,发回一个响应(就是DHCP提议数据包)。之所以同样以广播地址形式,是因为客户端此时仍然没有IP地址,而无法接收单播数据包。
|
||||
|
||||
2. **DHCP请求数据包**(DHCP Request packet), 一旦客户端工作站收到由DHCP服务器做出的提议(an offer made by the DHCP server),它就会发出一个广播(用于告知所有DHCP服务器,它已接受了来自某台服务器的提议)DHCP请求报文到某台特定的DHCP服务器,并再度使用UDP源端口`bootpc 68`及目的端口`bootps 67`。**客户端可能会收到来自多台DHCP服务器的提议,但它只需单独一个IP地址,所以它必需选择一台DHCP服务器**(基于服务器标识),而选择通常都是按照"先到,先服务"原则完成的(on a "first-come, first-served" basis)。
|
||||
|
||||
3. **DHCP确认数据包**(DHCP ACK packet), 选中的那台DHCP服务器发出另一个广播报文,来确认给那台特定客户端的地址分配,再度用到UDP源端口`bootps 67`及目的端口`bootpc 68`。
|
||||
|
||||
|
||||
### DHCP的预订
|
||||
|
||||
**DHCP Reservations**
|
||||
|
||||
DHCP服务器可被配置为以几种不同方式提供IP地址,包括下面这些。
|
||||
|
||||
- 动态分配, Dynamic allocation
|
||||
- 自动分配, Automatic allocation
|
||||
- 静态分配, Static allocation
|
||||
|
||||
**动态分配**
|
||||
|
||||
**Dynamic allocation**
|
||||
|
||||
通过DHCP指派地址的一个十分常用方法,就是采用动态分配过程,在此过程中,DHCP服务器配置为有着一个大的IP地址池,且根据客户端的请求,而为其分配地址池中的一个IP地址。在设备租期超时或设备离开网络时,该特定IP地址就被交还给DHCP服务器,之后就可被分配给另一客户端。
|
||||
|
||||
**自动分配**
|
||||
|
||||
**automatic allocation**
|
||||
|
||||
采用DHCP服务器分配IP地址的另一方式,叫做自动分配,该方式跟动态分配极为相似,但采用此种方式,DHCP服务器尝试维护一个所有过往分配地址清单,而如有某台"旧有"客户端请求一个IP地址,该客户端就会分配到一个跟以前一样的IP地址(也就是说,其曾于此前请求过一个IP地址)。自动分配是一种较为低效的分配IP地址方式,但如有着一个极大的可用IP地址池,这就是一种总能确保某网络中的客户端在每次开机时,获得同样IP地址的巧妙方法。
|
||||
|
||||
|
||||
**静态分配**
|
||||
|
||||
**Static allocation**
|
||||
|
||||
DHCP服务器的IP地址静态分配,是指定义出一些期望在网络上出现的MAC地址,并手动为这些MAC地址都分配上一个唯一IP地址,因此就管理性地建立起一张`MAC-to-IP`关联表。这通常在服务器环境中用到,因为服务器必须使用可预期的IP地址,以可供访问。
|
||||
|
||||
### DHCP范围
|
||||
|
||||
**DHCP Scopes**
|
||||
|
||||
打算配置一台DHCP服务器的网络管理员,作为配置过程的一部分,也需要配置DHCP范围。范围就是网络某个特殊部分的一组IP地址(A scope is a grouping of IP addresses for a particular section of the network)。而每个子网通常有着自己的范围。
|
||||
|
||||
范围也可以是可供DHCP服务器分配的一个连续地址池(a contiguous pool of addresses)。大多数DHCP服务器都提供了从地址池中排除一些地址的功能,以避免将这些地址动态地分配给客户端。这些排除的地址,就通常是那些手动分配给网络中服务器(及网络设备)的IP地址。
|
||||
|
||||
在定义的DHCP范围内部,可以配置诸如下面的一些参数。
|
||||
|
||||
- IP地址范围, IP address range
|
||||
- 子网掩码, subnet mask
|
||||
- 租约持续时间,lease duration
|
||||
- 默认网关,default gateway
|
||||
- DNS服务器,DNS server
|
||||
- WINS服务器,WINS server
|
||||
|
||||
依据所使用的DHCP服务器,也可以使用不同参数,创建出不同的范围,而这通常与不同子网有关。
|
||||
|
||||
### DHCP租期
|
||||
|
||||
**DHCP Leases**
|
||||
|
||||
DHCP所提供的主要优势之一,就是租借IP地址的能力,也就是说1P地址的分配是临时的。通常,当客户端离开网络时,其所分配到的特定IP地址将变成可用,并由DHCP服务器分配给其它设备。
|
||||
|
||||
DHCP租期关乎每次DHCP分配,限定允许用户使用一个分配到的1P地址多长时间。通常是在DHCP范围内对该参数进行管理性配置。每当有客户端重启后,它都必须再次从DHCP服务器请求一个IP地址。而DHCP服务器又通常被配置为给那台特定主机再度分配同样的地址并扩展租期。
|
||||
|
||||
工作站也能手动释放其IP地址,比如在以下情况下。
|
||||
|
||||
- 设备无限期关机,the device is turned off indefinitely
|
||||
- 设备移至另一子网(比如,从有线网络移到无线网络),the device moves to another subnet(e.g, to a wireless network from a wired network)
|
||||
|
||||
租借过程有几个相关的计时器,因此可以肯定在所有网络设备上总是会有一个更新过的IP地址。下面是两个重要的DHCP计时器。
|
||||
|
||||
- **续借(`T1`)计时器**(renewal(T1) timer, 默认是租期的一半):在工作站取得一个IP地址后,此计时器就开始计时,当到达租期的`50%`时,DHCP客户端将向来源DHCP服务器重申租约。
|
||||
- **重新绑定(`T2`)计时器**(rebinding(T2) timer, 默认是租期的`87.5%`):这第二个计时器用在DHCP服务器未有在续借计时器超时后,进行回应或确认的情形。该计数器指出,如租期已过`7/8`, 那么客户端将尝试找到(发出一个DHCP请求)另一能够提供DHCP地址的DHCP服务器。
|
||||
|
||||
有了租借过程及上述有关计时器,就可以肯定总是会及时拥有一个IP地址,且连带不会有任何停止时间,同时自动地有着一种构建于DHCP过程中的冗余机制。
|
||||
|
||||
图14.3中展示了`T1`及`T2`计时器与租期的关系。
|
||||
|
||||

|
||||
|
||||
*图14.3 -- DHCP租期计时器*
|
||||
|
||||
### DHCP选项
|
||||
|
||||
**DHCP Options**
|
||||
|
||||
在DHCP中有一个特殊字段,可用于帮助扩展一些自动配置过程的性能。可在此字段中放入在DHCP RFC中给出的许多不同配置选项。
|
||||
|
||||
> **注意:** BOOTP选项曾被称作“厂商扩展”。
|
||||
|
||||
DHCP提供了`256`选项值,其中仅`254`个是可用的,因为`0`是垫底选项,而`255`是最后选项(0 is the pad option and 255 is the end option)。许多DHCP选项都是通常所了解的经常使用到的参数,包括下面这些。
|
||||
|
||||
- 子网掩码,subnet mask
|
||||
- 域名服务器,domain name server
|
||||
- 域名,domain name
|
||||
|
||||
这些年来,已加入一些额外的DHCP选项,尤其是VoIP用途的那些选项,比如下面这些。
|
||||
|
||||
- 选项`129`: 呼叫服务器IP地址
|
||||
- 选项`135`: 话机相关应用的HTTP代理服务器
|
||||
|
||||
所有这些选项都是直接在DHCP服务器上配置,但不是所有DHCP服务器都提供了设置DHCP选项的能力。如网络管理员要用到这些特性,就应该采用一种企业级别的DHCP服务器。在将小型路由器作为家庭办公环境的DHCP服务器是,就可能不会有这些功能上的益处。
|
||||
|
||||
## 配置DHCP
|
||||
|
||||
**Configuring DHCP**
|
||||
|
||||
### 思科路由器上的DHCP服务器
|
||||
|
||||
**DHCP Servers on Cisco Routers**
|
||||
|
||||
第一步就是在路由器上开启DHCP服务。这是通过使用`service dhcp`命令完成的,如下面所示(as exemplified below)。
|
||||
|
||||
```console
|
||||
Router#configure terminal
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
Router(config)#service dhcp
|
||||
```
|
||||
|
||||
下一步就是创建一个DHCP池,该DHCP池定义出将分配给客户端的IP地址池。在本例中,名为`SUBNET_A`的池将提供来自范围`192.168.1.0/24`的IP地址。
|
||||
|
||||
```console
|
||||
Router(config)#ip dhcp pool SUBNET_A
|
||||
Router(dhcp-config)#network 192.168.1.0 255.255.255.0
|
||||
Router(dhcp-config)#default-router 192.168.1.1
|
||||
Router(dhcp-config)#dns-server 8.8.8.8
|
||||
Router(dhcp-config)#domain-name Network+
|
||||
Router(dhcp-config)#lease 30
|
||||
```
|
||||
|
||||
该DHCP池配置模式(the DHCP Pool Configuration mode)同时也是配置其它DHCP选项的地方。在上面的配置输出中,配置了以下这些参数。
|
||||
|
||||
- 默认网关:`192.168.1.1`(指派到将该路由器作为DHCP服务器所服务网络中的路由器接口地址)
|
||||
- DNS服务器:`8.8.8.8`
|
||||
- 域名:`Network+`
|
||||
- 租期:`30`天
|
||||
|
||||
在需要时,也可以配置一些从`192.168.1.0/24`范围中排除的地址。我们就说要排除路由器接口IP地址(`192.168.1.1`)及`192.168.1.250`到`192.168.1.255`地址范围,从该范围就可手动为网络中的服务器分配地址。这是通过下面的配置完成的。
|
||||
|
||||
```console
|
||||
Router(config)#ip dhcp excluded-address 192.168.1.1
|
||||
Router(config)#ip dhcp excluded-address 192.168.1.250 192.168.1.255
|
||||
```
|
||||
|
||||
可使用下面的命令来查看当前由该路由器DHCP服务器所服务的客户端。
|
||||
|
||||
```console
|
||||
Router#show ip dhcp binding
|
||||
Bindings from all pools not associated with VRF:
|
||||
IP address Client-ID/ Lease expiration Type Hardware address/
|
||||
192.168.1.2 Mar 02 2014 12:07 AM Automatic 0063.6973.636f.2d63
|
||||
```
|
||||
|
||||
在上面的输出中,由该DHCP服务器服务的是单独一台客户端,同时分到到DHCP范围的第一个非排除IP地址:`192.168.1.2`。还可以看到租期超时日期及设备MAC地址。
|
||||
|
||||
### 思科路由器上的DHCP客户端
|
||||
|
||||
**DHCP Clients on Cisco Routers**
|
||||
|
||||
除了DHCP服务器功能,思科路由器同样允许将其接口配置为DHCP客户端。这就是说接口将使用标准DHCP过程,请求到一个地址,而在特定子网上的任何服务器,都能分配该IP地址。
|
||||
|
||||
将一个路由器接口配置为DHCP客户端的命令如下。
|
||||
|
||||
```console
|
||||
Router(config)#int FastEthernet0/0
|
||||
Router(config-if)#ip address dhcp
|
||||
```
|
||||
|
||||
一旦某台DHCP服务器分配了一个IP地址,在路由器控制台上就可以看到下面的通知消息(该消息包含了地址和掩码)。
|
||||
|
||||
```console
|
||||
*Mar 1 00:29:15.779: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0 assigned DHCP address 10.10.10.2, mask 255.255.255.0, hostname Router
|
||||
```
|
||||
|
||||
使用命令`show ip interface brief`,就可以观察到该DHCP分配方式。
|
||||
|
||||
```console
|
||||
Router#show ip interface brief
|
||||
Interface IP-Address OK? Method Status Protocol
|
||||
FastEthernet0/0 10.10.10.2 YES DHCP up up
|
||||
FastEthernet0/1 unassigned YES unset administratively down down
|
||||
```
|
||||
|
||||
### DHCP数据包分析
|
||||
|
||||
**DHCP Packet Analysis**
|
||||
|
||||
为实际掌握在本模块中介绍的这些知识点,将生成一些上述示例中涉及到设备的流量捕获。在配置好DHCP服务器及客户端工作站启动起来后,就会发生`4`步的DHCP过程,可在下面的截屏中观察到。
|
||||
|
||||

|
||||
|
||||
*图14.4 -- DHCP 4步过程*
|
||||
|
||||
下面可以观察到DHCP发现数据包所包含的部分。
|
||||
|
||||

|
||||
|
||||
*图14.5 -- DHCP发现数据包*
|
||||
|
||||
正如你在截屏中看到的,该数据包(DHCP Discover packet)是由客户端发出,将其广播到网络上(目的地址是`255.255.255.255`)。同时还看到其报文类型为“Boot Request(`1`)”。
|
||||
|
||||
下一个数据包就是DHCP提议数据包(DHCP Offer packet),如下面所示。
|
||||
|
||||

|
||||
|
||||
*图14.6 -- DHCP提议数据包*
|
||||
|
||||
该数据包是由服务器(源IP:`192.168.1.1`)发出到广播地址(目的地址:`255.255.255.255`),同时包含了提议的IP地址(`192.168.1.2`)。同时也可看到报文类型为“Boot Reply(`2`)”。
|
||||
|
||||
第三个数据包是DHCP请求数据包(DHCP Request packet)。
|
||||
|
||||

|
||||
|
||||
*图14.7 -- DHCP请求数据包*
|
||||
|
||||
DHCP请求数据包是由客户端发出到广播地址。可以看到报文类型是`Boot Request(1)`。该数据包与最初的DHCP发现数据包类似,但包含了一个非常重要的字段,就是`50`选项: 被请求的IP地址(`192.168.1.2`)(a very important field, which is Option 50: Requested IP Address(192.168.1.2))。这就是在DHCP提议数据包中由DHCP服务器所提供的同一IP地址,而该客户端对其进行了确认和接受。
|
||||
|
||||
DHCP分配过程的最后数据包就是由服务器发出的DCHP确认数据包了(the DHCP ACK packet)。
|
||||
|
||||

|
||||
|
||||
*图14.8 -- DHCP确认选项数据包*
|
||||
|
||||
该数据包发自DHCP服务器并被广播到网络上;其同样包含了在上面的截屏中所看到的一些额外字段。
|
||||
|
||||
- DHCP服务器标识:该DHCP服务器的IP地址(`192.168.1.1`)
|
||||
+ 路由器上配置的所有选项。
|
||||
- 租期:`30`天(以及派生出的早前讨论的过续租时间和重新绑定时间值)
|
||||
- 子网掩码:`255.255.255.0`
|
||||
- 默认网关(路由器): `192.168.1.1`
|
||||
- DNS服务器:`8.8.8.8`
|
||||
- 域名:`Network+`
|
||||
|
||||
## DHCP故障排除
|
||||
|
||||
**Troubleshooting DHCP Issues**
|
||||
|
||||
跟NAT一样,DHCP故障基本上总是因为错误配置造成的(开玩笑说就是第8层问题,意思是人为疏忽,jokingly referred to as Layer 8 issue, meaning somebody messed up)。
|
||||
|
||||
命令`service dhcp`默认是开启的,但有些时候其已被网络管理员因为某些原因关闭了。(作者就曾遇到过有管理员在他们的路由器上敲入`no ip routing`命令后因为紧急的路由故障打电话给思科 -- 真的!)
|
||||
|
||||
如在另一子网上使用一台服务器来管理DHCP配置,就要允许路由器放行DHCP数据包。在地址分配过程中,DHCP用到广播报文(而路由器是不会转发广播报文的),那么就**需要将DHCP服务器的IP地址加入到路由器,以令到路由器将该广播报文作为单播数据包进行转发**。**命令`ip helper-address`**就可以实现这点。这是另一个考试喜欢的问题哦。
|
||||
|
||||
同样可以使用下面的`debug`命令作为排错过程中的部分。
|
||||
|
||||
```console
|
||||
debug ip dhcp server events
|
||||
debug ip dhcp server packet
|
||||
```
|
||||
|
||||
### DNS操作
|
||||
|
||||
**DNS Operations**
|
||||
|
||||
DNS将主机名映射到IP地址(而不是反过来)。这就允许你在web浏览器中浏览一个网址,而无需输入服务器IP地址。
|
||||
|
||||
在主机或路由器想要将一个域名解析到IP地址(或反过来将IP地址解析到域名时),DNS用到UDP `53`号端口。而在两台DNS服务器之间打算同步或分享它们的数据库时,就使用TCP `53`号端口。
|
||||
|
||||
## 配置DNS
|
||||
|
||||
**Configuring DNS**
|
||||
|
||||
如想要容许路由器找到web上的某台DNS服务器,就使用命令`ip name-server 1.1.1.1`,或是服务器相应的地址。
|
||||
|
||||
也可以将某个主机名设置到路由器上的一个IP地址表中来节省时间,或是令到更易于记住要`ping`的或是连接到的哪台设备,如下面的输出所示。
|
||||
|
||||
```console
|
||||
Router(config)#ip host R2 192.168.1.2
|
||||
Router(config)#ip host R3 192.168.1.3
|
||||
Router(config)#exit
|
||||
Router#ping R2
|
||||
Router#pinging 192.168.1.2
|
||||
!!!!!
|
||||
```
|
||||
|
||||
### DNS故障排除
|
||||
|
||||
**Troubleshooting DNS Issues**
|
||||
|
||||
路由器配置默认将会有一个`ip domain-lookup`命令。如此命令已被关闭,则DNS将不工作。某些时候路由器管理员会因避免在输入错误命令时,等待路由器执行数秒DNS查询,而关闭该命令。可通过下面的命令关闭DNS查询。
|
||||
|
||||
`Router(config)#no ip domain-lookup`
|
||||
|
||||
访问控制清单(access control lists, ACL)常常拦阻DNS,那么这是另一个故障原因。使用命令`debug domain`,可在路由器上对DNS进行调试。
|
||||
|
||||
|
||||
## 第14天问题
|
||||
|
||||
1. DHCP simplifies network administrative tasks by automatically assigning `_______` to hosts on a network.
|
||||
2. DHCP uses UDP ports `_______` and `_______`.
|
||||
3. What are the six DHCP states for clients?
|
||||
4. Which command will prevent IP addresses `192.168.1.1` to `192.168.1.10` from being used in the pool?
|
||||
5. Which command will set a DHCP lease of 7 days, 7 hours, and 7 minutes?
|
||||
6. Which command will enable the router to forward a DHCP Broadcast as a Unicast?
|
||||
7. DNS uses UDP port `_______`.
|
||||
8. Which command will set a DNS server address of `192.168.1.1` on your router?
|
||||
9. If the `_______` `_______`-`_______` command has been disabled on your router, then DNS won’t work.
|
||||
10. Which command will debug DNS packets on your router?
|
||||
|
||||
## 第14天问题答案
|
||||
|
||||
1. IP information (IP addresses).
|
||||
2. 67 and 68.
|
||||
3. Initialising, Selecting, Requesting, Bound, Renewing, and Rebinding.
|
||||
4. The `ip dhcp excluded-address 192.168.1.1 192.168.1.10`
|
||||
5. The `lease 7 7 7` command under DHCP Pool Configuration mode.
|
||||
6. The `ip helper-address` command.
|
||||
7. 53.
|
||||
8. The `ip name-server 192.168.1.1` command.
|
||||
9. `ip domain-lookup`.
|
||||
10. The `debug domain` command.
|
||||
|
||||
## 第14天实验
|
||||
|
||||
### 路由器上的DHCP实验
|
||||
|
||||
**拓扑**
|
||||
|
||||

|
||||
|
||||
**实验目的**
|
||||
|
||||
学习可如何将路由器用作DHCP服务器。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 如你使用着家用电脑或笔记本电脑,就将网络适配器设置为自动获取IP地址。在Packet Tracer中也可这样设置。让后使用交叉线将PC连接到路由器的以太网端口。
|
||||
|
||||

|
||||
|
||||
2. 将IP地址`172.16.1.1 255.255.0.0`加入到路由器接口。如忘记了这个怎么配置,就请看看前面的实验。要确保`no shut`该接口。
|
||||
|
||||
3. 配置DHCP地址池。接着为地址配置一个`3`天`3`小时`5`分的租期。最后将`1`到`10`的地址排除在分配给主机的地址之外。假设这些地址已为其它服务器或接口使用。
|
||||
|
||||
```console
|
||||
Router#conf t
|
||||
Router(config)#ip dhcp pool 60days
|
||||
Router(dhcp-config)#network 172.16.0.0 255.255.0.0
|
||||
Router1(dhcp-config)#lease 3 3 5 ← command won’t work on Packet Trer
|
||||
Router1(dhcp-config)#exit
|
||||
Router(config)#ip dhcp excluded-address 172.16.1.1 172.16.1.10
|
||||
Router(config)#
|
||||
```
|
||||
|
||||
4. 执行一个`ipconfig /all`命令,查看是否有IP地址分配到PC。如旧地址仍在使用,就需要执行一下`ipconfig /renew`命令。
|
||||
|
||||
```console
|
||||
PC>ipconfig /all
|
||||
Physical Address................: 0001.C7DD.CB19
|
||||
IP Address......................: 172.16.0.1
|
||||
Subnet Mask.....................: 255.255.0.0
|
||||
Default Gateway.................: 0.0.0.0
|
||||
DNS Servers.....................: 0.0.0.0
|
||||
```
|
||||
|
||||
5. 如想要的话,可回到DHCP地址池配置模式(DHCP Pool Configuration mode),加入一个默认网关及DNS服务器地址,它们也将在主机PC上得到设置。
|
||||
|
||||
```console
|
||||
Router(config)#ip dhcp pool 60days
|
||||
Router(dhcp-config)#default-router 172.16.1.2
|
||||
Router(dhcp-config)#dns-server 172.16.1.3
|
||||
PC>ipconfig /renew
|
||||
IP Address......................: 172.16.0.1
|
||||
Subnet Mask.....................: 255.255.0.0
|
||||
Default Gateway.................: 172.16.1.2
|
||||
DNS Server......................: 172.16.1.3
|
||||
```
|
||||
|
||||
### 路由器上的DNS实验
|
||||
|
||||
**DNS on a Router lab**
|
||||
|
||||
在一台有着某种到互联网连通性的路由器上完成此实验。确保该路由器可以`ping`通比如Google公司的DNS服务器`8.8.8.8`这样的公网IP地址。将该地址配置为一个名字服务器。
|
||||
|
||||
`ip name-server 8.8.8.8`
|
||||
|
||||
接着尝试解析一些公网网站名字,比如通过`ping www.cisco.com`。
|
||||
|
||||
请访问[www.in60days.com](http://www.in60days.com), 观看我是怎么完成这个实验的。
|
||||
|
||||
@@ -1,872 +0,0 @@
|
||||
# 第31天 生成树协议
|
||||
|
||||
**Spanning Tree Protocol**
|
||||
|
||||
___
|
||||
|
||||
Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。
|
||||
|
||||
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 [捐赠译者](https://github.com/gnu4cn/buy-me-a-coffee)。
|
||||
|
||||
___
|
||||
|
||||
## 第31天任务
|
||||
|
||||
- 阅读今天的课文
|
||||
- 完成今天的实验
|
||||
- 阅读ICND2记诵指南
|
||||
- 在[subneting.org](http://subnetting.org/)上花15分钟
|
||||
|
||||
生成树协议(Spanning Tree Protocol, STP)的作用, 是在具备冗余的交换网络拓扑中,允许存在多条物理链路的同时, 通过建立一个无循环逻辑拓扑,阻止网络上循环的发生(the role of Spanning Tree Protocol(STP) is to prevent loops from occuring on your network by creating a loop-free logical topology, while allowing physical links in redundant switched network topologies)。随着网络中所用到交换机数量的急剧增加,以及传播VLAN信息的主要目的下,围绕网络数据帧无尽循环问题开始出现。
|
||||
|
||||
先前CCNA考试仅要求对STP有基本理解。但当前版本则希望对此方面有极好的掌握。
|
||||
|
||||
今天将学习以下内容。
|
||||
|
||||
- STP的需求,the need of STP
|
||||
- STP桥ID,STP Bridge ID
|
||||
- STP根桥选举,STP Root Bridge election
|
||||
- STP开销及优先级,STP cost and priority
|
||||
- STP根及指定端口,STP Root and Designated Ports
|
||||
- STP增强,STP enhancements
|
||||
- STP排错,Troubleshooting STP
|
||||
|
||||
本课对应了以下CCNA大纲要求。
|
||||
|
||||
+ PVSTP运作的配置和验证,configure and verify PVSTP operation
|
||||
- 对根桥选举进行描述, describe root bridge election
|
||||
- 生成树的模式, spanning tree mode
|
||||
|
||||
## STP的需求
|
||||
|
||||
**The Need for STP**
|
||||
|
||||
STP是在IEEE 802.1D标准中定义的。为维护起一个无循环逻辑拓扑,交换机**每两秒**传递桥协议数据单元(Bridge Protocol Data Units, BPDUs)。BPDUs是一些在生成树拓扑中用到、用于传递有关端口、地址、优先级及开销等信息的数据报文。**BPDUs被打上VLAN ID标签。**
|
||||
|
||||
下图31.1显示了网络中循环是如何能创建出来的。因为各台交换机都学到VLAN 20, 同时这些交换机也将其能达到VLAN 20的情况,通告给其它交换机。很快,所有交换机都认为其是VLAN 20流量的源,且造成了一个循环,因此所有以VLAN 20为目的地的帧将自一台交换机往另一台不停传递。
|
||||
|
||||

|
||||
|
||||
*图31.1 -- 循环是如何建立的*
|
||||
|
||||
STP运行着一种算法,用于根据所考虑的特定VLAN,决定出哪些端口保持开放或活动,以及哪些端口需要对特定VLAN关闭。
|
||||
|
||||
**位处生成树域中的所有交换机,都使用BPDUs来沟通和交换报文。**STP利用BPDUs的交换,来确定网络拓扑,而网络拓扑则是由以下三个变量决定的。
|
||||
|
||||
- 与各台交换机相关联的唯一MAC地址(交换机识别符),the unique MAC address(switch identifier) that is associated with each switch
|
||||
|
||||
- 各个交换机端口到根桥的路径开销,the path cost to the Root Bridge associated with each switch port
|
||||
|
||||
- 各个交换机端口的端口识别符(该端口的MAC地址),the port identifier(MAC address of the port) associated with each switch port
|
||||
|
||||
BPDUs都是每两秒发出的,此特性允许实现快速的网络循环探测及拓扑信息交换。BPDUs的两个类型分别是**配置BPDUs**及**拓扑变化通知BPDUs**(Configuration BPDUs and Topology Change Notification BPDUs); 这里只会对配置BPDUs进行说明。
|
||||
|
||||
## IEEE 802.1D的配置BPDUs
|
||||
|
||||
**IEEE 802.1D Configuration BPDUs**
|
||||
|
||||
配置BPDUs是由LAN交换机发出,用于就生成树拓扑进行通信和计算。在交换机端口初始化后,该端口被置为阻塞状态,同时一个BPDU被发送给交换机中的所有端口。**默认情况下,直到其与其它交换机进行配置BPDUs的交换为止,所有交换机最初都假定其为生成树的根。**在某端口仍将其自身配置BPDUs视为最具吸引力(the most attractive)时,其就会持续发送配置BPDUs。这些交换机基于以下4个因素(以列出顺序),确定出最佳配置BPDU(the best Configuration BPDU)。
|
||||
|
||||
1. 有着最低的根桥ID的, lowest Root Bridge ID
|
||||
|
||||
2. 有着到根桥最低根路径开销的,lowest Root path cost to Root Bridge
|
||||
|
||||
3. 有着最低发送者桥ID的,lowest sender Bridge ID
|
||||
|
||||
4. 有着最低发送者端口ID的,lowest sender Port ID
|
||||
|
||||
配置BPDU交换的完成,导致以下动作。
|
||||
|
||||
- 选举出整个生成树域的根桥, a Root Switch is elected for the entire Spanning Tree domain
|
||||
|
||||
- 选举出生成树域中所有非根交换机上的根端口,a Root Port is elected on every Non-Root Switch in the Spanning Tree domain
|
||||
|
||||
- 选举出所有LAN网段中的指定交换机,a Designated Switch is elected for every LAN segment
|
||||
|
||||
- 选举出所有网段的指定交换机的指定端口(根交换机上的所有活动端口也都是指定端口),a Designated Port is elected on the Designated Switch for every segment(all active ports on the Root Switch are also designated)
|
||||
|
||||
- 通过阻塞冗余路径,网络中的循环得以消除,loops in the network are eliminated by blocking redundant paths
|
||||
|
||||
> **注意:** 随着逐步深入本模块内容,这些特性将会一一介绍。
|
||||
|
||||
一旦所有交换机端口都处于转发或阻塞状态,生成树网络(the Spanning Tree network)就完成了收敛, 此时配置BPDUs就由根桥以默认每两秒的间隔发出。这就是**配置BPDUs的发端**。配置BPDUs通过根桥上的指定端口,转发到下游邻居交换机(this is referred to as the origination of Configuration BPDUs. The Configuration BPDUs are forwarded to downstream neighboring switches via the Designated Port on the Root Bridge)。
|
||||
|
||||
当非根桥(a Non-Root Bridge)在其提供了到根桥最优路径的根端口上,接收到一个配置BPDU时,就会通过其指定端口,发送出一个该BPDU的更新版本。这就是**BPDUs的传播**(when a Non-Root Bridge receives a Configuration BPDU on its Root Port, which is the port that provides the best path to the Root Bridge, it sends an updated version of the BPDU via its Designated Port(s). This is referred to as the propagation of BPDUs)。
|
||||
|
||||
**指定端口**则是**指定交换机**上,在转发来自那个LAN网段的数据包到根桥时,有着最低路径开销的端口(**the Designated Port** is a port on **the Designated Switch** that has the lowest cost when forwarding packets from that LAN segment to the Root Bridge)。
|
||||
|
||||
一旦生成树网络得以收敛,便总是会有自根桥传输给STP域内其它交换机的一个配置BPDU在传送。而要记住在生成树网络完成收敛后的配置BPDUs数据流的最简单方法,就是记住以下4条规则。
|
||||
|
||||
1. 配置BPDUs是从根桥发出且通过指定端口发送的, a Configuration BPDU originates on the Root Bridge and is sent via the Designated Port
|
||||
|
||||
2. 配置BPDUs是由非根桥的根端口上接收的,a Configuration BPDU is received by a Non-Root Bridge on a Root Port
|
||||
|
||||
3. 配置BPDU是由非根桥的指定端口上传送的,a Configuration BPDU is transmitted by a Non-Root Bridge on a Designated Port
|
||||
|
||||
4. 在所有单个LAN区段上,都只有一个指定端口(在某台指定交换机上),there is only one Designated Port (on a Designated Switch) on any single LAN segment
|
||||
|
||||
下图31.2演示了该STP域中的配置BPDU数据流,对上面列出的4条简单规则进行了说明。
|
||||
|
||||

|
||||
|
||||
*图31.2 -- STP域中的配置BPDU数据流*
|
||||
|
||||
1. 参考图31.2, 该配置BPDU源自根桥,且是通过根桥上的指定端口发送出来,前往那些非根桥交换机,也就是Switch 2和Switch 3。
|
||||
|
||||
2. 非根桥Switch 2和Switch 3在其有着到根桥最优路径的根端口上,接收到配置BPDU。
|
||||
|
||||
3. Switch 2和Switch 3对接收到的配置BPDU进行修改(更新),让后在其指定端口上转发出去。**Switch 2就是该LAN网段上其自身及Switch 4的指定交换机,Switch 3是该LAN网段上其自身及Switch 5的指定交换机。**而存在于指定交换机上的指定端口,则是在转发来自该LAN区段数据包到根交换机时,有着最低路径开销的端口。
|
||||
|
||||
4. **在Switch 4和Switch 5之间的LAN网段上**,Switch 4被选举为指定交换机,同时指定端口也处于其上。因为在一个网段上只能有一台指定交换机,所以Switch 4和Switch 5之间网段上,Switch 5的端口,就被阻塞掉了。该端口将不会转发任何BPDUs。
|
||||
|
||||
## 生成树端口的各种状态
|
||||
|
||||
**Spanning Tree Port States**
|
||||
|
||||
生成树算法(Spanning Tree Algorithm, STA)定义了STP控制下端口在进入到活动的转发状态之前,需要经历的几种状态。802.1D标准中端口状态有下面这些。
|
||||
|
||||
- 阻塞中 -- 仅接收BPDUs(为期20s), blocking -- BPDUs received only (20 seconds)
|
||||
|
||||
- 侦听中 -- 有BPDUs发出和接收(为期15s),listening -- BPDUs sent and received (15 seconds)
|
||||
|
||||
- 学习中 -- 桥接表被建立起来(为期15s),learning -- bridging table is built (15 seconds)
|
||||
|
||||
- 转发中 -- 发送/接收数据,forwarding -- sending/receiving data
|
||||
|
||||
- 关闭 -- 管理性关闭,disabled -- administratively down
|
||||
|
||||
端口按以下方式在这些状态间依序移动。
|
||||
|
||||
1. 从初始化状态到阻塞中状态
|
||||
|
||||
2. 从阻塞中状态到侦听中状态或关闭状态
|
||||
|
||||
3. 从侦听状态到学习状态或关闭状态
|
||||
|
||||
4. 从学习状态到转发或关闭状态
|
||||
|
||||
5. 从转发状态到关闭状态
|
||||
|
||||
在该过程中用到**STP计时器**来控制收敛。
|
||||
|
||||
- Hello计时器 -- 2s(每个配置BPDU直接的时间)
|
||||
|
||||
- 转发延迟计数器 -- 15s(侦听/控制学习状态的为期),Forward Delay -- 15 seconds (controls durations of Listening/Learning states)
|
||||
|
||||
- 最大存活时间 -- 20s(控制阻塞状态的为期),Max Age -- 20 seconds (controls the duration of the Blocking state)
|
||||
|
||||
**默认收敛时间是30到50秒。**
|
||||
|
||||
### 生成树阻塞状态
|
||||
|
||||
**Spanning Tree Blocking State**
|
||||
|
||||
处于阻塞状态的交换机端口,完成以下动作。
|
||||
|
||||
- 丢弃在该端口上接收到的来自所连接网段的数据帧,discards frames received on the port from the attached segment
|
||||
|
||||
- 丢弃交换自另一端口的数据帧,discards frames switched from another port
|
||||
|
||||
- 不将工作站地址放入到其地址数据库中,does not incorporate station location into its address database
|
||||
|
||||
- 接收BPDUs并将这些BPDUs引导给系统模块,receives BPDUs and directs them to the system module
|
||||
|
||||
- 不传送自系统模块接收到的BPDUs,does not transmit BPDUs received from the system module
|
||||
|
||||
- 接收网络管理报文,并对这些报文进行响应,receives and responds to network management messages
|
||||
|
||||
### 生成树侦听状态
|
||||
|
||||
**Spanning Tree Listening State**
|
||||
|
||||
侦听状态是端口在阻塞状态之后所进入的第一个过渡状态。在STP确定端口应参与到帧转发时,该端口就进入此状态。处于侦听状态的交换机端口完成以下动作。
|
||||
|
||||
- 丢弃接收自所连接网段的帧, discards frames received from the attached segment
|
||||
|
||||
- 丢弃转发自另一端口的帧, discards frames switched from another port
|
||||
|
||||
- 不将工作站地址加入到其地址数据库,does not incorporate station location into its address database
|
||||
|
||||
- 接收BPDUs并将这些BPDUs引导给系统模块,receives BPDUs and directs them to the system module
|
||||
|
||||
- 接收、处理并传送接收自系统模块的BPDUs(在这一点上,与阻塞状态有所不同), receives, processes, and transmits BPDUs received from the system module
|
||||
|
||||
- 对网络管理报文进行接收和响应,receives and responds to network management messages
|
||||
|
||||
### 生成树学习状态
|
||||
|
||||
**Spanning Tree Learning State**
|
||||
|
||||
学习状态是端口所进入的第二个过渡状态。此状态在侦听状态之后,且在端口进入转发状态之前到来。在此状态中,端口学习MAC地址并将学习到的MAC地址装入到其转发表中。处于学习状态的交换机端口完成以下动作。
|
||||
|
||||
- 丢弃接收自所连接网段的帧, discards frames received from the attached segment
|
||||
|
||||
- 丢弃转发自另一端口的帧, discards frames switched from another port
|
||||
|
||||
- 将工作站地址包含(安装)到其地址数据库(这一点与侦听状态有所不同),incorporates(installs) station location into its address database
|
||||
|
||||
- 接收BPDUs并将这些BPDUs引导给系统模块,receives BPDUs and directs them to the system module
|
||||
|
||||
- 接收、处理并传送接收自系统模块的BPDUs, receives, processes, and transmits BPDUs received from the system module
|
||||
|
||||
- 对网络管理报文进行接收和响应,receives and responds to network management messages
|
||||
|
||||
### 生成树转发状态
|
||||
|
||||
**Spanning Tree Forwarding State**
|
||||
|
||||
转发状态是端口在学习状态之后所进入的第三个过渡状态。处于转发状态的端口对帧进行转发。处于转发状态的交换机端口完成以下动作。
|
||||
|
||||
- 转发接收自所连接网段的数据帧
|
||||
|
||||
- 转发交换自另一端口的数据帧(以上两点与学习状态不同,标志着开始转发数据)
|
||||
|
||||
- 将站点地址信息加入(安装)到其地址数据库
|
||||
|
||||
- 接收BPDUs并将这些BPDUs导向给系统模块
|
||||
|
||||
- 处理接收自系统模块的BPDUs
|
||||
|
||||
- 接收网络管理报文并对其进行响应
|
||||
|
||||
|
||||
### 生成树关闭状态
|
||||
|
||||
**Spanning Tree Disabled State**
|
||||
|
||||
关闭状态不是端口正常STP进展的部分。而是端口被网络管理员进行管理性关闭,或因为某种错误条件而被系统所关闭时,就被认为处于关闭状态。关闭的端口完成以下动作。
|
||||
|
||||
- 丢弃接收自所连接网段的数据帧
|
||||
|
||||
- 丢弃转发自另一端口的数据帧
|
||||
|
||||
- 不将工作站地址加入其地址数据库
|
||||
|
||||
- 接收BPDUs但不将这些BPDUs导向给系统模块
|
||||
|
||||
- 不接收来自系统模块的BPDUs
|
||||
|
||||
- 对网络管理报文进行接收和响应
|
||||
|
||||
|
||||
## 生成树桥ID
|
||||
|
||||
**Spanning Tree Bridge ID**
|
||||
|
||||
位于某个生成树域中的交换机,都有一个用于对其进行唯一性区分的桥ID(Bridge ID, BID)。BID还用于协助完成STP根桥(an STP Root Bridge)的选举,STP根桥将在稍后讲到。BID是由一个6字节的MAC地址及2字节的桥优先级(a 2-byte Bridge Priority)构成的8字节字段。下图31.3演示了BID。
|
||||
|
||||

|
||||
|
||||
*图31.3 -- 桥ID格式*
|
||||
|
||||
**桥优先级是该交换机相对于其它交换机的优先级。**桥优先级取值范围是0到65535。思科Catalyst交换机的默认值为32768。
|
||||
|
||||
```console
|
||||
Switch2#show spanning-tree vlan 2
|
||||
|
||||
VLAN0002
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID Priority 32768
|
||||
Address 0009.7c87.9081
|
||||
Cost 19
|
||||
Port 1 (FastEthernet0/1)
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Bridge ID Priority 32770 (priority 32768 sys-id-ext 2)
|
||||
Address 0008.21a9.4f80
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 300
|
||||
|
||||
Interface Port ID Designated Port ID
|
||||
Name Prior.Nbr Cost Sts Cost Bridge ID Prior.Nbr
|
||||
---------- --------- ---- --- ----------- -------------- ---------
|
||||
Fa0/1 128.1 19 FWD 0 32768 0009.7c87.9081 128.13
|
||||
Fa0/2 128.2 19 FWD 19 32770 0008.21a9.4f80 128.2
|
||||
```
|
||||
|
||||
上面输出中的MAC地址是得自交换机背板或管理引擎的硬件地址(the hardware address derived from the switch backplane or supervisor engine, 又名为基底MAC地址,the base MAC address)。**在802.1D标准中,每个VLAN都需要一个唯一BID。**
|
||||
|
||||
大多数思科Catalyst交换机都有一个可用作VLANs的BIDs的、1024个MAC地址的地址池。这些MAC地址被顺序分配,也就是该范围中的第一个MAC地址分配给VLAN 1, 第二个给VLAN 2, 第三个给VLAN 3, 以致第四个第五个等等。这样就提供了支持标准范围VLANs的支持能力,但要支持扩展范围的VLANs,就需要更多的MAC地址。该问题在802.1t(802.1D的技术和编辑修正)标准中得以解决(this issue was resolved in the 802.1t(Technical and Editoral corrections for 802.1D) standard)。
|
||||
|
||||
## 生成树根桥选举
|
||||
|
||||
**Spanning Tree Root Bridge Election**
|
||||
|
||||
默认情况下,紧接着初始化之后,所有交换机最初都假定它们是生成树的根,直到它们与其他交换机交换BPDUs为止。在交换机交换BPDUs时,就举行一次选举,而**网络中有着最低桥ID的交换机就被选举为STP根桥**(the STP Root Bridge)。如有两台或更多交换机有着相同的优先级,则选取有着最低顺序MAC地址的交换机作为根桥。下图31.4对此概念进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.4 -- STP根桥的选举*
|
||||
|
||||
在图31.4中,四台交换机--Switch 1、Switch 2、Switch 3及Switch 4, 处于同一STP域中。默认所有交换机都有着桥优先级32768。为确定哪台交换机将成为根桥,并由此打破不分胜负的局面,STP将基于最低顺序MAC地址选择出根桥交换机(in order to determine which switch will become the Root Bridge, and thus break the tie, STP will select the switch based on the lowest-order MAC address)。那么基于此标准,并参考图31.4给出的信息,Switch 1将被选举为根桥。
|
||||
|
||||
一旦选定,根桥就成为生成树网络的逻辑中心。这并不是说根桥位处该网络的物理中心。确保不要做出那样的错误假设。
|
||||
|
||||
> **注意:** 重要的是记住在STP根桥选举期间,是没有流量在该相同STP域上转发的。
|
||||
|
||||
**思科IOS软件允许管理员对根桥选举施加影响。**此外,管理员**也可以配置一台备份根桥**(adminitrator can also configure a backup Root Bridge)。备份根桥是一台管理员优先选择、在当前根桥失效或从网络中移除时成为根桥的交换机。
|
||||
|
||||
**为生成树域配置一台备份根桥交换机,始终是好的做法。**这样做允许在根桥失效时,网络具有确定性。最常见的做法就是在根桥上配置最高的优先级(也就是优先级为最低数值),并将第二高的优先级配置在当前根桥失效时作为根桥的备份交换机上。下图31.5对此进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.5 -- STP根桥选举(续)*
|
||||
|
||||
基于图31.5中的配置,最有可能被选举作为根桥的交换机是Switch 1。这是因为尽管所有优先级都一样,但该交换机有着最低顺序的MAC地址。而假如Switch 1失效,STP就会选举Switch 2作为根桥,因为它有着第二低的MAC地址。但是这将导致一个次优的网络拓扑(however, this would result in a suboptimal network topology)。
|
||||
|
||||
为解决此问题,管理员可手动修改Switch 1上的优先级到可能的最低值(0), 以及Switch 2的优先级到可能的第二低优先级值(4096)。这样做将确保在根桥(Switch 1)失效时,Switch 2被选举为根桥。因为管理员知道网络拓扑并了解哪台交换机将承担根桥功能,那么就建立了一个具有确定性、更容易排错的网络。**根ID(the Root ID)承载于BPDUs中,包含了根桥的桥优先级及MAC地址。**
|
||||
|
||||
**考试技巧:**如要强制某台交换机成为根桥,可执行下面的命令(同时参见下图31.6)。
|
||||
|
||||
- 可以手动设置优先级
|
||||
|
||||
```console
|
||||
Switch(config)#spanning-tree vlan 2 priority ?
|
||||
<0-61440> bridge priority in increments of 4096
|
||||
```
|
||||
|
||||
- 或者使用宏命令`primary`或`secondary`将其设置为根桥
|
||||
|
||||
```console
|
||||
Switch(config)#spanning-tree vlan 2 root ?
|
||||
primary Configure this switch as primary root for this spanning tree
|
||||
secondary Configure switch as secondary root
|
||||
```
|
||||
|
||||

|
||||
|
||||
*图31.6 -- 强制某台交换机成为根桥*
|
||||
|
||||
```console
|
||||
SwitchC#show spanning-tree vlan 5
|
||||
VLAN0005
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID Priority 0
|
||||
Address 0000.0000.000c
|
||||
This bridge is the root
|
||||
Bridge ID Priority 0 (priority 0 sys-id-ext 5)
|
||||
SwitchD#show spanning-tree vlan 5
|
||||
VLAN0005
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID Priority 4096
|
||||
Address 0000.0000.000d
|
||||
Bridge ID Priority 4096 (priority 8192 sys-id-ext 5)
|
||||
SwitchD#show spanning-tree vlan 5
|
||||
VLAN0005
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID Priority 4096
|
||||
Address 0000.0000.000d
|
||||
Bridge ID Priority 4096 (priority 8192 sys-id-ext 5)
|
||||
```
|
||||
|
||||
注意到VLAN编号通常会被加到优先级数字上,如下面的输出展示的那样。
|
||||
|
||||
```console
|
||||
SwitchA#show spanning-tree vlan 5
|
||||
Bridge ID Priority 32773 (priority 32768 sys-id-ext 5)
|
||||
Address 0013.c3e8.2500
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 300
|
||||
Interface Role Sts Cost Prio.Nbr Type
|
||||
--------- ---- ---- ---- -------- ----
|
||||
Fa0/15 Desg FWD 19 128.15 P2p
|
||||
Fa0/18 Desg FWD 19 128.18 P2
|
||||
```
|
||||
|
||||
## 生成树开销及优先级
|
||||
|
||||
**Spanning Tree Cost and Priority**
|
||||
|
||||
**STP使用开销及优先级数值来确定到根桥的最优路径。**这些数值此时用在根端口(the Root Port)的选举中,根端口选举将在接着的小节中讲到。**掌握开销及优先级数值的计算,对于理解为何生成树选举一个端口而不是另一个,是十分重要的。**
|
||||
|
||||
生成树算法的一项关键功能,就是尝试提供出网络中的各台交换机自根桥的最短路径。而该最短路径一旦选定,就被用于转发数据,而将其它冗余链路置为阻塞状态。生成树算法用到两个数值来确定哪个端口将被置为转发状态(也就是到根桥的最优路径),以及哪些端口将被置为阻塞状态。这两个数值就是端口开销和端口优先级。二者都将在下面的小节讲到。
|
||||
|
||||
### 生成树端口开销
|
||||
|
||||
**Spanning Tree Port Cost**
|
||||
|
||||
802.1D规格分配16位(短整数)基于端口带宽的默认端口开销值给每个端口。因为管理员同时有着手动分配端口开销值(1和65535之间)的能力,所以该16位值就只用在那些未有具体配置了端口开销的端口。下表31.1列出了在应用短整数方式计算端口开销时各种类型端口的默认值。
|
||||
|
||||
*表 31.1 -- 默认STP端口开销值*
|
||||
|
||||
<table>
|
||||
<tr><th>带宽</th><th>默认端口开销</th></tr>
|
||||
<tr><td>4Mbps</td><td>250</td></tr>
|
||||
<tr><td>10Mbps</td><td>100</td></tr>
|
||||
<tr><td>16Mbps</td><td>62</td></tr>
|
||||
<tr><td>100Mbps</td><td>19</td></tr>
|
||||
<tr><td>1Gbps</td><td>4</td></tr>
|
||||
<tr><td>10Gbps</td><td>2</td></tr>
|
||||
</table>
|
||||
|
||||
在思科IOS Catalyst交换机中,可通过执行`show spanning-tree interface [name]`查看默认端口开销值,如下面的输出中演示的那样,该输出展示了一个FastEthernet接口的默认短整数端口开销。
|
||||
|
||||
```console
|
||||
|
||||
VTP-Server#show spanning-tree interface FastEthernet0/2
|
||||
Vlan Role Sts Cost Prio.Nbr Type
|
||||
---- ---- --- ---- -------- ----
|
||||
VLAN0050 Desg FWD 19 128.2 P2p
|
||||
```
|
||||
|
||||
下面的输出显示了同样的长整数端口开销分配(the following output shows the same for long port cost assignment)。
|
||||
|
||||
```console
|
||||
|
||||
VTP-Server#show spanning-tree interface FastEthernet0/2
|
||||
Vlan Role Sts Cost Prio.Nbr Type
|
||||
---- ---- --- ---- -------- ----
|
||||
VLAN0050 Desg FWD 200000 128.2 P2p
|
||||
```
|
||||
|
||||
重要的是记住带有更低的(数值)开销的端口是更为首选的端口;端口开销越低,那个特定端口被选举为根端口的可能性就越高(the lower the port cost, the higher the probability of that particular port being elected the Root Port)。**端口开销全局重要,并影响整个生成树网络。**该数值被配置在生成树域中的所有非根交换机上(on all Non-Root Switches in the Spanning Tree domain)。
|
||||
|
||||
## 生成树的根端口及指定端口
|
||||
|
||||
**Spanning Tree Root and Designated Ports**
|
||||
|
||||
STP选举出两种类型用于转发BPDUs的端口:指向根桥的根端口,以及指向根端口另一边的指定端口(STP elects two types of ports that are used to forward BPDUs: the Root Port, which points towards the Root Bridge, and the Designated Port, which points away from the Root Bridge)。掌握这两种端口类型的作用及其选举过程,十分重要。
|
||||
|
||||
### 生成树根端口选举
|
||||
|
||||
**Spanning Tree Root Port Election**
|
||||
|
||||
生成树算法定义了三种端口类型:**根端口、指定端口及非指定端口**。这些端口类型是有生成树算法选举出来,并被置为相应状态(比如转发中或阻塞中状态)。在生成树选举过程中,如存在悬而不决的情况,就会用到以下数值作为打破僵局方式。
|
||||
|
||||
1. 最低的根桥ID, lowest Root Bridge ID
|
||||
2. 到根桥的最低根路径开销, lowest Root path cost to Root Bridge
|
||||
3. 最低的发送方桥ID, lowest sender Bridge ID
|
||||
4. 最低的发送方端口ID,lowest sender Port ID
|
||||
|
||||
> **注意:** 为掌握生成树选举及指定出在任何给定情形下不同端口类型,那么重要的是记住这些打破平局的标准了。这些标准不仅要对其进行测试,还要为真实世界中设计、部署及支持互联网络而牢固掌握这个知识点。
|
||||
|
||||
生成树**根端口是在该设备将数据包转发到根桥时,提供出最优路径,或最低开销的端口。**也就是说,根端口是接收到该交换机的最优BPDU的端口,而这又表明了在路径开销上其是到根桥的最短路径。根端口是基于根桥路径开销选举出的。
|
||||
|
||||
根桥路径开销又是基于连接到根桥的所有链路的累积开销(路径开销)计算出的。路径开销是各个端口贡献给根桥开销的数值(the path cost is the value that each port contributes to the Root Bridge path cost)。因为此概念通常是十分令人困惑,在下图31.7中对其进行了演示。
|
||||
|
||||
> **注意:** 图31.7中除了一条链路外,其它链路都是GigabitEthernet链路。应假定用于端口开销计算的方法是传统的802.1D方法。因此,默认GigabitEthernet的端口开销就是4, 同时FastEthernet是19。
|
||||
|
||||

|
||||
|
||||
*图31.7 -- 生成树根端口选举*
|
||||
|
||||
> **注意:** 下面的解释对网络中交换机間的BPDUs数据流进行了说明。与其它信息一起,这些BPDUs包含了根桥路径开销信息,而根桥路径开销在接收交换机上的入站端口处被增加(along with other information, these BPDUs contain the Root Bridge path cost information, which is incremented by the ingress port on the receiving switch)。
|
||||
|
||||
1. 根桥发出一个带有根桥路径开销值0的BPDU,因为其端口直接位于该根桥上。此BPDU发送给Switch 2和Switch 3。
|
||||
2. 当Switch 2和Switch 3接收到来自根桥的BPDU时,它们便基于各自入站借口加上其自己的路径开销。因为Switch 2和Switch 3都是通过GigabitEthernet连接与根桥相连,所以它们将从根桥接收到的路径开销值(0)与它们的GigabitEthernet路径开销值(4)相加。Switch 2及Switch 3经由GigabitEthernet0/1到根桥的根桥路径开销也就是0+4=4。
|
||||
3. Switch 2和Switch 3将新的BPDUs送出至其各自的邻居,也就是Switch 4和Switch 6。这些BPDUs包含了新的累积值(4)作为根桥路径开销。
|
||||
4. 当Switch 4和Switch 6接收到分别来自Switch 2和Switch 3的BPDUs时,它们根据入站借口对接收到的**根桥路径开销**予以增长。因为使用的是GigabitEthernet, 从Switch 2和Switch 3接收到的值被加上4。那么在Switch 4和Switch 6上经由其各自GigabitEthernet0/1接口的根桥路径开销就是0+4+4=8。
|
||||
5. Switch 5接收到两个BPDUs:一个来自Switch 4,另一个来自Switch 6。接收自Switch 4的BPDU有着根桥路径开销0+4+4+4=12。接收自Switch 6的BPDU有着根桥路径开销0+4+4+19=27。因为包含于接收自Switch 4的BPDU中的根桥路径开销值好于接收自Switch 6的,Switch 5将选举GigabitEthernet0/1作为**根端口**(the Root Port)。
|
||||
|
||||
> **注意:** 交换机2、3、4、6都将选举其各自的GigabitEthernet端口作为根端口。
|
||||
|
||||

|
||||
|
||||
**更多解释**
|
||||
|
||||
**Further Explanation**
|
||||
|
||||
为更为细致的进行解释(To explain further), 并有助于掌握根端口选举过程,假定上图31.7中所有端口都是GigabitEthernet端口。这就意味着在上面的第5布中,Switch 5将接收到两个带有相同根桥ID的BPDUs,且两个都有着0+4+4+4=12的根路径开销值。为了选举出根端口,STP将进入到下面所列出的打破僵局标准的下一选项(前两个选项已经用到,就被移除了)。
|
||||
|
||||
1. 最低发送方桥ID,lowest sender Bridge ID
|
||||
2. 最低发送方端口ID,lowest sender Port ID
|
||||
|
||||
基于第三个选举标准,Switch 5将优先使用来自Switch 4的BPDU,因为Switch 4的BID(0000.0000.000D)低于Switch 6的BID(0000.0000.000F)。Switch 5选出端口GigabitEthernet0/1作为根端口。
|
||||
|
||||
### 生成树指定端口的选举
|
||||
|
||||
**Spanning Tree Designated Port Election**
|
||||
|
||||
与根端口不同,指定端口是指向与STP根相反方向的端口。该端口是指定设备(交换机)连接LAN的端口。指定端口同时也是在将来自LAN的数据包转发给根桥时有着最低路径开销的端口。
|
||||
|
||||
> **注意:** 一些人将指定端口当作是指定交换机。这两个术语是可以互换的,且指的是同一个东西。也就是说,这是用于将来自某个特定LAN网段的帧,转发到根桥的交换机,或端口。
|
||||
|
||||
**指定端口的主要目的是阻止循环。**在超过一台的交换机连接到同一网段时,所有交换机都将尝试对在那个网段上接收到的某个帧进行转发。这样的默认行为可能导致该帧的多个拷贝被多台交换机同时转发--从而造成网络循环。为避免这种默认行为,**STP在所有网段上都选举出一个指定端口。***这是因为根桥路径开销将始终为0。*STA的指定端口选举过程在下图31.8中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.8 -- 生成树指定端口选举*
|
||||
|
||||
1. 在根桥和Switch 2之间的网段上,根桥的GigabitEthernet0/1被选举为指定端口,因为该端口有着较低的根桥路径开销0。
|
||||
|
||||
2. 在根桥和Switch 3之间的网段,根桥的GigabitEthernet0/2端口被选举作为指定端口,因为其有着较低的根桥路径开销0。
|
||||
|
||||
3. 在Switch 2和Switch 4之间的网段,Switch 2上的GigabitEthernet0/2被选举为指定端口,因为Switch 2有着最低的根桥路径开销4。
|
||||
|
||||
4. 在Switch 3和Switch 6之间的网段,Switch 3上的GigabitEthernet0/2端口被选举为指定端口,因为Switch 3有着最低的根桥路径开销4。
|
||||
|
||||
5. 在Switch 4和Switch 5之间的网段,Switch 4上的GigabitEthernet0/2端口被选举为指定端口,因为Switch 4有着最低的根桥路径开销8。
|
||||
|
||||
6. 在Switch 5和Switch 6之间的网段,Switch 6上的GigabitEthernet0/2被选举为指定端口,因为Switch 6有着最低的根桥路径开销8。
|
||||
|
||||
非指定端口(the Non-Designated Port)实际上不是一种生成树端口类型。而是其作为一个术语,只是简单地表示某个不作为某LAN网段上指定端口的端口。**非指定端口将始终被STP置为阻塞状态。**基于根端口及指定端口的计算,下图31.9中展示了用于根端口和指定端口选举示例的交换网络的最终生成树拓扑(Based on the calculation of Root and Designated Ports, the resultant Spanning Tree Topology for the switched network that was used in the Root Port and Designated Port election examples is shown in Figure 31.9 below)。
|
||||
|
||||

|
||||
|
||||
*图31.9 -- 已收敛的生成树网络*
|
||||
|
||||
## 思科生成树增强
|
||||
|
||||
**Cisco Spanning Tree Enhancements**
|
||||
|
||||
如早前指出的那样,STP对其所在环境做出以下两点假设。
|
||||
|
||||
- 所有链路都是双向的,而能够发送和接收桥协议数据单元。
|
||||
- 所有交换机都能正常地接收、处理及发出BPDUs
|
||||
|
||||
在现实世界的网络中,这两个假设并不总是正确。在这种情况下,STP就可能无法阻止网络中循环的形成(in situations where that is the case, STP may not be able to prevent loops from being formed within the network)。正是由于存在这种可能,且为提升基本的802.1D STA性能,思科引入了一些对IEEE 802.1D标准的增强,将在下面进行说明。
|
||||
|
||||
### 端口快速
|
||||
|
||||
**Port Fast**
|
||||
|
||||
端口快速是一项典型地对连接了一台主机的端口或接口开启的特性。当该端口上的链路起来时,交换机将跳过STA的第一阶段并直接过渡到转发状态。与通常的看法相反,端口快速特性并不在选定的端口上关闭生成树。这是因为就算带有端口快速特性,该端口仍能发送并接收BPDUs。
|
||||
|
||||
这在该端口所连接的诸如某台工作站的网卡这样的,没有发送或响应BPDUs的网络设备时不是问题。但如该端口所连接的设备确实在发出BPDUs,比如另一台交换机,这可能造成交换循环。这是因为该端口跳过了侦听及学习阶段而立即进入到转发状态(this may result in a switching loop. This is because the port skips the Listening and Learning states and proceeds immediately to the Forwarding state)。端口快速简单地令到该端口相较经历所有STA步骤,快得多地开始转发以太网帧。
|
||||
|
||||
### BPDU守护
|
||||
|
||||
**BPDU Guard**
|
||||
|
||||
**BPDU守护特性用于保护生成树域免受外部影响。BPDU默认是关闭的,但建议在所有开启了端口快速特性的端口上予以开启。**在配置了BPDU守护特性的端口接收到一个BPDU时,就立即转变成错误关闭状态(the errdisable state)。
|
||||
|
||||
在那些关闭了生成树的端口上,这样做阻止了错误信息注入到生成树域中去。BPDU守护的运行,结合端口快速特性,在下面及后续的图31.10、31.11及31.12中,进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.10 -- 掌握BPDU守护*
|
||||
|
||||
图31.10中,Switch 1到Host 1的连接上**开启了端口快速。那么在初始化后,该端口便过渡到转发状态,这就消除了该端口在没有省略掉STA而要走完侦听及学习状态所要花掉的30秒。**因为该网络主机是一台工作站,其不在那个端口上发送BPDUs。
|
||||
|
||||
要么因为偶然,或是由于一些其它恶意目的,Host 1从Switch 1上断开连接。使用同一端口,SWitch 3被连接到Switch 1。Switch 3同时也连接到Switch 2。因为端口快速在连接Switch 1到Switch 3的端口上开启,此端口就从初始化变成转发状态,从而省略掉了一般STP初始化过程。此端口将接收并处理所有由Switch 3发送的BPDUs,如下图31.11所示。
|
||||
|
||||

|
||||
|
||||
*图31.11 掌握BPDU守护(续)*
|
||||
|
||||
基于上面所演示的端口状态,可很快看出一个循环将在此网络中如何建立起来。为阻止此情形的发生,就应在所有的那些开启了端口快速的端口上,开启BPDU守护。这在下面的图31.12中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.12 -- 掌握BPDU守护(续)*
|
||||
|
||||
在端口快速端口上带有BPDU守护下,在Switch 1接收到来自Switch 3的一个BPDU时,就立即将该端口转变成错误关闭状态(immediately transitions the port into the errdisable state)。结果就是STP计算不受该冗余链路的影响,且该网络不会有任何循环。
|
||||
|
||||
### BPDU过滤器
|
||||
|
||||
**BPDU Filter**
|
||||
|
||||
BPDU守护与BPDU过滤器两个特性常常混淆或甚至被想成是同一个特性。但它们是不同的,而掌握它们之间的区别就很重要。在某个端口上开启了端口快速时,该端口将发出BPDUs且将接受及处理收到的BPDUs。BPDU守护特性阻止该端口接收任何的BPDUs,但不阻止其发送BPDUs。如有接收到任何BPDUs,该端口就将成为错误关闭端口(if any BPDUs received, the port will be errdisabled)。
|
||||
|
||||
而BPDU过滤器特性有着两方面的功能(the BPDU Filter feature has dual functionality)。当在接口级别配置上BPDU过滤器时,它将有效地在选定端口上,通过阻止这些端口发送或接收所有BPDUs,而关闭这些端口的STP。而在全局配置了BPDU过滤器,并与全局端口快速配合使用是,它会将任何接收到BPDUs的端口,还原成端口快速模式。下图31.13对此进行了演示。
|
||||
|
||||

|
||||
|
||||
### 循环守护
|
||||
|
||||
**Loop Guard**
|
||||
|
||||
循环守护特性用于防止生成树网络中循环的形成。循环守护对根端口及阻塞端口进行探测,并确保它们继续接收BPDUs。当交换机在阻塞端口上接收到BPDUs,该信息就被忽视,因为来自根桥的最佳BPDU仍通过根端口,正在接收着。
|
||||
|
||||
如该交换机链路是运行的,又没有接收到BPDUs(因为该链路是单向链路,due to a unidirectional link),该交换机就假设将该链路开启是安全的,那么该端口就转换到转发状态并开始对接收到的BPDUs进行中继。如有某台交换机连接到该链路的另一端,这将有效地建立起一个生成树循环。下图31.14对此概念进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.14 -- 掌握循环守护*
|
||||
|
||||
图31.14中,该生成树网络已完成收敛,从而所有端口都处于阻塞或转发状态。但是,因为一条单向链路,Switch 3上的阻塞端口停止了接收来自Switch 2上的指定端口的BPDUs。Switch 3假定该端口可被转换成转发状态,并开始此转换。该交换机此时就将接收到的BPDUs中继出那个端口,从而导致网络循环。
|
||||
|
||||
在循环守护开启时,Switch 3保持对所有非指定端口的追踪。在端口持续接收到BPDUs时,该端口就是好的;但如该端口停止接收到BPDUs,就被转移到循环不一致状态(a loop-inconsistent state)。也就是说,在循环守护开启时,STP端口状态机(the STP port state machine)被修改为在缺少BPDUs时,阻止该端口从非指定端口角色转变成指定端口角色(in other words, when Loop Guard is enabled, the STP port state machine is modified to prevent the port from transitioning from the Non-Designated Port role to the Designated Port role in the absence of BPDUs)。在应用循环守护时,应知道以下这些应用准则。
|
||||
|
||||
- 不能在开启了根守护(Root Guard)的交换机上开启循环守护, Loop Guard cannot be enabled on a switch that also has Root Guard enabled
|
||||
- 循环守护不影响上行快速(Uplink Fast)或骨干快速(Backbone Fast)的运行, Loop Guard does not affect Uplink Fast or Backbone Fast operation
|
||||
- 循环守护只是必须在点对点链路上开启,Loop Guard must be enabled on Point-to-Point links only
|
||||
- 循环守护的运行不受生成树计时器的影响,Loop Guard operation is not affected by the Spanning Tree timers
|
||||
- 循环守护无法真正探测出一条单向链路,Loop Guard cannot actually detect a unidirectional link
|
||||
- 循环守护无法在端口快速或动态VLAN端口上开启,Loop Guard cannot be enabled on Port Fast or Dynamic VLAN ports
|
||||
|
||||
### 根守护
|
||||
|
||||
**Root Guard**
|
||||
|
||||
**根守护特性阻止指定端口成为根端口。**如在某个根守护特性开启的端口上接收到一个优良BPDU(a superior BPDU), 根守护将该端口移入根不一致状态(a root-inconsistent state), 从而维持当前根桥状态(thus maintaining the current Root Bridge status quo)。下图31.15对此概念进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.15 -- 掌握根守护*
|
||||
|
||||
图31.15中,Switch 3被加入到当前STP网络,并发出比当前根桥更优质的BPDUs。在通常情况下,STP将重新计算整个拓扑,同时Switch 3将会被选举为根桥。但因为当前根桥及Switch 2上的指定端口上开启了根守护特性,在接收到来自Switch 3的优良BPDUs时,两台交换机都会将这些指定端口置为根不一致状态。这样做保护了生成树拓扑。
|
||||
|
||||
**根守护阻止某个端口成为根端口,因此确保该端口始终是指定端口。**与其它可同时在全局基础上开启的思科STP增强不同,根守护必须手动在所有根桥不应出现的端口上开启(unlike other STP enhancements, which can also be enabled on a global basis, Root Guard must be manually enabled on all ports where the Root Bridge should not appear)。因为这点,在LAN中STP的设计和部署时确保拓扑的确定性就很重要(because of this, it is important to ensure a deterministic topology when designing and implementing STP in the LAN)。根守护令到网络管理员可以强制指定网络中的根桥(Root Guard enables an administrator to enforce the Root Bridge palcement in the network), 确保不会有客户设备因疏忽或其它原因而成为生成树的根,所以根守护常用在ISP网络面向客户设备的边界(so it is usually used on the network edge of the ISP towards the customers's equipment)。
|
||||
|
||||
### 上行快速
|
||||
|
||||
**Uplink Fast**
|
||||
|
||||
**上行快速特性提升了在主要链路失效(根端口的直接失效)时,更快的到冗余链路的切换**(the Uplink Fast feature provides faster failover to a redundant link when the primary link fails(i.e., direct failure of the Root Port))。该特性的主要目的是在出现上行链路失效时,提升STP的收敛时间。**该特性在带有到分布层冗余链路的接入层交换机上用的最多**;这也是其名称的由来。
|
||||
|
||||
在接入层交换机有着到分布层的双宿主时,其中一条链路被被STP置为阻塞状态以防止环回(when Access Layer switches are dual-homed to the Distribution Layer, one of the links is placed into a Blocking state by STP to prevent loops)。在到分布层的主链路失效时,处于阻塞状态的端口就必须在开始转发流量之前,转换到侦听和学习状态。这导致在交换机能够转发以其它网段为目的的帧之前,有一个30秒的延迟。上行快速的运作,在下图31.16中进行演示。
|
||||
|
||||

|
||||
|
||||
*图31.16 -- 掌握上行快速*
|
||||
|
||||
图31.16中,在Access 1和Distribution 1之间的链路上出现了失效,Distribution 1是STP根桥,此失效意味着STP会将Access 1和Distribution 2之间的链路移入转发状态(也就是"阻塞中">"侦听中">"学习中">"转发中",Blocking > Listening > Learning > Forwarding)。侦听和学习阶段各耗时15秒,所以该端口只需在总共30秒过去之后,便开始转发数据帧。**而在上行快速开启时,到分布层的后备端口被立即置为转发状态,从而带来无网络宕机时间的结果。**下图31.17对此概念进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.17 -- 掌握上行快速(续)*
|
||||
|
||||
### 骨干快速
|
||||
|
||||
**Backbone Fast**
|
||||
|
||||
骨干快速特性提供了STP域中一条非直连链路出现失效时的快速切换。在交换机从其指定桥(在其根端口上)接收到一个较差BPDU时,快速切换便发生了。一个较差BPDU表明指定桥失去了其到根桥的连接,所以该交换机知悉存在上游失效而无需等待计时器超时就改变根端口。下图31.18中对此进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.18 -- 掌握骨干快速*
|
||||
|
||||
图31.18中,Switch 1和Switch 2之间的链路挂掉了。Switch 2探测到这个问题并发出BPDUs表明它是根桥。在来自Switch 1的BPDUs信息仍然保存着的Switch 3上,接收到较差的BPDUs。
|
||||
|
||||
Switch 3将忽略这些较差BPDUs,直到最大存活值(the Max Age value)超时。在此期间,Switch 2继续将BPDUs发送给Switch 3。在最大存活时间超时后,Switch 3会将来自根桥、存储的BPDU信息老化排除,并转换到侦听状态,接着将把从根桥接收到的BPDU发送出去,发送给Switch 2。
|
||||
|
||||
因为此BPDU好于Switch 2自己的,Switch 2将停止发送BPDUs,同时Switch 2和Switch 3之间的端口经历侦听及学习状态的转换,并最终进入到转发状态。STP过程的此默认运行方式将意味着Switch 2将至少在50秒内无法转发数据帧。
|
||||
|
||||
骨干快速特性包含了一种允许在接收到一个较差的BPDU时,立即检查某个端口上存储的BPDU信息是否仍然有效的机制。此特性通过一种叫做RLQ PDU 的新协议数据单元及根链路请求实现的(this is implemented with a new PDU and the Root Link Query(RLQ), which is referred to as the RLQ PDU)。
|
||||
|
||||
紧接着较差BPDU的接收,该交换机将在除接收该较差BPDU的端口外的所有非指定端口上,发出一个RLQ PDU。如该交换机是根桥或失去了到根桥的连接,就将对对该RLQ进行响应。否则,该RLQ将向上游传播(otherwise, the RLQ will be propagated upstream)。如该交换机在其根端口上接收到一个RLQ响应,那么到根桥的连通性仍然是完整的。如该响应实在非根端口上接收到的,就意味着到根桥的连通性已丢失,同时在交换机上的本地交换生成树必须重新计算且最大存活时间计数器被置为超时,如此就能重新找到一个新的根端口(if the response is received on a Non-Root Port, it means that connectivity to the Root Bridge is lost, and the local switch Spanning Tree must be recalculated on the switch and the Max Age timer expired so that a new Root Port can be found)。此概念在下图31.19中进行了演示。
|
||||
|
||||

|
||||
|
||||
*图31.19 -- 掌握骨干快速(续)*
|
||||
|
||||
参考图31.19, 紧接着较差BPDU的接收,Switch 3在除了该BPDU所接收到的端口之外的所有非指定端口上,发出一条RLQ请求。根桥功过一条从其指定端口发出的RLQ回应,对Switch 3的RLQ请求进行响应。因为是在Switch 3的根端口上接收到的该响应,该响应被认为是一条肯定响应(a positive response)。但如该响应是在非根端口上接收到的,那么该响应就被认为是否定的且该交换机将需要再度完成整个的生成树计算。
|
||||
|
||||
基于Switch 3上接收到的肯定响应,就可以老化排除连接到Switch 2的端口而无需等待最大存活时间计数器过期(based on the positive response received on Switch 3, it can age out the port connected to Switch 2 without waiting for the Max Age timer to expire)。但是该端口仍必须经过侦听及学习状态。而通过立即将最大存活时间计数器进行老化清楚,骨干快速将收敛时间从50秒(20秒的最大存活时间 + 30秒的侦听和学习时间)减少到30秒(侦听和学习状态的时间)。
|
||||
|
||||
RLQs的类型有两种:RLQ请求和RLQ响应。**RLQ请求典型地在根端口上发出,用以检查到根桥的连通性。所有RLQ响应都是在指定端口上发出的。**因为RLQ请求包含了发送该RLQ响应的根桥BID,如到根桥路径中其它交换机仍能到达该RLQ响应中所指定的根桥,其就会响应给发出RLQ请求的交换机(because the RLQ request contains the BID of the Root Bridge that sent it, if another switch in the path to the Root Bridge can still reach the Root Bridge specified in the RLQ response, it will respond back to the sending switch)。如路径上的交换机已不能到达RLQ响应中的根桥,该交换机就简单地通过其根端口,往根桥转发该查询。
|
||||
|
||||
> **注意:** RLQ PDU有着与普通BPDU同样的包格式,唯一区别在于RLQ PDU包含了两个用于请求和回应的思科SNAP(子网接入协议,[Subnetwork Access Protocol](https://en.wikipedia.org/wiki/Subnetwork_Access_Protocol))地址。
|
||||
|
||||
## STP排错
|
||||
|
||||
**Troubleshooting STP**
|
||||
|
||||
大多数二层故障都跟域中某种循环有关,而这又引起与其相关的多种问题,包括网络停机。在进行交换机配置的工作及将某台设备插入或拔出时,应确保没有在操作过程中建立循环。为缓和这类问题,就通常应在这些交换机上配置生成树协议,以避免出现在网络中的某处偶然创建出循环的情形(to mitigate against such problems, you should usually configure Spanning Tree Protocol on switches in order to avoid situations that might occur if you happen to accidently create a loop somewhere in the network)。
|
||||
|
||||
网络中的所有交换机都是靠MAC地址进行通信的。在数据包进入时,就对MAC地址进行分析,从而基于二层头部中的目的MAC地址,确定出那个数据包的去向。网络中的所有设备都有着其自己的MAC地址,所以所有数据包在其走向上都是具体的。**不幸的是,像是广播及多播数据包前往交换机的所有端口。**如一个广播帧到达某个交换机端口,它将那个广播拷贝到可能连接到那台交换机的每台其它设备。此过程在网络中有着循环时,通常能是个问题。
|
||||
|
||||
应记住MAC地址数据包内部没有超时机制。**在TCP/IP中(in the case of TCP/IP),IP协议在其头部有一个名为TTL(存活时间,Time to Live)的功能,该功能就是通过路由器的跳数, 而不是事实上的时间单位。**所以如果IP数据包碰巧处于循环中而通过多台路由器,它们将最终超时而被从网络中移除。但是,交换机并未提供那种机制。二层数据帧理论上可以永久循环,因为没有将其超时的机制,意味着如创建出一个循环,那个循环就会一直在那里,直到手动将其从网络中移除。
|
||||
|
||||
如正将一台工作站插入到网络时,某个广播帧到达该工作站,那么该广播数据帧将在那个点终结而不会是个网络问题。但是,如在交换机侧端口进行了不当配置,或两端都插入了交换机而未开启STP,这将导致二层域内的广播风暴。广播风暴的发生,是因为广播数据包被转发到了所有其它端口,因此广播数据包保持继续存在并进入到同一网线上的另一交换机,引起二层循环。广播风暴能够引起高的资源使用甚至网络宕机。
|
||||
|
||||
如在这样的配置不当的网络上开启STP,交换机将识别到循环的出现,并会阻塞确定端口以避免广播风暴。而所有交换机中的其它端口则继续正常运作,所以网络不受影响。如未有配置STP,那么唯一可做的就是拔掉引起问题的网线,或者在还能对交换机进行操作的时候,将其管理性关闭。
|
||||
|
||||
STP故障通常有以下三类(STP issues usually fall within the following three categories)。
|
||||
|
||||
- 不正确的根桥, incorrect Root Bridge
|
||||
- 不正确的根端口, incorrect Root Port
|
||||
- 不正确的指定端口,incorrect Designated Port
|
||||
|
||||
### 不正确的根桥
|
||||
|
||||
优先级和基础MAC地址决定根桥是否是正确的(priority and base MAC addresss decide whether the Root Bridge is incorrect)。可以执行`show spanning-tree vlan <vlan#>`命令查看MAC地址及交换机优先级。而运用`spanning-tree vlan <vlan#> priority <priority>`命令修复此问题。
|
||||
|
||||
### 不正确的根端口
|
||||
|
||||
根端口提供了自该交换机到根桥最快的路径,同时开销是跨越整个路径的累积(the Root Port provides the fastest path from the switch to the Root Bridge, and the cost is cumulative across the entire path)。如怀疑存在正确的根端口,就可执行`show spanning-tree vlan <vlan#>`命令。如根端口是不正确的,可执行`spanning-tree cost <cost>`命令对其进行修复。
|
||||
|
||||
### 不正确的指定端口
|
||||
|
||||
指定端口是将某个网络区段连接到网络其它部分最低开销的端口(the Designated Port is the lowest cost port connecting a network segment to the rest of the network)。如怀疑存在指定端口问题,就可以执行`show spanning-tree vlan <vlan#>`及`spanning-tree cost <cost>`命令。
|
||||
|
||||
而可对相关事件进行调试的一个有用的STP排错命令,就是`Switch#debug spanning-tree events`。
|
||||
|
||||
## 第31天问题
|
||||
|
||||
1. How often do switches send Bridge Protocol Data Units ( BPDUs)?
|
||||
2. Name the STP port states in the correct order.
|
||||
3. What is the default Cisco Bridge ID?
|
||||
4. Which command will show you the Root Bridge and priority for a VLAN?
|
||||
5. What is the STP port cost for a 100Mbps link?
|
||||
6. When a port that is configured with the `_______` `_______` feature receives a BPDU, it immediately transitions to the errdisable state.
|
||||
7. The `_______` `_______` feature effectively disables STP on the selected ports by preventing them from sending or receiving any BPDUs.
|
||||
8. Which two commands will force the switch to become the Root Bridge for a VLAN?
|
||||
9. Contrary to popular belief, the Port Fast feature does not disable Spanning Tree on the selected port. This is because even with the Port Fast feature, the port can still send and receive BPDUs. True or false?
|
||||
10. The Backbone Fast feature provides fast failover when a direct link failure occurs. True or false?
|
||||
|
||||
## 第31天答案
|
||||
|
||||
1. Every two seconds.
|
||||
2. Blocking, Listening, Learning, Forwarding, and Disabled.
|
||||
3. 32768.
|
||||
4. The `show spanning-tree vlan x` command.
|
||||
5. 19.
|
||||
6. BPDU Guard.
|
||||
7. BPDU Filter.
|
||||
8. The `spanning-tree vlan [number] priority [number]` and `spanning-tree vlan [number] root [primary|secondary]` commands.
|
||||
9. True.
|
||||
10. False.
|
||||
|
||||
## 第31天实验
|
||||
|
||||
### 生成树根选举实验
|
||||
|
||||
**实验拓扑**
|
||||
|
||||

|
||||
|
||||
**实验目的**
|
||||
|
||||
学习如何对哪台交换机成为生成树根桥施加影响。
|
||||
|
||||
**实验步骤**
|
||||
|
||||
1. 设置各台交换机的主机名并将其用交叉线连接起来。此时可以检查它们之间的接口是否被设置到“trunk”中继。
|
||||
|
||||
```console
|
||||
Switch#show interface trunk
|
||||
```
|
||||
|
||||
2. 在将一侧设置为中继链路之前,可能看不到中继链路变成活动的。
|
||||
|
||||
```console
|
||||
SwitchB#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
SwitchB(config)#int FastEthernet0/1
|
||||
SwitchB(config-if)#switchport mode trunk
|
||||
SwitchB(config-if)#^Z
|
||||
SwitchB#sh int trunk
|
||||
Port Mode Encapsulation Status Native vlan
|
||||
Fa0/1 on 802.1q trunking 1
|
||||
Port Vlans allowed on trunk
|
||||
Fa0/1 1-1005
|
||||
Port Vlans allowed and active in management domain
|
||||
Fa0/1 1
|
||||
```
|
||||
|
||||
3. 将看到另一交换机是留作自动模式的。
|
||||
|
||||
```console
|
||||
SwitchA#show int trunk
|
||||
Port Mode Encapsulation Status Native vlan
|
||||
Fa0/1 auto n-802.1q trunking 1
|
||||
Port Vlans allowed on trunk
|
||||
Fa0/1 1-1005
|
||||
Port Vlans allowed and active in management domain
|
||||
Fa0/1 1
|
||||
```
|
||||
|
||||
4. 在每台交换机上创建出两个VLANs。
|
||||
|
||||
```console
|
||||
SwitchA#conf t
|
||||
Enter configuration commands, one per line. End with CNTL/Z.
|
||||
SwitchA(config)#vlan 2
|
||||
SwitchA(config-vlan)#vlan 3
|
||||
SwitchA(config-vlan)#^Z
|
||||
SwitchA#
|
||||
%SYS-5-CONFIG_I: Configured from console by console
|
||||
SwitchA#show vlan brief
|
||||
VLAN Name Status Ports
|
||||
---- ------------------ ------- --------------------
|
||||
1 default active Fa0/2, Fa0/3, Fa0/4,
|
||||
Fa0/5, Fa0/6, Fa0/7,
|
||||
Fa0/8, Fa0/9, Fa0/10,
|
||||
Fa0/11, Fa0/12, Fa0/13,
|
||||
Fa0/14, Fa0/15, Fa0/16,
|
||||
Fa0/17, Fa0/18, Fa0/19,
|
||||
Fa0/20, Fa0/21, Fa0/22,
|
||||
Fa0/23, Fa0/24
|
||||
2 VLAN0002 active
|
||||
3 VLAN0003 active
|
||||
1002 fddi-default active
|
||||
1003 token-ring-default active
|
||||
```
|
||||
|
||||
同时也在交换机B上创建出VLANs(拷贝上面的命令)。
|
||||
|
||||
5. 确定哪台交换机是VLANs 2和3的根桥。
|
||||
|
||||
```console
|
||||
SwitchB#show spanning-tree vlan 2
|
||||
VLAN0002
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID Priority 32770
|
||||
Address 0001.972A.7A23
|
||||
This bridge is the root
|
||||
Hello Time 2 sec
|
||||
Max Age 20 sec Forward Delay 15 sec
|
||||
Bridge ID Priority 32770 (priority 32768 sys-id-ext 2)
|
||||
Address 0001.972A.7A23
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 20
|
||||
Interface Role Sts Cost Prio.Nbr Type
|
||||
--------- ---- --- ---- -------- ----
|
||||
Fa0/1 Desg FWD 19 128.1 P2p
|
||||
```
|
||||
|
||||
可以看到,Switch B是根。在交换机A上完成同样的命令,并对VLAN 3进行检查。优先级是32768加上VLAN编号,这里就是2.最低MAC地址将确定出根桥。
|
||||
|
||||
```console
|
||||
SwitchB#show spanning-tree vlan 3
|
||||
VLAN0003
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID Priority 32771
|
||||
Address 0001.972A.7A23
|
||||
This bridge is the root
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Bridge ID Priority 32771 (priority 32768 sys-id-ext 3)
|
||||
Address 0001.972A.7A23
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 20
|
||||
Interface Role Sts Cost Prio.Nbr Type
|
||||
---------- ---- --- ---- -------- ----
|
||||
Fa0/1 Desg FWD 19 128.1 P2p
|
||||
```
|
||||
|
||||
这里Switch A的MAC地址较高,这就是为何其不会成为根桥的原因:`0010:1123:D245`
|
||||
|
||||
6. 将另一个交换机设置为VLANs 2和3的根桥。对VLAN 2使用命令`spanning-tree vlan 2 priority 4096`,以及对VLAN 3的`spanning-tree vlan 3 root primary`命令。
|
||||
|
||||
```console
|
||||
SwitchA(config)#spanning-tree vlan 2 priority 4096
|
||||
SwitchA(config)#spanning-tree vlan 3 root primary
|
||||
SwitchA#show spanning-tree vlan 2
|
||||
VLAN0002
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID Priority 4098
|
||||
Address 0010.1123.D245
|
||||
This bridge is the root
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Bridge ID Priority 4098 (priority 4096 sys-id-ext 2)
|
||||
Address 0010.1123.D245
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 20
|
||||
Interface Role Sts Cost Prio.Nbr Type
|
||||
--------- ---- --- ---- -------- ----
|
||||
Fa0/1 Desg FWD 19 128.1 P2p
|
||||
SwitchA#show spanning-tree vlan 3
|
||||
VLAN0003
|
||||
Spanning tree enabled protocol ieee
|
||||
Root ID Priority 24579
|
||||
Address 0010.1123.D245
|
||||
This bridge is the root
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Bridge ID Priority 24579 (priority 24576 sys-id-ext 3)
|
||||
Address 0010.1123.D245
|
||||
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
|
||||
Aging Time 20
|
||||
Interface Role Sts Cost Prio.Nbr Type
|
||||
--------- ---- --- ---- -------- ----
|
||||
Fa0/1 Desg FWD 19 128.1 P2p
|
||||
SwitchA#
|
||||
```
|
||||
|
||||
> **注意:** 尽管Switch B有较低的桥ID,Switch A还是被强制作为根桥。
|
||||
@@ -1,254 +0,0 @@
|
||||
# 第38天 EIGRP对IPv6的支持
|
||||
|
||||
**EIGRP For IPv6**
|
||||
|
||||
___
|
||||
|
||||
Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。
|
||||
|
||||
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 [捐赠译者](https://github.com/gnu4cn/buy-me-a-coffee)。
|
||||
|
||||
___
|
||||
|
||||
## 第38天任务
|
||||
|
||||
- 阅读今天的课文(以下内容)
|
||||
- 复习EIGRP模块
|
||||
- 复习EIGRP故障排除模块
|
||||
|
||||
尽管针对IPv6的EIGRP内容,并没有在新的CCNA考试大纲中特别列出,但因为以下原因,此方面的内容将在本模块中加以涵盖。首先,CCNA题目对有关EIGRP与IPv6技术有着较高的关注,所以就算看起来不怎么可能,EIGRPv6方面的题目仍可能出现在考试中。其次,此方面内容相对容易而简单,因此掌握起来也不会花很多时间,尤其在考虑讲解并不会深入的情况下。
|
||||
|
||||
除了那些开放的标准协议外,思科专有的EIGRP也已被修订到支持IPv6了。因为其支持IPv6, 所以有时这个修订版的EIGRP被成为是EIGRPv6,而并不是因为它是EIGRP路由协议的第6版。类似地,IPv4的EIGRP有时也被称为EIGRPv4, 以区别两个版本所支持的其所路由协议的不同(In addition to open standart protocols, the Cisco-proprietary EIGRP has also been modified to support IPv6. This modified version of EIGRP is sometimes referred to as EIGRPv6 because of its support for IPv6, not because it is revision 6 of the EIGRP routing protocol. Similarly, EIGRP for IPv4 is also sometimes referred to as EIGRPv4 to differentiate between the routing protocol versions supported by either version)。
|
||||
|
||||
今天将学习以下内容:
|
||||
|
||||
- IPv6下的思科EIGRP概览与基础知识,Cisco EIGRP for IPv6 overview and fundamentals
|
||||
- IPv6下的EIGRP的配置基础
|
||||
|
||||
本课程对应了以下CCNA大纲要求:
|
||||
|
||||
- 配置并验证EIGRP(单一自治系统,Configure and verify EIGRP(Single AS))
|
||||
|
||||
EIGRPv6保留了EIGRPv4中的大部分相同基础的核心功能(For the most part, EIGRPv6 retains the same basic core functions as EIGRPv4)。比如两个版本仍使用弥散更新算法来确保无环回的路径,同时两个版本都使用多播数据包来发送更新--尽管EIGRPv6使用的是IPv6的多播地址`FF02::A`,而EIGRPv4使用的是组地址`224.0.0.10`。在保留了一些相同核心基础的同时,版本之间有着一些不同之处。下表38.1列出了EIGRPv4与EIGRPv6之间,或简单且更通常地说是IPv4下的EIGRP与IPv6下的EIGRP之间的不同之处:
|
||||
|
||||
*表 38.1 -- EIGRPv4与EIGRPv6的差异*
|
||||
|
||||
| 协议特性(Protocol Characteristic) | IPv4下的EIGRP | IPv6下的EIGRP |
|
||||
| ------ | ------ | ------ |
|
||||
| 自动汇总特性 | 支持(Yes) | 不适用(Not Applicable) |
|
||||
| 认证或安全特性 | MD5 | 内建于IPv6中(Built into IPv6) |
|
||||
| 要求对等点处于同一子网(Common Subnet for Peers) | 要求(Yes) | 不要求(No) |
|
||||
| 通告内容(Advertisement Contents)| 子网/掩码(Subnet/Mask) | 前缀/长度(Prefix/Length) |
|
||||
| 数据包的封装(Packet Encapsulation) | IPv4封装(IPv4) | IPv6封装(IPv6) |
|
||||
|
||||
> **注意:** 因为EIGRPv6使用邻居的链路本地地址作为下一跳地址,因此在位于同一自治系统及同一网段的两台路由器建立邻居关系时,就不需要其全局的IPv6单播子网一致了。这一点是要求邻居在同一子网的EIGRPv4,与使用链路本地地址建立邻居关系而消除了此要求的EIGRPv6之间,最为显著的不同之一(Because EIGRPv6 uses the Link-Local address of the neighbour as the next-hop address, the global IPv6 Unicast subnets do not need to be the same for a neighbour relationship to be established between two routers that reside within the same autonomous system and are on a common network segment. This is one of the most significant differences between EIGRPv4, which requires neighbours to be on a common subnet, and EIGRPv6, which negates this need by using the Link-Local addresses for neighbour relationships instead)。
|
||||
|
||||
## 思科IOS软件在EIGRPv4与EIGRPv6配置上的差异
|
||||
|
||||
**Cisco IOS Software EIGRPv4 and EIGRPv6 Configuration Differences**
|
||||
|
||||
思科IOS软件中对EIGRPv4与EIGRPv4的配置上,有着一些显著的差异。那么第一个显著差异就在于开启受路由的协议方式的不同。对于EIGRPv4来说,需要使用全局配置命令`router eigrp [ASN]`来开启EIGRPv4的路由,并指定该EIGRPv4自治系统编号。而在配置EIGRPv6时,则是使用`ipv6 router eigrp [ASN]`来开启EIGRPv6并指定出**本地路由器ASN**了(There are some notable differences in the configuration of EIGRPv4 and EIGRPv6 in Cisco IOS software. The first notable difference is the way in which the routing protocol is enabled. For EIGRPv4, the `router eigrp [ASN]` global configuration command is required to enable EIGRPv4 routing and to specify the EIGRPv4 autonomous system number(ASN). When configuring EIGRPv6, the `ipv6 router eigrp [ASN]` global configuration command is used instead to enable EIGRPv6 and to specify **the local router ASN**)。
|
||||
|
||||
尽管EIGRPv4与EIGRPv6的开启有些类似,但在两个路由进程开启之后的协议状态中,是有着非常显著的不同的。默认在开启了EIGRPv4时,该协议就自动启动,并在其假定有桌正确配置的情况下,开始在所有指定的运作接口上发送Hello数据包。而当在思科IOS软件中启用EIGRPv6时,默认情况下在该协议被开启后,其将保持关闭状态。这就意味着就算在某些指定接口下得以开启,在执行路由器配置命令`no shutdown`之前,EIGRP进程仍不是运作中的(While enabling EIGRPv4 and EIGRPv6 is somewhat similar, there is a very notable and significant difference in the protocol states once the routing process has been enabled. By default, when EIGRPv4 is enabled, the protocol automatically starts and, assuming correct configuration, begins sending Hello packets on all specified interfaces. When enabling EIGRPv6 in Cisco IOS software, by default, after the protocol has been enabled, it remains in the shutdown state. This means that even if enabled under specified interfaces, the EIGRP process will not be operational until the `no shutdown` router configuration command is issued)。
|
||||
|
||||
而EIGRPv4与EIGRPv6的另一配置差异,就是在EIGRPv6下,路由器ID是强制要求的,且必须以IPv4的点分十进制表示法进行指定。在分配RID时,要记住该地址不必是一个可路由或可达的地址(Yet another configuration difference between EIGRPv4 and EIGRPv6 is that with EIGRPv6, the router ID is mandatory and must be specified in IPv4 dotted-decimal notation. When assigning the RID, keep in mind that the address does not have to be a routable or reachable address)。
|
||||
|
||||
> **注意:** 如在本地路由器上有任何配置了IPv4地址的接口,那么该路由器将从这些接口选取路由器ID -- 优先选取环回接口,在路由器上没有配置环回接口或环回接口不可运作时,就使用物理接口。在有环回接口运行时,将选取环回接口IP地址中最高的作为RID。在没有环回接口运行,而有物理接口运行时,就选择物理接口IP地址中最高的作为RID。在路由器上环回接口与物理接口都没有配置时,就必须使用`eigrp router-id [IPv4 Addresses]`命令,指定出一个RID(If there are any interfaces with IPv4 address configured on the local router, then the router will select the router ID from these interfaces -- preferring Loopback interfaces, and then using physical interfaces if no Loopback interfaces are configured or operational on the router. The highest IP address of the Loopback interface(s), if up, will be selected. If not, the RID will be selected from the highest IP address of the physical interfaces, if up. If neither is configured on the router, the `eigrp router-id [IPv4 Address]` command must be used)。
|
||||
|
||||
## 思科IOS软件中IPv6的配置与验证
|
||||
|
||||
**Configuring and Verifying EIGRPv6 in Cisco IOS Software**
|
||||
|
||||
继续上一小节,其中突出了EIGRPv4与EIGRPv6之间的配置差异, 本节对在思科IOS软件中开启并验证EIGRPv6功能与路由所需的步骤序列,加以贯穿,这些步骤如下:
|
||||
|
||||
1. 使用全局配置命令`ipv6 unicast-routing`,来全局性地开启IPv6路由。在思科IOS软件中IPv6路由默认是关闭的。
|
||||
2. 使用全局配置命令`ipv6 router eigrp [ASN]`来配置一或多个的EIGRPv6进程。
|
||||
3. 如路由器上没有配置了IPv4地址的运行接口,就要使用路由器配置命令`eigrp router-id [IPv4 Address]`来手动配置EIGRPv6的RID。
|
||||
4. 使用路由器配置命令`no shutdown`来开启EIGRPv6进程。
|
||||
5. 在需要的接口上,使用接口配置命令`ipv6 address`与`ipv6 enable`,开启其IPv6功能。
|
||||
6. 使用接口配置命令`ipv6 eigrp [ASN]`, 来开启该接口下的一或多个EIGRPv6进程。
|
||||
|
||||
因为对于EIGRPv6来说自动汇总是不适用的,因此就没有关闭此行为的需要。为对EIGRPv6配置的掌握进行加强,请考虑下图38.1中所演示的拓扑,该图演示了一个由两台路由器所构成的网络。两台路由器都使用`AS 1`运行着EIGRPv6。路由器`R3`将通过EIGRPv6通告两个额外的前缀:
|
||||
|
||||

|
||||
*图38.1 -- 思科IOS软件中EIGRPv6的配置*
|
||||
|
||||
根据上述配置步骤顺序,路由器`R1`上EIGRPv6将被如下配置上:
|
||||
|
||||
```console
|
||||
R1(config)#ipv6 unicast-routing
|
||||
R1(config)#ipv6 router eigrp 1
|
||||
R1(config-rtr)#eigrp router-id 1.1.1.1
|
||||
R1(config-rtr)#no shutdown
|
||||
R1(config-rtr)#exit
|
||||
R1(config)#interface GigabitEthernet0/0
|
||||
R1(config-if)#ipv6 address 3fff:1234:abcd:1::1/64
|
||||
R1(config-if)#ipv6 enable
|
||||
R1(config-if)#ipv6 eigrp 1
|
||||
R1(config-if)#exit
|
||||
```
|
||||
|
||||
而根据同样的步骤顺序,路由器`R3`上的EIGRPv6就被如下这样配置上:
|
||||
|
||||
```console
|
||||
R3(config)#ipv6 unicast-routing
|
||||
R3(config)#ipv6 router eigrp 1
|
||||
R3(config-rtr)#eigrp router-id 3.3.3.3
|
||||
R3(config-rtr)#no shutdown
|
||||
R3(config-rtr)#exit
|
||||
R3(config)#interface GigabitEthernet0/0
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:1::3/64
|
||||
R3(config-if)#ipv6 enable
|
||||
R3(config-if)#ipv6 eigrp 1
|
||||
R3(config-if)#exit
|
||||
R3(config)#interface GigabitEthernet0/1
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:2::3/64
|
||||
R3(config-if)#ipv6 address 3fff:1234:abcd:3::3/64
|
||||
R3(config-if)#ipv6 enable
|
||||
R3(config-if)#ipv6 eigrp 1
|
||||
R3(config-if)#exit
|
||||
```
|
||||
|
||||
EIGRPv6的验证过程,将按照EIGRPv4的同样过程进行。首先要验证EIGRP的邻居关系已被成功建立。对于EIGRPv6, 这是通过使用`show ipv6 eigrp neighbours`命令完成的,如下所示:
|
||||
|
||||
```console
|
||||
R1#show ipv6 eigrp neighbors
|
||||
EIGRP-IPv6 Neighbors for AS(1)
|
||||
H Address Interface Hold Uptime SRTT RTO Q Seq
|
||||
(sec) (ms) Cnt Num
|
||||
0 Link-local address: Gi0/0 13 00:01:37 1200 0 3
|
||||
FE80::1AEF:63FF:FE63:1B00
|
||||
```
|
||||
|
||||
如同先前指出的那样,请注意这里的下一跳地址(也就是EIGRP的邻居地址)被指定为本地链路地址,而不是全局单播地址。此命令所打印出的所有其它信息,与`show ip eigrp neighbors`命令打印出是相同的。而要查看详细的邻居信息,可简单地在`show ipv6 eigrp neighbours`命令后面追加上`[detail]`关键字。使用此选项就打印出有关EIGRP版本、以及从那个特定EIGRP邻居处接收到的前缀数目等信息,如下所示:
|
||||
|
||||
```console
|
||||
R1#show ipv6 eigrp neighbors
|
||||
EIGRP-IPv6 Neighbors for AS(1)
|
||||
H Address Interface Hold Uptime SRTT RTO Q Seq
|
||||
(sec) (ms) Cnt Num
|
||||
0 Link-local address: Gi0/0 13 00:01:37 1200 0 3
|
||||
FE80::1AEF:63FF:FE63:1B00
|
||||
Version 5.0/3.0, Retrans: 1, Retries: 0, Prefixes: 3
|
||||
Topology-ids from peer - 0
|
||||
```
|
||||
|
||||
在对EIGRPv6的邻居关系进行验证之后,就可以对路由信息进行验证了。比如,要查看到从EIGRPv6邻居处接收到的那些IPv6前缀,就将使用`show ipv6 route`命令,如下面的输出所示:
|
||||
|
||||
```console
|
||||
R1#show ipv6 route eigrp
|
||||
IPv6 Routing Table - default - 6 entries
|
||||
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
|
||||
B - BGP, HA - Home Agent, MR - Mobile Router, R - RIP
|
||||
I1 - ISIS L1, I2 - ISIS L2, IA - ISIS inter area, IS - ISIS summary
|
||||
D - EIGRP, EX - EIGRP external, ND - Neighbor Discovery
|
||||
D 3FFF:1234:ABCD:2::/64 [90/3072]
|
||||
via FE80::1AEF:63FF:FE63:1B00, GigabitEthernet0/0
|
||||
D 3FFF:1234:ABCD:3::/64 [90/3072]
|
||||
via FE80::1AEF:63FF:FE63:1B00, GigabitEthernet0/0
|
||||
```
|
||||
|
||||
请再次注意,这里所接收到的前缀,都包含着作为所有接收到的前缀的下一跳IPv6地址的本地链路地址。而要查看EIGRPv6的拓扑表,就应使用`show ipv6 eigrp topology`命令。该命令支持那些与用于查看EIGRPv4的拓扑表的`show ip eigrp topology`命令下可用的同样的参数。这里基于上面已部署的配置,`R1`上的拓扑表显示出以下IPv6前缀信息:
|
||||
|
||||
```console
|
||||
R1#show ipv6 eigrp topology
|
||||
EIGRP-IPv6 Topology Table for AS(1)/ID(1.1.1.1)
|
||||
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
|
||||
r - reply Status, s - sia Status
|
||||
P 3FFF:1234:ABCD:2::/64, 1 successors, FD is 3072
|
||||
via FE80::1AEF:63FF:FE63:1B00 (3072/2816), GigabitEthernet0/0
|
||||
P 3FFF:1234:ABCD:1::/64, 1 successors, FD is 2816
|
||||
via Connected, GigabitEthernet0/0
|
||||
P 3FFF:1234:ABCD:3::/64, 1 successors, FD is 3072
|
||||
via FE80::1AEF:63FF:FE63:1B00 (3072/2816), GigabitEthernet0/0
|
||||
```
|
||||
|
||||
与EIGRPv4中的情况一样,可在此命令的后面追加一个前缀,以查看到有关那个前缀或子网的详细信息。比如,要查看有关子网`3FFF:1234:ABCD:2::/64`的详细信息,就应简单的输入`show ipv6 eigrp topology 3FFF:1234:ABCD:2::/64`命令,如下所示:
|
||||
|
||||
```console
|
||||
R1#show ipv6 eigrp topology 3FFF:1234:ABCD:2::/64
|
||||
EIGRP-IPv6 Topology Entry for AS(1)/ID(1.1.1.1) for 3FFF:1234:ABCD:2::/64
|
||||
State is Passive, Query origin flag is 1, 1 Successor(s), FD is 3072
|
||||
Descriptor Blocks:
|
||||
FE80::1AEF:63FF:FE63:1B00 (GigabitEthernet0/0), from FE80::1AEF:63FF:FE63:1B00, Send
|
||||
flag is 0x0
|
||||
Composite metric is (3072/2816), route is Internal
|
||||
Vector metric:
|
||||
Minimum bandwidth is 1000000 Kbit
|
||||
Total delay is 20 microseconds
|
||||
Reliability is 255/255
|
||||
Load is 1/255
|
||||
Minimum MTU is 1500
|
||||
Hop count is 1
|
||||
Originating router is 3.3.3.3
|
||||
```
|
||||
|
||||
最后,一个简单的`ping`就可以且应该用于对子网之间的连通性加以验证。下面就是一个从`R1`到`R3`上的地址`3FFF:1234:ABCD:2::3`的`ping`操作:
|
||||
|
||||
```console
|
||||
R1#ping 3FFF:1234:ABCD:2::3 repeat 10
|
||||
Type escape sequence to abort.
|
||||
Sending 10, 100-byte ICMP Echos to 3FFF:1234:ABCD:2::3, timeout is 2 seconds:
|
||||
!!!!!!!!!!
|
||||
Success rate is 100 percent (10/10), round-trip min/avg/max = 0/0/4 ms
|
||||
```
|
||||
|
||||
与EIGRPv4下的情况一样,也可使用`show ipv6 protocols`对EIGRPv6的一些默认协议数值进行检查,该命令的输出在下面有打印出来。该命令包含了那些开启了EIGRP实例的接口、路由重分发的信息(在适用时),以及手动配置指定或所配置的点分十进制的EIGRPv6路由器ID。
|
||||
|
||||
```console
|
||||
R1#show ipv6 protocols
|
||||
IPv6 Routing Protocol is “eigrp 1”
|
||||
EIGRP-IPv6 Protocol for AS(1)
|
||||
Metric weight K1=1, K2=0, K3=1, K4=0, K5=0
|
||||
NSF-aware route hold timer is 240
|
||||
Router-ID: 1.1.1.1
|
||||
Topology : 0 (base)
|
||||
Active Timer: 3 min
|
||||
Distance: internal 90 external 170
|
||||
Maximum path: 16
|
||||
Maximum hopcount 100
|
||||
Maximum metric variance 1
|
||||
Interfaces:
|
||||
GigabitEthernet0/0
|
||||
Redistribution:
|
||||
```
|
||||
|
||||
## 第38天问题
|
||||
|
||||
1. IPv6 security for EIGRPv6 is built-in. True or false?
|
||||
2. Because EIGRPv6 uses the Link-Local address of the neighbour as the next-hop address, the global IPv6 Unicast subnets do not need to be the same in order for a neighbour relationship to be established between two routers that reside within the same autonomous system and are on a common network segment. True or false?
|
||||
3. Which command do you use to enter EIGRP for IPv6 Router Configuration mode?
|
||||
4. Which state is the EIGRP for IPv6 initially in (active or shutdown)?
|
||||
5. How do you enable EIGRP for IPv6 on a router interface?
|
||||
|
||||
|
||||
## 第38天答案
|
||||
|
||||
1. True.
|
||||
2. True.
|
||||
3. The `ipv6 router eigrp [ASN]` command.
|
||||
4. The shutdown state.
|
||||
5. Issue the `ipv6 eigrp [ASN]` command.
|
||||
|
||||
## 第38天实验
|
||||
|
||||
请重复第36天的EIGRP实验,不过这次要使用IPv6地址并激活IPv6下的EIGRP-IPV6:
|
||||
|
||||
- 在两台路由器上开启IPv6的单播路由
|
||||
- 在接口上配置IPv6地址
|
||||
- 使用`ipv6 router eigrp 100`命令配置EIGRP进程
|
||||
- 使用命令`eigrp router-id 10.10.10.10`配置一个RID
|
||||
- 使用`no shutdown`命令激活进程
|
||||
- 使用`ipv6 eigrp 10`命令在IPv6接口上开启EIGRP
|
||||
- 使用`show ipv6 eigrp neighbors [detail]`命令对邻居关系进行检查
|
||||
- 使用命令`show ipv6 route eigrp`对所通告的路由进行检查
|
||||
- 使用`show ipv6 eigrp topology`命令对EIGRP的拓扑进行检查
|
||||
|
||||
请访问[www.in60days.com](http://www.in60days.com/)并免费观看作者如何完成的此实验。
|
||||
|
||||
1300
d39-OSPF.md
@@ -1,533 +0,0 @@
|
||||
# 第40天 Syslog、SNMP与Netflow
|
||||
|
||||
__Syslog, SNMP and Netflow__
|
||||
|
||||
___
|
||||
|
||||
|
||||
Gitbook:[ccna60d.xfoss.com](https://ccna60d.xfoss.com/)
|
||||
|
||||
|
||||
你可以在 https://github.com/gnu4cn/ccna60d 上 fork 本项目,并提交你的修正。
|
||||
|
||||
|
||||
本书结合了学习技巧,包括阅读、复习、背书、测试以及 hands-on 实验。
|
||||
|
||||
> 本书译者用其业余时间完成本书的翻译工作,并将其公布到网上,以方便你对网络技术的学习掌握,为使译者更有动力改进翻译及完成剩下章节,你可以 [捐赠译者](https://github.com/gnu4cn/buy-me-a-coffee)。
|
||||
|
||||
___
|
||||
|
||||
## 第40天任务
|
||||
|
||||
- 阅读今天的课文(下面)
|
||||
- 复习昨天的课文
|
||||
- 完成今天的实验
|
||||
- 阅读ICND2补充指南
|
||||
- 在[subnetting.org](http://www.subnetting.org)网站上花15分钟
|
||||
|
||||
|
||||
将(系统)消息或事件在本地或某台syslog服务器上进行记录,是一项核心的维护任务。Syslog是一种允许主机将事件通知消息,经由IP网络发送到事件消息收集器(event message collectors),也叫做syslog服务器或syslog守候程序(daemon),的协议。也就是说,某台主机或设备可被配置为,生成一条syslog消息,并将该消息转发到某个特定的syslog守候程序(服务器)的方式。
|
||||
|
||||
简单网络管理协议,则是一种广泛使用的管理协议,其定义了一套用于连接到IP网络设备通信的标准。SNMP提供了一种用于对网络设备进行监视与控制的方法。与思科IOS的IP SLA操作(IP Service Level Agreement, IP 网络服务等级协议,该特性通过使用活动流量监视来测量网络性能,而允许客户对IP服务等级进行分析)一样,SNMP可用于收集统计数据、监测设备性能,以及提供到网络的一个基线(a baseline of the network),且SNMP是使用最为广泛的网络维护与监测工具之一。
|
||||
|
||||
尽管SNMP可以提供流量统计,但其无法区分各种数据流(While SNMP can provide traffic statistics, SNMP cannot differentiate between individual flows)。不过思科IOS的Netflow就可以做到。数据流(A flow)简单地就是一系列的、有着同样源与目的地址、源与目的端口、协议接口,以及同样的服务参数类(Class of Service parameters)的数据包。
|
||||
|
||||
今天将学到有关以下方面的知识:
|
||||
|
||||
- Syslog
|
||||
- SNMP
|
||||
- Netflow
|
||||
|
||||
|
||||
此课程对应了以下CCNA大纲要求:
|
||||
|
||||
+ 配置并验证Syslog
|
||||
- `syslog`输出的使用
|
||||
- 对SNMP版本2与版本3进行描述
|
||||
- `netflow`数据的使用
|
||||
|
||||
## 日志记录(Logging)
|
||||
|
||||
所谓某个`syslog`守候程序或某台`syslog`服务器,就是一个对发送给它的`syslog`消息进行监听的实体。将某个`syslog`守候程序配置为请求某台特定设备向其发送`syslog`报文,是不可行的。也就是说,在某台特定设备无法生成`syslog`报文的情况下,那么`syslog`守候程序就什么也不能做。真实世界中,集团公司通常采用`SolarWinds`(或类似)软件来做`syslog`的捕获。此外,诸如`Kiwi Syslog daemon`这类自由软件,也可用于`syslog`的捕获。
|
||||
|
||||
`Syslog`使用用户数据报协议(User Datagram Protocol, UDP),作为所采用的传输机制,因此数据包没有被排序与确认。因为UDP没有包含在TCP中的额外开销(the overhead included in TCP),这意味着在某些重度使用的网络中,一些数据包可能被丢弃,而因此导致记录的信息丢失。不过思科IOS软件允许管理员出于冗余目的,配置多台`syslog`服务器。`syslog`方案由两个主要元素构成:`syslog`服务器与`syslog`客户端。
|
||||
|
||||
`syslog`客户端将`syslog`报文,使用UDP作为传输层协议,指定一个`513`目的端口,发送给`syslog`服务器。这些报文的大小不能超过`1024`字节;不过没有最小长度的限制。所有`syslog`报文,都包含三个不同的部分:优先级、头部与报文。
|
||||
|
||||
`syslog`报文的优先级,同时表示了设施,与报文的严重程度(The priority of a syslog message represents both the facility and the severity of the message)。此数字是一个8位的数字。前3个最低有效位(The first 3 least significant bits),表示报文的严重程度(在3位的情况下,可表示8中不同的严重程度),其它5位表示了某项设施。可使用这些值,来对`syslog`守候程序中的事件进行过滤。
|
||||
|
||||
> **注意:** 请注意这些值是由那些生成事件的应用产生的,而不是由`syslog`服务器本身产生的。
|
||||
|
||||
下表40.1中列出并介绍了思科IOS设备所设置的值(请记住这些严查程度级别与它们的名称):
|
||||
|
||||
*表 40.1 - 思科IOS软件`syslog`的优先级分级与定义*
|
||||
|
||||
| 严重程度级别 | 严查程度级别名称 | `syslog`的定义 | 介绍 |
|
||||
| :---: | :---: | :---: | :--- |
|
||||
| `0` | 紧急(Emergencies) | `LOG_EMERG` | 此级别用于那些将导致系统不可用的最严重的错误情景。 |
|
||||
| `1` | 告警(Alerts) | `LOG_ALERT` | 此级别用于表示那些需要管理员立即注意的情况。 |
|
||||
| `2` | 严重(Critical) | `LOG_CRIT` | 此级别用于表明那些严重性低于告警,但仍需管理员介入的严重情况。 |
|
||||
| `3` | 错误(Errors) | `LOG_ERR` | 此级别用于表明系统中有错误发生,但这些错误并不会导致系统不可用。 |
|
||||
| `4` | 警告(Warnings) | `LOG_WARNING` | 此级别用于表示有关系统操作未能成功完成的警告情况。 |
|
||||
| `5` | 通知(Notifications) | `LOG_NOTICE` | 此级别用于表示系统中的状态改变(比如路由协议临接关系过渡到`down`状态)。 |
|
||||
| `6` | 消息(Informational) | `LOG_INFO` | 此级别用于表示有关系统正常运行的消息。 |
|
||||
| `7` | 调试(Debugging) | `LOG_DEBUG` | 此级别用于表示通常用于故障排除目的的实时的(调试的)信息。 |
|
||||
|
||||
在`syslog`中,设施(the facility)用于表示生成消息的源。源可以是某个本地设备上的进程、应用,或者甚至操作系统本身。设施是以数字(整数)表示的。在思科IOS软件中,有八个本地使用设施可由进程及应用(以及设备本身)用于发送`syslog`消息。默认思科IOS设备使用设施`local7`来发送`syslog`报文。但要注意大多数思科设备提供了改变默认设施级别的选项。在思科IOS软件中,可使用全局配置命令`loggin facility [facility]`来指定`syslog`的设施。该命令可用的选项如下所示:
|
||||
|
||||
```console
|
||||
R1(config)#logging facility ?
|
||||
auth Authorization system
|
||||
cron Cron/at facility
|
||||
daemon System daemons
|
||||
kern Kernel
|
||||
local0 Local use
|
||||
local1 Local use
|
||||
local2 Local use
|
||||
local3 Local use
|
||||
local4 Local use
|
||||
local5 Local use
|
||||
local6 Local use
|
||||
local7 Local use
|
||||
lpr Line printer system
|
||||
mail Mail system
|
||||
news USENET news
|
||||
sys10 System use
|
||||
sys11 System use
|
||||
sys12 System use
|
||||
sys13 System use
|
||||
sys14 System use
|
||||
sys9 System use
|
||||
syslog Syslog itself
|
||||
user User process
|
||||
uucp Unix-to-Unix copy system
|
||||
```
|
||||
|
||||
要通过`syslog`来发送消息,就必须在设备上执行以下顺序的步骤:
|
||||
|
||||
1. 使用`logging on`配置命令在路由器或交换机上全局性开启日志记录功能。默认在思科IOS软件中,日志记录是开启的;但仅开启了将消息发送到控制台。对于要将消息发到除控制台外的其它任何目的地,`logging on`命令都是强制要求的。
|
||||
|
||||
2. 使用全局配置命令`logging trap [severity]`,指定出要发送到`syslog`服务器的消息的严重程度。可使用数字或使用等价的严重性名称,来指定发送消息的严重程度。
|
||||
|
||||
3. 使用全局配置命令`logging [address]`或`logging host [address]`,指定一个或多个的`syslog`服务器目的地址。
|
||||
|
||||
4. 作为可选项,使用`logging source-interface [name]`指定在`syslog`报文中的源IP地址。在有着配置的多个接口的设备上,这是普遍的做法。乳未指定此命令,则`syslog`报文将包含路由器或交换机用于抵达服务器的接口的IP地址。而在出于冗余目的有着多个接口时,该地址就会在主要路径(接口)宕掉时发生改变。因此,通常将其设置为某个环回接口。
|
||||
|
||||
下面的配置实例,演示了如何将所有信息(informational(level6))及以下的报文,发送到一台有着IP地址`192.168.1.254`的`syslog`服务器:
|
||||
|
||||
```console
|
||||
R2(config)#logging on
|
||||
R2(config)#logging trap informational
|
||||
R2(config)#logging 192.168.1.254
|
||||
```
|
||||
|
||||
此配置可使用`show syslog`命令进行验证,如下所示:
|
||||
|
||||
```console
|
||||
R2#show logging
|
||||
Syslog logging: enabled (11 messages dropped, 1 messages rate-limited, 0 flushes, 0 overruns, xml disabled, filtering disabled)
|
||||
Console logging: disabled
|
||||
Monitor logging: level debugging, 0 messages logged, xml disabled,filtering disabled
|
||||
Buffer logging: disabled, xml disabled, filtering disabled
|
||||
Logging Exception size (4096 bytes)
|
||||
Count and timestamp logging messages: disabled
|
||||
No active filter modules.
|
||||
Trap logging: level informational, 33 message lines logged
|
||||
Logging to 192.168.1.254(global) (udp port 514, audit disabled, link up), 2 message lines logged, xml disabled, filtering disabled
|
||||
```
|
||||
|
||||
一般在配置日志记录时,重要的是要确保路由器或交换机的时钟反映的是真实的当前时间,这可实现与错误数据的关联。日志消息上的不准确或不正确时间戳,会令到使用过滤或关联流程,来做错误与问题隔离十分困难,并十分耗时。在思科IOS软件中,系统时钟可手动配置,或者将设备配置为自动将其时钟与网络时间协议服务器进行同步。在后面的小节将对这两种方法进行讨论。在网络中仅有少数互联网络设备时,手动的时钟或时间配置没有问题。在思科IOS软件中,系统时间是通过使用`clock set hh:mm:ss [day & month | month & day] [year]`特权`EXEC`命令进行配置的。其不是在全局配置模式下配置或指定的。下面的配置示例,演示了如何将系统时钟设置为 2010 年 10 月 20 日上午12:15:
|
||||
|
||||
```console
|
||||
R2#clock set 12:15:00 20 october 2010
|
||||
```
|
||||
|
||||
也可以向下面这样在路由器上应用同样的配置:
|
||||
|
||||
```console
|
||||
R2#clock set 12:15:00 october 20 2010
|
||||
```
|
||||
|
||||
在此配置下,可使用`show clock`命令来查看到系统时间:
|
||||
|
||||
```console
|
||||
r2#show clock
|
||||
12:15:19.419 utc wed oct 20 2010
|
||||
```
|
||||
|
||||
观察到一个有趣现象,就是在使用`clock set`命令手动配置或设置了系统时间是,其默认到GMT(UTC)时区,如上面所看到的。为了确保系统始终反映对于不在GMT时区的那些正确时区,就必须使用全局配置命令`clock timezone [time zone name] [GMT offset]`。比如,美国有六个不同的时区,每个时区都有不同的GMT偏移量。这些时区分别是东部时间(Eastern Time),中部时间(Central Time),山区时间(Mountain Time),太平洋时间(Pacific Time)、夏威夷时间(Hawaii Time)以及阿拉斯加时间(Alaska Time)。
|
||||
|
||||
此外,一些地方使用标准时间(Standard Time)与夏令时间(Dayligh Saving Time)。考虑这个因素,那么在手动配置系统时钟时,确保于所有设备上正确设置系统时间(标准还是夏令时)就很重要了。下面的配置实例,演示了如何将系统时钟,设置为比GMT晚6个小时的中部标准时间(Central Standard Time, CST)时区的2010年10月20日上午12点40分:
|
||||
|
||||
```console
|
||||
R2#config t
|
||||
Enter configuration commands, one per line.
|
||||
End with CNTL/Z.
|
||||
R2(config)#clock timezone CST -6
|
||||
R2(config)#end
|
||||
R2#clock set 12:40:00 october 20 2010
|
||||
```
|
||||
|
||||
依据此配置,本地路由器上的系统时钟现在显示为下面这样:
|
||||
|
||||
```console
|
||||
R2#show clock
|
||||
12:40:17.921 CST Wed Oct 20 2010
|
||||
```
|
||||
|
||||
> **注意:** 如在`clock timezone`命令之前使用`clock set`命令,那么使用`clock set`命令所指定的时间,将被`clock timezone`命令的使用进行偏移。比如假定上面示例中使用的配置命令是像下面这样输入的时:
|
||||
|
||||
```console
|
||||
R2#clock set 12:40:00 october 20 2010
|
||||
R2#config t
|
||||
Enter configuration commands, one per line.
|
||||
End with CNTL/Z.
|
||||
R2(config)#clock timezone CST -6
|
||||
R2(config)#end
|
||||
```
|
||||
|
||||
因为这里`clock set`命令先使用,所以路由器上的`show clock`命令将显示偏移了6小时的系统时钟,就如使用`clock timezone`命令所指定的那样。在同样的路由器的以下输出对此行为进行了演示:
|
||||
|
||||
```console
|
||||
R2#show clock
|
||||
06:40:52.181 CST Wed Oct 20 2010
|
||||
```
|
||||
|
||||
> **注意:** 使用全局配置命令`clock summer-time zone recurring [week day month hh:mm week day month hh:mm [offset]]`,可将思科IOS的路由器与交换机可配置为自动切换到夏令时间(summertime, Daylight Saving Time)。这样做可消除标准时间与夏令时期间,在所有手动配置的设备上,手动调整系统时钟的需要。
|
||||
|
||||
第二种设置或同步系统时钟的方法,就是使用网络时间协议服务器作为参考时间源了。在那些有着多余几台设备的较大网络中,这是首选方法。NTP是一个设一用于机器网络时间同步的协议。在[RFC 1305](https://tools.ietf.org/html/rfc1305)中对NTP进行了文档说明,其运行在UDP上。
|
||||
|
||||
NTP网络通常是从权威的时间源处,比如无线电时钟或连接某台时间服务器的原子钟,获取它的时间。NTP随后经由网络对此时间进行分发。NTP是相当高效的;每分钟不多于一个数据包,就可以将两台机器同步到一毫秒之内。
|
||||
|
||||
NTP使用层的概念(a concept of a stratum),来描述某台机器距离权威时间源有多少跳。请记住这不是路由或交换的条数,而是NTP跳数,这是一个完全不同的概念。一台层`1`的时间服务器(A stratum 1 time server),通常具有一个直接安装的无线电或原子钟,同时一台层`2`的时间服务器(a stratum 2 time server),则是通过NTP从层`1`的时间服务器接收其时间,如此等等。在某台设备被配置了多台NTP参考服务器时,它将自动选择有着配置为通过NTP进行通信的最低层编号的机器,作为其时间源(When a device is configured with multiple NTP reference servers, it will automatically choose as its time source the machine with the lowest stratum number that it is configured to communicate with via NTP)。
|
||||
|
||||
在思科IOS软件中,使用全局配置命令`ntp server [address]`,来将某台设备配置带有一台或多台NTP服务器的IP地址。如先前指出的那样,可通过重复使用同样的命令,指定多个NTP参考地址。此外,该命令还可用于配置服务器与客户端之间的安全及其它特性。下面的配置实例,演示了如何将某台设备配置为将其时间与一台有着IP地址`10.0.0.1`的NTP进行同步:
|
||||
|
||||
```console
|
||||
R1(config)#ntp server 10.0.0.1
|
||||
```
|
||||
|
||||
根据此配置,可使用`show ntp accociations`命令来对NTP设备之间的通信进行检查,如下面的输出所示:
|
||||
|
||||
```console
|
||||
R2#show ntp associations
|
||||
address ref clock st when poll reach delay offset disp
|
||||
*~10.0.0.1 127.127.7.1 5 44 64 377 3.2 2.39 1.2
|
||||
* master (synced), # master (unsynced), + selected, - candidate, ~ configured
|
||||
```
|
||||
|
||||
`address`字段表示NTP服务器的IP地址,如同该字段下所指出的值`10.0.0.1`所确认的那样。而`ref clock`字段则表示了那台NTP服务器所使用的参考时钟。在此实例中,IP地址`127.127.7.1`表示该设备使用的是一个内部时钟(`127.0.0.0/8`子网)作为其参考时间源。如该字段包含了另一个值,比如`192.168.1.254`,那么那将是该服务器用作其参考的IP地址。
|
||||
|
||||
接着的`st`字段表示该参考的层(the stratum of the reference)。从上面的打印输出,可以看到`10.0.0.1`的NTP设备有着`5`的层数。本地设备的层数,将增加`1`到值`6`,如下所示,因为其是从有着层`5`的服务器出接收到的时间源。如有另一台设备被同步到该本地路由器,那么它将反应出一个`7`的层数,如此等等。用于检查NTP配置的第二个命令,就是`show ntp status`命令了,其输出如下面所示:
|
||||
|
||||
```console
|
||||
R2#show ntp status
|
||||
Clock is synchronized, stratum 6, reference is 10.0.0.1
|
||||
nominal freq is 249.5901 Hz, actual freq is 249.5900 Hz, precision is 2**18
|
||||
reference time is C02C38D2.950DA968 (05:53:22.582 UTC Sun Mar 3 2002)
|
||||
clock offset is 4.6267 msec, root delay is 3.16 msec
|
||||
root dispersion is 4.88 msec, peer dispersion is 0.23 msec
|
||||
```
|
||||
|
||||
该`show ntp status`命令的输出表示时钟是被同步到所配置的NTP服务器(`10.0.0.1`)。此服务器有着层数`5`,因此本地设备反应了一个层数`6`。在配置了NTP是一个观察到的一个有意思的事情,就是本地时间将默认到GMT,如在上面的输出中所看到的那样。为确保该设备显示正确的时区,就必须在该设备上执行`clock time-zone`命令。
|
||||
|
||||
在不论是通过手动还是NTP设置好系统时钟之后,都要确保发送给服务器的日志包含正确的时间戳。这是通过使用全局配置命令`service timestamp log [datetime | uptime]`执行的。关键字`[datetime]`支持下面这些字面的额外子关键字:
|
||||
|
||||
```console
|
||||
R2(config)#service timestamps log datetime ?
|
||||
localtime Use local time zone for timestamps
|
||||
msec Include milliseconds in timestamp
|
||||
show-timezone Add time zone information to timestamp
|
||||
year Include year in timestamp
|
||||
<cr>
|
||||
```
|
||||
|
||||
而`[uptime]`关键字则没有额外关键字,而将本地路由器配置为仅包含系统运行时间(the system uptime)作为发送的消息的时间戳。下面的配置实例,演示了如何将本地路由器配置为所有消息都包含本地时间、毫秒信息,以及时区:
|
||||
|
||||
```console
|
||||
R2#configure terminal
|
||||
Enter configuration commands, one per line.
|
||||
End with CNTL/Z.
|
||||
R2(config)#logging on
|
||||
R2(config)#logging console informational
|
||||
R2(config)#logging host 150.1.1.254
|
||||
R2(config)#logging trap informational
|
||||
R2(config)#service timestamps log datetime localtime msec show-timezone
|
||||
```
|
||||
|
||||
根据此配置,本地路由器的控制台将打印以下消息:
|
||||
|
||||
```console
|
||||
Oct 20 02:14:10.519 CST: %SYS-5-CONFIG_I: Configured from console by console
|
||||
Oct 20 02:14:11.521 CST: %SYS-6-LOGGINGHOST_STARTSTOP: Logging to host 150.1.1.254 started - CLI initiated
|
||||
```
|
||||
|
||||
此外,在服务器`150.1.1.254`上的`syslog`守候程序,将反映出同样内容,如下图40.1中的Kiwi Syslog Manager屏幕截图中所示:
|
||||
|
||||

|
||||
|
||||
*图 40.1 - 日志时间戳的配置*
|
||||
|
||||
## 简单网络管理协议(Simple Network Management Protocol)
|
||||
|
||||
简单网络管理协议,是一个应用层(`Layer 7`)协议,使用UDP端口`161`与`162`,促进网络设备之间管理信息的交换。一个SNMP管理的网络,由管理系统、代理程序及所管理的设备构成(An SNMP-managed network consists of a management system, agents, and managed devices)。其中,管理系统执行监控应用及对所管理的设备进行控制。其也执行大多数的管理流程,并提供了用于网络管理的大部分存储资源。某个网络科恩该是由一套或多套的管理系统所管理。
|
||||
|
||||
代理程序,则是出于各个受管理的设备之上,而对本地管理信息数据,比如性能信息或事件与软件装置中捕获到的错误信息(error information caught in software traps),转换为管理系统可读取的形式。SNMP代理程序使用将数据传输到网络管理软件的[SNMP`get-request`指令](pdfs/06-ch06.pdf)。SNMP代理程序从管理信息库(Management Information Bases, MIBs)或从错误或修改陷阱设置处捕获数据,而管理信息库则是设备参数与网络数据存放的地方(SNMP agents capture data from Management Information Bases(MIBs), which are device parameters and network data repositories, or from error or change **traps**)。
|
||||
|
||||
而受管理元素,比如路由器、交换机、计算机或防火墙,是通过SNMP代理程序进行管理的。受管理设备对管理信息进行收集与存储,从而令到这些信息通过SNMP对其它有着相同协议兼容性的管理系统可用。下图40.2演示了SNMP管理的网络的三个主要部件之间的交互:
|
||||
|
||||

|
||||
|
||||
*图 40.2 - SNMP网络组件的交互*
|
||||
|
||||
参考图40.2, `R1`就是SNMP管理的设备。逻辑上出于该设备上的,就是SNMP代理程序。SNMP代理程序,将存储在受管理设备的管理数据库中的本地管理信息数据,转化为这里称为网络管理站(Network Management Station, NMS)的管理系统可读取的形式。
|
||||
|
||||
在使用SNMP时,使用三种常见的SNMP命令:`read`、`write`与`trap`,使得受管理的设备得以被监视与控制。网络管理站所使用的`read`命令,用于监视受管理的设备。这是通过NMS对由受管理设备所维护的不同变量进行检查完成的。而`write`命令,则是由NMS用于对受管理设备进行控制的。NMS使用该命令可对存储在受管理设备上的变量的值,进行修改。最后,SNMP的`trap`命令,是由受管理设备,用来将事件报告给NMS的。设备可配置为将SNMP陷阱或通知,发送给NMS。所发送的陷阱或通知,取决于设备上所运行的思科IOS软件版本,以及设备的平台。
|
||||
|
||||
SNMP陷阱简单地就是就网络上的某个状况,通知SNMP管理器的消息(SNMP traps are simply messages that alert the SNMP manager of a condition on the network)。一个SNMP陷阱的实例,可能包含了某个接口从`up`状态过渡到了`down`状态。SNMP的主要问题在于它们是无确认的。这就意味着发出设备无法确定该陷阱是否被NMS接收到。
|
||||
|
||||
而SNMP通知命令,则是包含了来自SNMP管理器的接收确认的SNMP陷阱。这些消息可用于表示诸如失败的认证尝试,或失去到邻居路由器的连接等消息。管理器在没有接收到通知请求的情况下,它就不发送响应。而发送者在从没有接收到响应的情况下,通知请求可被再度发送。因此,SNMP的通知,更可能抵达其想要的目的(Thus, informs are more likely to reach their intended destination)。
|
||||
|
||||
尽管通知比陷阱更为可靠,但不利支出在于它们在路由器上与网络中与消耗了更多的资源。与发出后就丢弃的陷阱不同,在接收到一个响应或请求超时之前,通知请求(an inform request)必须要驻留在内存中。此外陷阱仅发送一次,而通知在没有接收到一个来自SNMP服务器的响应之前,必须多次发送。
|
||||
|
||||
下图40.3演示了SNMP管理器与SNMP代理程序之间,发送陷阱与通知的通信:
|
||||
|
||||

|
||||
|
||||
*图 40.3 - 由网络管理站与SNMP管理的元素所使用的UDP端口*
|
||||
|
||||
SNMP的三个版本分别是版本`1`、`2`与`3`。版本`1`,或`SNMPv1`,是SNMP协议的最初实现。`SNMPv1`运行在诸如用户数据报协议(UDP)、互联网协议(IP),以及开放系统互联的无连接网络服务(OSI Connectionless Network Service, CLNS)之上。
|
||||
|
||||
`SNMPv1`是广泛使用的,且是互联网社区中使用的事实上的网络管理协议。
|
||||
|
||||
`SNMPv2`对`SNMPv1`进行了修订,包含了在性能、安全性、保密性及管理器到管理器通信等方面的提升。`SNMPv2`还定义了两种新的操作(命令、operations):`GetBulk`与`Inform`。`GetBulk`用于有效地获取大块的数据(large blocks of data)。`Inform`操作允许一个网络管理站发送陷阱信息到另一网络管理站,并于随后接收一个响应。在`SNMPv2`中,如某个对`GetBulk`操作进行响应的代理程序无法在一个清单中提供所有变量的值,那么它就提供部分结果。
|
||||
|
||||
`SNMPv3`提供了先前版本的SNMP所不具备的以下三项额外安全服务:消息完整性、认证及加密。`SNMPv3`使用消息完整性来确保数据包在传输过程中不被篡改。`SNMPv3`还使用了用于判断消息是否是来自有效的源。最后`SNMPv3`提供了用于打乱(scramble)数据包内容,以防止其被未授权的源看到的加密机制。
|
||||
|
||||
在思科IOS软件中,使用`snmp-server host [hostname | address]`命令,来指定本地设备将发送陷阱或通知的目的主机名或IP地址。为实现网络管理站对本地设备的轮询,`SNMPv1`与`SNMPv2`要求使用全局配置命令`snmp-server community <name> [ro | rw]`,为只读或读写访问,指定一个共有字符串(a community string)。
|
||||
|
||||
`SNMPv3`蜜柑有使用这种同样的基于共有的安全形式(the same community-based form of security),而是使用了用户与组的安全(user and group security)。下面的配置实例,演示了如何配置带有两个共有字符串的本地设备,其一用于只读访问,另一个用于读写访问。此外,该本地设备还配置了为思科IOS的SLA(Service Level Agreement, 服务级别协议)操作/命令与`syslog`,而使用只读共有字符串,将SNMP陷阱发送到`1.1.1.1`:
|
||||
|
||||
```console
|
||||
R2#config t
|
||||
Enter configuration commands, one per line.
|
||||
End with CNTL/Z.
|
||||
R2(config)#snmp-server community unsafe RO
|
||||
R2(config)#snmp-server community safe RW
|
||||
R2(config)#snmp-server host 1.1.1.1 traps readonlypassword rtr syslog
|
||||
```
|
||||
|
||||
下图40.4演示了一个基于SNMP轮询(SNMP polling)的、使用ManageEngine OpManager网络监控软件的,设备资源使用情况与可用性的示例报告:
|
||||
|
||||

|
||||
|
||||
*图 40.4 - 有关设备资源使用情况的示例SNMP报告*
|
||||
|
||||
## 思科IOS的NetFlow(Cisco IOS NetFlow)
|
||||
|
||||
与SNMP一样,思科IOS的NetFlow是一个强大的维护与监控工具,可用于对网络性能进行基准测量及辅助故障排除。但其与SNMP之间有着一些显著的区别。第一个不同就是SNMP主要报告的是有关设备统计数据(比如资源使用情况等),而思科IOS的NetFlow则是就流量统计数据进行报告(比如数据包与字节)。
|
||||
|
||||
这两个工具之间的第二个不同,就是SNMP是一种基于轮询的协议(a poll-based protocol),意味着受管理设备被轮询信息。在那些SNMP设备发送陷阱(甚至报告,even report)到管理站的实例中,也可认为它是基于推送的(push-based)。而思科IOS的NetFlow,则是基于推送的技术,意味着配置了NetFlow的设备,是将其收集的信息发送出来,到某个中心存储库的。由于这个原因,NetFlow与SNMP互为补充,可作为标准网络维护与监控工具套件(the standard network maintenance and monitoring toolkit)的组成部分。但它们并非各自的替代;这是一个常被误解的概念,重要的是记住这一点。
|
||||
|
||||
IP(数据)流基于五个,上至七个的一套IP数据包属性,它们可能包含下面这些:
|
||||
|
||||
- 目的IP地址
|
||||
- 源IP地址
|
||||
- 源端口
|
||||
- 目的端口
|
||||
- `Layer 3`的协议类型
|
||||
- 服务类(Class of Service)
|
||||
- 路由器或交换机的接口
|
||||
|
||||
除了这些IP属性外,(数据)流还包含了其它一些额外信息。这些额外信息包括对于计算每秒数据包与字节数有用的时间戳。时间戳还提供了有关某个数据流生命周期(持续时间)的信息。数据流还包括下一跳IP地址的信息,其包含了边界网关协议的路由器自治系统信息。除了TCP流量的标志外,数据流源与目的地址的子网掩码信息也有包含,而TCP流量的诸多标志,则可用于对TCP握手进行检查。
|
||||
|
||||
> **译者注**:总的来说,思科IOS的NetFlow中的数据流,包含了数据包属性(七种)、时间戳、包含BGP路由自治系统的下一跳IP地址信息、TCP流量的诸多标志,以及源与目的地址的子网掩码信息。
|
||||
|
||||
简要地讲,思科IOS的NetFlow特性,除了可用于提供有关网络用户与网络应用、峰值用量时间,与流量路由之外,还可用于有关的信息网络流量记账、基于用量的网络计费、网络规划、安全、拒绝服务攻击的监视能力,以及网络监控。所有的这些用途,令到其成为一个非常强大的维护、监控与故障排除工具。
|
||||
|
||||
思科IOS的NetFlow软件,对数据流数据进行收集,并将其存储在一个名为“NetFlow缓存”或简单地说就是“数据流缓存”的数据库中。数据流信息会留存到该数据流终止或停止、超时或缓存溢出为止。有两种方式来访问存储在数据流中的数据:使用命令行界面(也就是使用`show`命令),或导出该数据,并通过使用某种类型的报告工具对导出的数据进行查看。下图40.5演示了在思科IOS路由器上的NetWork操作,以及数据流缓存的生成方式:
|
||||
|
||||

|
||||
|
||||
*图 40.5 - 基本的NetFlow操作与数据流缓存的生成*
|
||||
|
||||
参考图40.5,在本地路由器上入口流量被接收到。该流量被路由器加以探测,且IP属性信息被用于创建一个数据流。随后该数据流信息被存储在流缓存中。该信息可使用命令行界面进行查看,或被导出到某个称为NetFlow收集器的外部目的地,随后在NetFlow收集器出,该同样的信息可使用某种应用报告工具(an application reporting tool)进行查看。要实现将NetFlow数据报告给NetFlow收集器,需要使用以下步骤:
|
||||
|
||||
1. 在设备上要配置思科IOS的NetFlow特性,以将数据流捕获到NetFlow缓存。
|
||||
|
||||
2. 要配置好NetFlow导出功能,以将数据流发送到收集器。
|
||||
|
||||
3. 就那些已经有一段时间不活动的、以被终止的,或者仍活动但超出了活动计时器的数据流,对NetFlow进行搜索(The NetFlow cache is searched for flows that have been inactive for a certain period of time, have been terminated, or, for active flows, that last greater than the active timer)。
|
||||
|
||||
4. 将这些已标识出的数据流导出至NetFlow收集器服务器(Those identified flows are exported to the NetFlow Collector server)。
|
||||
|
||||
5. 将接近30到50个数据流打包在一起,并通常经由UPD进行传送。
|
||||
|
||||
6. NetFlow收集器软件从数据创建出实时或历史性的报告。
|
||||
|
||||
在配置思科IOS的NetFlow特性时,需要三个主要步骤,如下所示:
|
||||
|
||||
1. 在那些希望对信息进行捕获并在流缓存中存储的所有接口上,使用接口配置命令`ip flow ingress`,把接口配置为将数据流捕获进入NetFlow缓存。重要的是记住NetFlow仅在每个接口的基础上配置的(Configure the interface to capture flows into the NetFlow cache using the `ip flow ingress` interface configuration command on all interfaces for which you want information to be captured and stored in the flow cache. It is important to remember that NetFlow is configured on a per-interface basis only)。
|
||||
|
||||
> **Dario先生的提醒**:命令`ip route-cache flow`可在物理接口及其下的所有子接口上,开启(NetFlow)数据流(the `ip route-cache flow` command will enable flows on the physical interface and all subinterfaces associated with it)。
|
||||
> 而`ip flow ingress`命令则将开同一接口上的单个子接口、而非所有子接口上,开启(NetFlow)数据流。这在对观看某个接口的子接口`X`、`Y`及`Z`上的数据流不感兴趣,而真正想要观看同一接口上的子接口`A`、`B`与`C`子接口上的数据流时,此命令就很好用。
|
||||
> 此外,在NetFlow版本5下,唯一选项是使用`ip flow ingress`命令来监视上传统计数据(with NetFlow v5, the only option was to monitor inbound statistics using the `ip flow ingress` command)。不过随着NetFlow版本9的发布,现在就了使用`ip flow egress`命令,来对离开各个接口的流量进行监控的选择了。
|
||||
|
||||
|
||||
> **注意:** 从思科IOS版本`12.4(2)T`及`12.2(18)SXD`起,已将命令`ip flow ingress`替换为`ip route-cache flow`命令。而从思科IOS版本`12.2(25)S`起,命令`show running configuration` 的输出已被修改,因此命令`ip route-cache flow`命令,以及`ip flow ingress`命令,将在二者之一被配置后,出现在`show running-configuration`的输出中。
|
||||
|
||||
随后NetFlow信息就存储在本地路由器上,同时可在本地设备上,使用`show ip cache flow`查看到。
|
||||
|
||||
在打算将数据导出到NetFlow收集器的情况下,将需要两个额外任务,如下:
|
||||
|
||||
2. 使用全局配置命令`ip flow-export version [1 | 5 | 9]`,配置思科IOS NetFlow的版本或格式。NetFlow版本`1`(`v1`)是在首个NetFlow发布中所支持的最初格式。在用于分析导出的NetFlow数据的应用仅支持该版本时,才应使用此版本。相比版本`1`,版本`5`导出更多的字段,同时也是应用最广泛的版本。而版本`9`则是最新的思科IOS NetFlow版本,也是一个新的IETF标准的基础。版本`9`是一个灵活的导出格式版本。
|
||||
|
||||
3. 使用全局配置命令`ip flow-export destination [hostname | address] <port> [udp]`,配置并指定NetFlow收集器的IP地址,并于随后指定NetFlow收集器用于接收来自思科设备的UDP输出的UDP端口。其中的`[udp]`关键字是可选的,且在使用该命令是不需要指定,因为在将数据发送到NetFlow收集器时,用户数据报协议是默认使用的传输协议。
|
||||
|
||||
以下实例演示了如何为某个指定的路由器接口开启NetFlow:
|
||||
|
||||
```console
|
||||
R1#config t
|
||||
Enter configuration commands, one per line.
|
||||
End with CNTL/Z.
|
||||
R1(config)#interface Serial0/0
|
||||
R1(config-if)#ip flow ingress
|
||||
R1(config-if)#end
|
||||
```
|
||||
|
||||
根据此配置,可使用`show ip cache flow`命令来查看在数据流缓存中所收集的统计数据,如下面的输出所示:
|
||||
|
||||
```console
|
||||
R1#show ip cache flow
|
||||
IP packet size distribution (721 total packets):
|
||||
1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480
|
||||
.000 .980 .016 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000
|
||||
512 544 576 1024 1536 2048 2560 3072 3584 4096 4608
|
||||
.002 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000
|
||||
|
||||
IP Flow Switching Cache, 278544 bytes
|
||||
4 active, 4092 inactive, 56 added
|
||||
1195 ager polls, 0 flow alloc failures
|
||||
Active flows timeout in 30 minutes
|
||||
Inactive flows timeout in 15 seconds
|
||||
|
||||
IP Sub Flow Cache, 21640 bytes
|
||||
4 active, 1020 inactive, 56 added, 56 added to flow
|
||||
0 alloc failures, 0 force free
|
||||
1 chunk, 1 chunk added
|
||||
last clearing of statistics never
|
||||
|
||||
Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec)
|
||||
-------- Flows /Sec /Flow /Pkt /Sec /Flow /Flow
|
||||
TCP-Telnet 2 0.0 34 40 0.0 10.5 15.7
|
||||
TCP-WWW 2 0.0 9 93 0.0 0.1 1.5
|
||||
UDP-NTP 1 0.0 1 76 0.0 0.0 15.4
|
||||
UDP-other 42 0.0 5 59 0.0 0.0 15.7
|
||||
ICMP 5 0.0 10 64 0.0 0.0 15.1
|
||||
Total: 52 0.0 7 58 0.0 0.4 15.1
|
||||
|
||||
SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts
|
||||
Se0/0 150.1.1.254 Local 10.0.0.1 01 0000 0800 339
|
||||
Se0/0 10.0.0.2 Local 1.1.1.1 06 C0B3 0017 7
|
||||
Se0/0 10.0.0.2 Local 10.0.0.1 11 07AF D0F1 1
|
||||
Se0/0 10.0.0.2 Local 10.0.0.1 11 8000 D0F1 10
|
||||
Se0/0 150.1.1.254 Local 10.0.0.1 01 0000 0800 271
|
||||
Se0/0 10.0.0.2 Local 1.1.1.1 06 C0B3 0017 59
|
||||
```
|
||||
|
||||
下面的示例演示了如何配置并开启指定路由器接口的NetFlow数据收集,并于随后使用NetFlow版本`5`的数据格式,将数据导出到某台有着IP地址`150.1.1.254`的NetFlow收集器:
|
||||
|
||||
```console
|
||||
R1(config)#interface Serial0/0
|
||||
R1(config-if)#ip flow ingress
|
||||
R1(config-if)#exit
|
||||
R1(config)#interface FastEthernet0/0
|
||||
R1(config-if)#ip flow ingress
|
||||
R1(config-if)#exit
|
||||
R1(config)#interface Serial0/1
|
||||
R1(config-if)#exit
|
||||
R1(config)#ip flow-export version 5
|
||||
R1(config)#ip flow-export destination 150.1.1.254 5000
|
||||
R1(config)#exit
|
||||
```
|
||||
|
||||
根据此配置,就可在那台NetFlow Collector上,使用某种应用报告工具,查看到收集的信息。而尽管有数据的导出,仍然可以在本地设备上,使用`show ip cache flow`命令来查看统计数据,在对网络故障进行排除或报告问题时,此命令可作为一个有用的工具。
|
||||
|
||||
### 使用NetFlow的数据进行故障排除(Troubleshooting Utilising NetFlow Data)
|
||||
|
||||
典型的企业网络,有着成千上万的、仅在很短时间内就生成海量NetFlow数据的连接。NetFlow数据可转换为帮助管理员弄清楚网络中正在发生什么的,有用图形与表格。NetFlow数据可辅助于以下方面:
|
||||
|
||||
- 提升整体网络性能
|
||||
- 对一些诸如网络电话(VoIP)的应用提供支持
|
||||
- 更好地对峰值流量进行管理(Better manage traffic spikes)
|
||||
- 加强网络规定的执行(Enforce network policies)
|
||||
- 揭示出那些指向恶意行为的流量模式(Expose trffic patterns that point to malicious activities)
|
||||
|
||||
NetFlow信息还可帮助管理员掌握到任何时候,各种数据类型所消耗的网络资源百分比。一眼就可以发现由电邮、计费与ERP系统及其它应用等使用了多少带宽,以及工作日期间有多少用户在观看YouTube视频,或在打互联网电话。
|
||||
|
||||
NetFlow数据可以易于理解的形式进行呈现,这就使得管理员能够轻易地对更多细节信息进行研究。他们可以就用户、应用、部门、对话、接口与协议等所产生的流量进行检查。使用NetFlow数据可以解决的一些情况示例,包括:
|
||||
|
||||
- 网络容量问题(Capacity issues):NetFlow可清楚地显示什么应用使用了最多的带宽,及它们在何时使用了最多的带宽。此信息有助于改变应用流量模式,从而提升网络性能。通用的做法对用户进行应用。
|
||||
- 安全问题(Security issues):NetFlow数据可对网络上的未授权流量模式进行探测,并可在对网络造成任何危害之前阻止威胁。
|
||||
- 网络语言故障(比如低质量,VoIP problems(poor quality, for example)):在使用NetFlow分析识别出原因后,这方面的问题可被矫正。NetFlow报告可给出对网络语音通话造成影响的带宽不足(insufficient bandwidth)、延迟或网络抖动等因素。
|
||||
|
||||
## 第40天问题
|
||||
|
||||
1. What underlying protocol does syslog use?
|
||||
2. The syslog client sends syslog messages to the syslog sever using UDP as the Transport Layer protocol, specifying a destination port of `_______`.
|
||||
3. The priority of a syslog message represents both the facility and the severity of the message. This number is an `________` -bit number.
|
||||
4. Name the eight Cisco IOS syslog priority levels.
|
||||
5. In Cisco IOS software, the `_______` `_______` `_______` global configuration command can be used to specify the syslog facility.
|
||||
6. Which command do you use to globally enable logging on a router?
|
||||
7. Name the command used to specify the syslog server destination.
|
||||
8. Name the command used to set the clock on a Cisco IOS router.
|
||||
9. On which ports does SNMP operate?
|
||||
10. Name the command you can use to change the NetFlow version.
|
||||
|
||||
## 第40天答案
|
||||
|
||||
1. UDP.
|
||||
2. `514`.
|
||||
3. `8`.
|
||||
4. Emergencies, alerts, critical, errors, warnings, notifications, informational, and debugging.
|
||||
5. The `logging facility [facility]` command.
|
||||
6. The `logging on` command.
|
||||
7. The `logging [address]` or `logging host [address]` command.
|
||||
8. The `clock set` command.
|
||||
9. UDP `161` and `162`.
|
||||
10. The `ip flow-export version x` global configuration command.
|
||||
|
||||
## 第40天实验
|
||||
|
||||
### 日志记录实验
|
||||
|
||||
在思科路由器上配置日志记录:
|
||||
|
||||
- 选择日志记录设施`local3`:`logging facility local2`
|
||||
- 执行全局的`logging on`命令
|
||||
- 选择日志记录的严重程度`informational`
|
||||
- 在一台PC机上配置一个自由的`syslog`服务器并将其连接到路由器
|
||||
- 执行`logging [address]`命令来指定该`syslog`服务器
|
||||
- 指定`logging source-interface`命令
|
||||
- 验证命令`show logging`
|
||||
- 配置`service timestamp log datetime localtime msec show-timezone`命令
|
||||
- 在PC机上检查`syslog`消息
|
||||
|
||||
### SNMP实验
|
||||
|
||||
在思科路由器上配置SNMP:
|
||||
|
||||
- 使用`snmp-server host`命令配置SNMP服务器
|
||||
- 使用`snmp-server community`命令,配置SNMP的只读(RO)与读写(RW)共有字符串(Configure SNMP RO and RW communities using the `snmp-server community` command)
|
||||
|
||||
|
||||
### NetFlow实验
|
||||
|
||||
在思科路由器上配置NetFlow:
|
||||
|
||||
- 在某个路由器接口上开启IP数据流的入口与出口(Enable IP flow ingress and egress on a router interface)
|
||||
- 在有流量通过路由器后,对`show ip cache flow`命令进行检查
|
||||
- 使用`ip flow-export`命令对NetFlow的版本进行配置
|
||||
- 使用`ip flow-export`命令配置一台外部NetFlow服务器
|
||||
|
||||
请访问[www.in60days.com](http://www.in60days.com)网站,免费观看作者完成此实验。
|
||||
BIN
images/021.png
|
Before Width: | Height: | Size: 144 KiB |
BIN
images/0210.png
|
Before Width: | Height: | Size: 96 KiB |
BIN
images/0211.png
|
Before Width: | Height: | Size: 152 KiB |
BIN
images/0212.png
|
Before Width: | Height: | Size: 28 KiB |
BIN
images/0213.png
|
Before Width: | Height: | Size: 303 KiB |
BIN
images/0214.png
|
Before Width: | Height: | Size: 129 KiB |
BIN
images/0215.png
|
Before Width: | Height: | Size: 121 KiB |
BIN
images/0216.png
|
Before Width: | Height: | Size: 65 KiB |
BIN
images/0217.png
|
Before Width: | Height: | Size: 103 KiB |
BIN
images/0218.png
|
Before Width: | Height: | Size: 114 KiB |
BIN
images/0219.png
|
Before Width: | Height: | Size: 72 KiB |
BIN
images/022.png
|
Before Width: | Height: | Size: 237 KiB |
BIN
images/0220.png
|
Before Width: | Height: | Size: 165 KiB |
BIN
images/023.png
|
Before Width: | Height: | Size: 253 KiB |
BIN
images/024.png
|
Before Width: | Height: | Size: 250 KiB |
BIN
images/025.png
|
Before Width: | Height: | Size: 525 KiB |
BIN
images/026.png
|
Before Width: | Height: | Size: 182 KiB |
BIN
images/027.png
|
Before Width: | Height: | Size: 226 KiB |
BIN
images/028.png
|
Before Width: | Height: | Size: 120 KiB |
BIN
images/029.png
|
Before Width: | Height: | Size: 90 KiB |
BIN
images/0300.png
|
Before Width: | Height: | Size: 74 KiB |
BIN
images/0301.png
|
Before Width: | Height: | Size: 111 KiB |
BIN
images/0302.png
|
Before Width: | Height: | Size: 81 KiB |
BIN
images/0303.png
|
Before Width: | Height: | Size: 297 KiB |
BIN
images/0304.png
|
Before Width: | Height: | Size: 294 KiB |
BIN
images/0305.png
|
Before Width: | Height: | Size: 188 KiB |
BIN
images/0306.png
|
Before Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 32 KiB |
BIN
images/0401.png
|
Before Width: | Height: | Size: 111 KiB |
BIN
images/0402.png
|
Before Width: | Height: | Size: 282 KiB |
BIN
images/0403.png
|
Before Width: | Height: | Size: 223 KiB |
BIN
images/0405.png
|
Before Width: | Height: | Size: 66 KiB |
BIN
images/0406.png
|
Before Width: | Height: | Size: 54 KiB |
BIN
images/0407.png
|
Before Width: | Height: | Size: 42 KiB |
BIN
images/0408.png
|
Before Width: | Height: | Size: 41 KiB |
BIN
images/0410.png
|
Before Width: | Height: | Size: 86 KiB |
BIN
images/0501.png
|
Before Width: | Height: | Size: 134 KiB |
BIN
images/0502.png
|
Before Width: | Height: | Size: 427 KiB |
BIN
images/0503.png
|
Before Width: | Height: | Size: 88 KiB |
BIN
images/0504.png
|
Before Width: | Height: | Size: 224 KiB |
BIN
images/0505.png
|
Before Width: | Height: | Size: 115 KiB |
BIN
images/0601.png
|
Before Width: | Height: | Size: 179 KiB |
BIN
images/0602.png
|
Before Width: | Height: | Size: 190 KiB |
BIN
images/0603.png
|
Before Width: | Height: | Size: 119 KiB |
BIN
images/0604.png
|
Before Width: | Height: | Size: 119 KiB |
BIN
images/0605.png
|
Before Width: | Height: | Size: 111 KiB |
BIN
images/0606.png
|
Before Width: | Height: | Size: 114 KiB |
BIN
images/0607.png
|
Before Width: | Height: | Size: 109 KiB |
BIN
images/0608.png
|
Before Width: | Height: | Size: 119 KiB |
BIN
images/0701.png
|
Before Width: | Height: | Size: 90 KiB |
BIN
images/0702.png
|
Before Width: | Height: | Size: 70 KiB |
BIN
images/0703.png
|
Before Width: | Height: | Size: 158 KiB |
BIN
images/0704.png
|
Before Width: | Height: | Size: 58 KiB |
BIN
images/0705.png
|
Before Width: | Height: | Size: 354 KiB |
BIN
images/0706.png
|
Before Width: | Height: | Size: 31 KiB |
BIN
images/0707.png
|
Before Width: | Height: | Size: 33 KiB |
BIN
images/0708.png
|
Before Width: | Height: | Size: 32 KiB |
BIN
images/0709.png
|
Before Width: | Height: | Size: 61 KiB |
BIN
images/0710.png
|
Before Width: | Height: | Size: 66 KiB |
BIN
images/0711.png
|
Before Width: | Height: | Size: 185 KiB |
BIN
images/0712.png
|
Before Width: | Height: | Size: 233 KiB |
BIN
images/0713.png
|
Before Width: | Height: | Size: 319 KiB |
BIN
images/0714.png
|
Before Width: | Height: | Size: 184 KiB |
BIN
images/0715.png
|
Before Width: | Height: | Size: 209 KiB |